diff --git a/build/dist/aardvarkBidAdapter.js b/build/dist/aardvarkBidAdapter.js index 0953407d2ce..d6610dd81ac 100644 --- a/build/dist/aardvarkBidAdapter.js +++ b/build/dist/aardvarkBidAdapter.js @@ -1,19 +1,21 @@ -pbjsChunk([85],{ +pbjsChunk([94],{ -/***/ 40: +/***/ 42: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(41); +module.exports = __webpack_require__(43); /***/ }), -/***/ 41: +/***/ 43: /***/ (function(module, exports, __webpack_require__) { "use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + /* * Adapter for requesting bids from RTK Aardvark * To request an RTK Aardvark Header bidding account @@ -24,21 +26,23 @@ var utils = __webpack_require__(0); var bidfactory = __webpack_require__(3); var bidmanager = __webpack_require__(2); var adloader = __webpack_require__(5); -var adapter = __webpack_require__(7); +var Adapter = __webpack_require__(7)['default']; var constants = __webpack_require__(4); var adaptermanager = __webpack_require__(1); -var AARDVARK_CALLBACK_NAME = 'aardvarkResponse', - AARDVARK_REQUESTS_MAP = 'aardvarkRequests', - AARDVARK_BIDDER_CODE = 'aardvark', - DEFAULT_REFERRER = 'thor.rtk.io', - DEFAULT_ENDPOINT = 'thor.rtk.io', - endpoint = DEFAULT_ENDPOINT, - requestBids = function requestBids(bidderCode, callbackName, bidReqs) { - var ref = utils.getTopWindowLocation(), - ai = '', - scs = [], - bidIds = []; +var AARDVARK_CALLBACK_NAME = 'aardvarkResponse'; +var AARDVARK_REQUESTS_MAP = 'aardvarkRequests'; +var AARDVARK_BIDDER_CODE = 'aardvark'; +var DEFAULT_REFERRER = 'thor.rtk.io'; +var DEFAULT_ENDPOINT = 'thor.rtk.io'; + +var endpoint = DEFAULT_ENDPOINT; + +function requestBids(bidderCode, callbackName, bidReqs) { + var ref = utils.getTopWindowLocation(); + var ai = ''; + var scs = []; + var bidIds = []; ref = ref ? ref.host : DEFAULT_REFERRER; @@ -73,8 +77,9 @@ var AARDVARK_CALLBACK_NAME = 'aardvarkResponse', } adloader.loadScript(['//' + endpoint + '/', ai, '/', scs.join('_'), '/aardvark/?jsonp=pbjs.', callbackName, '&rtkreferer=', ref, '&', bidIds.join('&')].join('')); -}, - registerBidResponse = function registerBidResponse(bidderCode, rawBidResponse) { +} + +function registerBidResponse(bidderCode, rawBidResponse) { if (rawBidResponse.error) { return utils.logWarn('Aardvark bid received with an error, ignoring... [' + rawBidResponse.error + ']'); } @@ -101,8 +106,9 @@ var AARDVARK_CALLBACK_NAME = 'aardvarkResponse', bidmanager.addBidResponse(bidObj.placementCode, bidResponse); pbjs[AARDVARK_REQUESTS_MAP][bidderCode][rawBidResponse.cid].responded = true; -}, - registerAardvarkCallback = function registerAardvarkCallback(bidderCode, callbackName) { +} + +function registerAardvarkCallback(bidderCode, callbackName) { pbjs[callbackName] = function (rtkResponseObj) { rtkResponseObj.forEach((function (bidResponse) { registerBidResponse(bidderCode, bidResponse); @@ -119,15 +125,16 @@ var AARDVARK_CALLBACK_NAME = 'aardvarkResponse', } } }; -}, - AardvarkAdapter = function AardvarkAdapter() { - var baseAdapter = adapter.createNew(AARDVARK_BIDDER_CODE); +} + +var AardvarkAdapter = function AardvarkAdapter() { + var baseAdapter = new Adapter(AARDVARK_BIDDER_CODE); pbjs[AARDVARK_REQUESTS_MAP] = pbjs[AARDVARK_REQUESTS_MAP] || {}; baseAdapter.callBids = function (params) { - var bidderCode = baseAdapter.getBidderCode(), - callbackName = AARDVARK_CALLBACK_NAME; + var bidderCode = baseAdapter.getBidderCode(); + var callbackName = AARDVARK_CALLBACK_NAME; if (bidderCode !== AARDVARK_BIDDER_CODE) { callbackName = [AARDVARK_CALLBACK_NAME, bidderCode].join('_'); @@ -140,15 +147,10 @@ var AARDVARK_CALLBACK_NAME = 'aardvarkResponse', return requestBids(bidderCode, callbackName, params.bids || []); }; - return { + return _extends(this, { callBids: baseAdapter.callBids, - setBidderCode: baseAdapter.setBidderCode, - createNew: exports.createNew - }; -}; - -exports.createNew = function () { - return new AardvarkAdapter(); + setBidderCode: baseAdapter.setBidderCode + }); }; adaptermanager.registerBidAdapter(new AardvarkAdapter(), 'aardvark'); @@ -157,4 +159,4 @@ module.exports = AardvarkAdapter; /***/ }) -},[40]); \ No newline at end of file +},[42]); \ No newline at end of file diff --git a/build/dist/adbladeBidAdapter.js b/build/dist/adbladeBidAdapter.js index f76db05d7d3..1d97c0d8612 100644 --- a/build/dist/adbladeBidAdapter.js +++ b/build/dist/adbladeBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([84],{ +pbjsChunk([93],{ -/***/ 44: +/***/ 46: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(45); +module.exports = __webpack_require__(47); /***/ }), -/***/ 45: +/***/ 47: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34,12 +34,12 @@ var AdbladeAdapter = function AdbladeAdapter() { var DEFAULT_BID_FLOOR = 0.0000000001; function _callBids(params) { - var bids = params.bids || [], - referrer = utils.getTopWindowUrl(), - loc = utils.getTopWindowLocation(), - domain = loc.hostname, - partnerId = 0, - bidRequests = {}; + var bids = params.bids || []; + var referrer = utils.getTopWindowUrl(); + var loc = utils.getTopWindowLocation(); + var domain = loc.hostname; + var partnerId = 0; + var bidRequests = {}; if (bids.length > 0) { partnerId = '' + bids[0].params.partnerId; @@ -92,9 +92,9 @@ var AdbladeAdapter = function AdbladeAdapter() { } pbjs.adbladeResponse = function (response) { - var auctionIdRe = /\$(%7B|\{)AUCTION_ID(%7D|\})/gi, - auctionPriceRe = /\$(%7B|\{)AUCTION_PRICE(%7D|\})/gi, - clickUrlRe = /\$(%7B|\{)CLICK_URL(%7D|\})/gi; + var auctionIdRe = /\$(%7B|\{)AUCTION_ID(%7D|\})/gi; + var auctionPriceRe = /\$(%7B|\{)AUCTION_PRICE(%7D|\})/gi; + var clickUrlRe = /\$(%7B|\{)CLICK_URL(%7D|\})/gi; if (typeof response === 'undefined' || !response.hasOwnProperty('seatbid') || utils.isEmpty(response.seatbid)) { // handle empty bids @@ -112,8 +112,8 @@ var AdbladeAdapter = function AdbladeAdapter() { utils._each(response.seatbid, (function (seatbid) { utils._each(seatbid.bid, (function (seatbidBid) { - var bidRequest = utils.getBidRequest(seatbidBid.impid), - ad = seatbidBid.adm + utils.createTrackPixelHtml(seatbidBid.nurl); + var bidRequest = utils.getBidRequest(seatbidBid.impid); + var ad = seatbidBid.adm + utils.createTrackPixelHtml(seatbidBid.nurl); ad = ad.replace(auctionIdRe, seatbidBid.impid); ad = ad.replace(clickUrlRe, ''); @@ -142,4 +142,4 @@ module.exports = AdbladeAdapter; /***/ }) -},[44]); \ No newline at end of file +},[46]); \ No newline at end of file diff --git a/build/dist/adbundBidAdapter.js b/build/dist/adbundBidAdapter.js index ec6724d6a4f..28554c5f4be 100644 --- a/build/dist/adbundBidAdapter.js +++ b/build/dist/adbundBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([83],{ +pbjsChunk([92],{ -/***/ 46: +/***/ 48: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(47); +module.exports = __webpack_require__(49); /***/ }), -/***/ 47: +/***/ 49: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -23,7 +23,7 @@ var bidmanager = __webpack_require__(2); var adloader = __webpack_require__(5); var adaptermanager = __webpack_require__(1); -var adBundAdapter = function adBundAdapter() { +function AdBundAdapter() { var timezone = new Date().getTimezoneOffset(); var bidAPIs = ['http://us-east-engine.adbund.xyz/prebid/ad/get', 'http://us-west-engine.adbund.xyz/prebid/ad/get']; // Based on the time zone to select the interface to the server @@ -77,12 +77,12 @@ var adBundAdapter = function adBundAdapter() { return { callBids: _callBids }; -}; +} -adaptermanager.registerBidAdapter(new adBundAdapter(), 'adbund'); +adaptermanager.registerBidAdapter(new AdBundAdapter(), 'adbund'); -module.exports = adBundAdapter; +module.exports = AdBundAdapter; /***/ }) -},[46]); \ No newline at end of file +},[48]); \ No newline at end of file diff --git a/build/dist/adbutlerBidAdapter.js b/build/dist/adbutlerBidAdapter.js index c45bb8ec9dd..244997a3c2d 100644 --- a/build/dist/adbutlerBidAdapter.js +++ b/build/dist/adbutlerBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([82],{ +pbjsChunk([91],{ -/***/ 48: +/***/ 50: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(49); +module.exports = __webpack_require__(51); /***/ }), -/***/ 49: +/***/ 51: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27,16 +27,16 @@ var adaptermanager = __webpack_require__(1); var AdButlerAdapter = function AdButlerAdapter() { function _callBids(params) { - var bids = params.bids || [], - callbackData = {}, - zoneCount = {}, - pageID = Math.floor(Math.random() * 10e6); + var bids = params.bids || []; + var callbackData = {}; + var zoneCount = {}; + var pageID = Math.floor(Math.random() * 10e6); // Build and send bid requests for (var i = 0; i < bids.length; i++) { - var bid = bids[i], - zoneID = utils.getBidIdParameter('zoneID', bid.params), - callbackID; + var bid = bids[i]; + var zoneID = utils.getBidIdParameter('zoneID', bid.params); + var callbackID; if (!(zoneID in zoneCount)) { zoneCount[zoneID] = 0; @@ -56,16 +56,16 @@ var AdButlerAdapter = function AdButlerAdapter() { // Define callback function for bid responses pbjs.adbutlerCB = function (aBResponseObject) { - var bidResponse = {}, - callbackID = aBResponseObject.zone_id + '_' + aBResponseObject.place, - width = parseInt(aBResponseObject.width), - height = parseInt(aBResponseObject.height), - isCorrectSize = false, - isCorrectCPM = true, - CPM, - minCPM, - maxCPM, - bidObj = callbackData[callbackID] ? utils.getBidRequest(callbackData[callbackID].bidId) : null; + var bidResponse = {}; + var callbackID = aBResponseObject.zone_id + '_' + aBResponseObject.place; + var width = parseInt(aBResponseObject.width); + var height = parseInt(aBResponseObject.height); + var isCorrectSize = false; + var isCorrectCPM = true; + var CPM; + var minCPM; + var maxCPM; + var bidObj = callbackData[callbackID] ? utils.getBidRequest(callbackData[callbackID].bidId) : null; if (bidObj) { if (aBResponseObject.status === 'SUCCESS') { @@ -111,10 +111,10 @@ var AdButlerAdapter = function AdButlerAdapter() { } function buildRequest(bid, adIndex, pageID) { - var accountID = utils.getBidIdParameter('accountID', bid.params), - zoneID = utils.getBidIdParameter('zoneID', bid.params), - keyword = utils.getBidIdParameter('keyword', bid.params), - domain = utils.getBidIdParameter('domain', bid.params); + var accountID = utils.getBidIdParameter('accountID', bid.params); + var zoneID = utils.getBidIdParameter('zoneID', bid.params); + var keyword = utils.getBidIdParameter('keyword', bid.params); + var domain = utils.getBidIdParameter('domain', bid.params); if (typeof domain === 'undefined' || domain.length === 0) { domain = 'servedbyadbutler.com'; @@ -161,4 +161,4 @@ module.exports = AdButlerAdapter; /***/ }) -},[48]); \ No newline at end of file +},[50]); \ No newline at end of file diff --git a/build/dist/adequantBidAdapter.js b/build/dist/adequantBidAdapter.js index 03046747c76..20de20348e4 100644 --- a/build/dist/adequantBidAdapter.js +++ b/build/dist/adequantBidAdapter.js @@ -1,21 +1,19 @@ -pbjsChunk([81],{ +pbjsChunk([90],{ -/***/ 50: +/***/ 52: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(51); +module.exports = __webpack_require__(53); /***/ }), -/***/ 51: +/***/ 53: /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var bidfactory = __webpack_require__(3); var bidmanager = __webpack_require__(2); var adloader = __webpack_require__(5); @@ -43,7 +41,7 @@ function AdequantAdapter() { publisher_id = br_params.publisher_id.toString() || publisher_id; var bidfloor = br_params.bidfloor || 0.01; cats = br_params.cats || cats; - if ((typeof cats === 'undefined' ? 'undefined' : _typeof(cats)) === utils.objectType_string) { + if (typeof cats === 'string') { cats = cats.split(' '); } var br_sizes = utils.parseSizesInput(bid_request.sizes); @@ -69,9 +67,9 @@ function AdequantAdapter() { } function process_bids(replies, placements) { - var placement_code, - bid, - adequant_creatives = window.adequant_creatives; + var placement_code; + var bid; + var adequant_creatives = window.adequant_creatives; if (adequant_creatives && adequant_creatives.seatbid) { for (var i = 0; i < adequant_creatives.seatbid.length; i++) { var bid_response = adequant_creatives.seatbid[i].bid[0]; @@ -111,4 +109,4 @@ module.exports = AdequantAdapter; /***/ }) -},[50]); \ No newline at end of file +},[52]); \ No newline at end of file diff --git a/build/dist/adformBidAdapter.js b/build/dist/adformBidAdapter.js index 4782594ce0d..83bdc9ca6aa 100644 --- a/build/dist/adformBidAdapter.js +++ b/build/dist/adformBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([80],{ +pbjsChunk([89],{ -/***/ 52: +/***/ 54: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(53); +module.exports = __webpack_require__(55); /***/ }), -/***/ 53: +/***/ 55: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -188,4 +188,4 @@ module.exports = AdformAdapter; /***/ }) -},[52]); \ No newline at end of file +},[54]); \ No newline at end of file diff --git a/build/dist/adkernelBidAdapter.js b/build/dist/adkernelBidAdapter.js index 85d7ea37170..ca95bb72b88 100644 --- a/build/dist/adkernelBidAdapter.js +++ b/build/dist/adkernelBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([79],{ +pbjsChunk([88],{ -/***/ 54: +/***/ 56: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(55); +module.exports = __webpack_require__(57); /***/ }), -/***/ 55: +/***/ 57: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -56,7 +56,7 @@ var AdKernelAdapter = function AdKernelAdapter() { var VIDEO_TARGETING = ['mimes', 'minduration', 'maxduration', 'protocols', 'startdelay', 'linearity', 'sequence', 'boxingallowed', 'playbackmethod', 'delivery', 'pos', 'api', 'ext']; - var baseAdapter = _adapter2['default'].createNew('adkernel'); + var baseAdapter = new _adapter2['default']('adkernel'); /** * Helper object to build multiple bid requests in case of multiple zones/ad-networks @@ -95,7 +95,10 @@ var AdKernelAdapter = function AdKernelAdapter() { function buildImp(bid) { var size = getBidSize(bid); - var imp = { 'id': bid.bidId, 'tagid': bid.placementCode }; + var imp = { + 'id': bid.bidId, + 'tagid': bid.placementCode + }; if (bid.mediaType === 'video') { imp.video = { w: size[0], h: size[1] }; @@ -333,19 +336,11 @@ var AdKernelAdapter = function AdKernelAdapter() { } } - return { + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode, - getBidderCode: baseAdapter.getBidderCode, - createNew: AdKernelAdapter.createNew - }; -}; - -/** - * Creates new instance of AdKernel bidder adapter - */ -AdKernelAdapter.createNew = function () { - return new AdKernelAdapter(); + getBidderCode: baseAdapter.getBidderCode + }); }; _adaptermanager2['default'].registerBidAdapter(new AdKernelAdapter(), 'adkernel', { @@ -357,4 +352,4 @@ module.exports = AdKernelAdapter; /***/ }) -},[54]); \ No newline at end of file +},[56]); \ No newline at end of file diff --git a/build/dist/admediaBidAdapter.js b/build/dist/admediaBidAdapter.js index 16e658ec084..d3c8c82131b 100644 --- a/build/dist/admediaBidAdapter.js +++ b/build/dist/admediaBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([78],{ +pbjsChunk([87],{ -/***/ 56: +/***/ 58: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(57); +module.exports = __webpack_require__(59); /***/ }), -/***/ 57: +/***/ 59: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -29,8 +29,8 @@ var adaptermanager = __webpack_require__(1); */ var AdmediaAdapter = function AdmediaAdapter() { function _callBids(params) { - var bids, - bidderUrl = window.location.protocol + '//b.admedia.com/banner/prebid/bidder/?'; + var bids; + var bidderUrl = window.location.protocol + '//b.admedia.com/banner/prebid/bidder/?'; bids = params.bids || []; for (var i = 0; i < bids.length; i++) { var request_obj = {}; @@ -125,4 +125,4 @@ module.exports = AdmediaAdapter; /***/ }) -},[56]); \ No newline at end of file +},[58]); \ No newline at end of file diff --git a/build/dist/admixerBidAdapter.js b/build/dist/admixerBidAdapter.js index d034c79af54..1562e31319c 100644 --- a/build/dist/admixerBidAdapter.js +++ b/build/dist/admixerBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([77],{ +pbjsChunk([86],{ -/***/ 58: +/***/ 60: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(59); +module.exports = __webpack_require__(61); /***/ }), -/***/ 59: +/***/ 61: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -109,4 +109,4 @@ module.exports = AdmixerAdapter; /***/ }) -},[58]); \ No newline at end of file +},[60]); \ No newline at end of file diff --git a/build/dist/adsupplyBidAdapter.js b/build/dist/adsupplyBidAdapter.js index eaa41f066fc..e659f5ef634 100644 --- a/build/dist/adsupplyBidAdapter.js +++ b/build/dist/adsupplyBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([76],{ +pbjsChunk([85],{ -/***/ 60: +/***/ 62: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(61); +module.exports = __webpack_require__(63); /***/ }), -/***/ 61: +/***/ 63: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -107,4 +107,4 @@ module.exports = AdSupplyAdapter; /***/ }) -},[60]); \ No newline at end of file +},[62]); \ No newline at end of file diff --git a/build/dist/adyoulikeBidAdapter.js b/build/dist/adyoulikeBidAdapter.js index a01d6f7149a..56e5a104a46 100644 --- a/build/dist/adyoulikeBidAdapter.js +++ b/build/dist/adyoulikeBidAdapter.js @@ -1,19 +1,21 @@ -pbjsChunk([75],{ +pbjsChunk([84],{ -/***/ 62: +/***/ 64: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(63); +module.exports = __webpack_require__(65); /***/ }), -/***/ 63: +/***/ 65: /***/ (function(module, exports, __webpack_require__) { "use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + var _adapter = __webpack_require__(7); var _adapter2 = _interopRequireDefault(_adapter); @@ -30,7 +32,7 @@ var _utils = __webpack_require__(0); var utils = _interopRequireWildcard(_utils); -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); var _ajax = __webpack_require__(6); @@ -47,7 +49,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'd var AdyoulikeAdapter = function AdyoulikeAdapter() { var _VERSION = '0.1'; - var baseAdapter = _adapter2['default'].createNew('adyoulike'); + var baseAdapter = new _adapter2['default']('adyoulike'); baseAdapter.callBids = function (bidRequest) { var bidRequests = {}; @@ -183,8 +185,8 @@ var AdyoulikeAdapter = function AdyoulikeAdapter() { /* Get parsed size from request size */ function getSize(requestSizes) { - var parsed = {}, - size = utils.parseSizesInput(requestSizes)[0]; + var parsed = {}; + var size = utils.parseSizesInput(requestSizes)[0]; if (typeof size !== 'string') { return parsed; @@ -230,15 +232,10 @@ var AdyoulikeAdapter = function AdyoulikeAdapter() { _bidmanager2['default'].addBidResponse(placement, bid); } - return { - createNew: AdyoulikeAdapter.createNew, + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode - }; -}; - -AdyoulikeAdapter.createNew = function () { - return new AdyoulikeAdapter(); + }); }; _adaptermanager2['default'].registerBidAdapter(new AdyoulikeAdapter(), 'adyoulike'); @@ -247,4 +244,4 @@ module.exports = AdyoulikeAdapter; /***/ }) -},[62]); \ No newline at end of file +},[64]); \ No newline at end of file diff --git a/build/dist/aolBidAdapter.js b/build/dist/aolBidAdapter.js index 0151891e6a8..850d2924383 100644 --- a/build/dist/aolBidAdapter.js +++ b/build/dist/aolBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([74],{ +pbjsChunk([83],{ -/***/ 64: +/***/ 66: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(65); +module.exports = __webpack_require__(67); /***/ }), -/***/ 65: +/***/ 67: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -28,7 +28,7 @@ var bidfactory = __webpack_require__(3); var bidmanager = __webpack_require__(2); var constants = __webpack_require__(4); var adaptermanager = __webpack_require__(1); -var BaseAdapter = __webpack_require__(7); +var BaseAdapter = __webpack_require__(7)['default']; var AOL_BIDDERS_CODES = { aol: 'aol', @@ -349,11 +349,8 @@ var AolAdapter = function AolAdapter() { })); } - return _extends(BaseAdapter.createNew(AOL_BIDDERS_CODES.aol), { - callBids: _callBids, - createNew: function createNew() { - return new AolAdapter(); - } + return _extends(this, new BaseAdapter(AOL_BIDDERS_CODES.aol), { + callBids: _callBids }); }; @@ -365,4 +362,4 @@ module.exports = AolAdapter; /***/ }) -},[64]); \ No newline at end of file +},[66]); \ No newline at end of file diff --git a/build/dist/appnexusAnalyticsAdapter.js b/build/dist/appnexusAnalyticsAdapter.js index 9b5b0eccf20..5525e7ea144 100644 --- a/build/dist/appnexusAnalyticsAdapter.js +++ b/build/dist/appnexusAnalyticsAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([5],{ +pbjsChunk([6],{ -/***/ 66: +/***/ 68: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(67); +module.exports = __webpack_require__(69); /***/ }), -/***/ 67: +/***/ 69: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -88,7 +88,6 @@ var LIBRARY = 'library'; var ENDPOINT = 'endpoint'; var BUNDLE = 'bundle'; -var _timedOutBidders = []; var _sampled = true; function AnalyticsAdapter(_ref) { @@ -190,9 +189,7 @@ function AnalyticsAdapter(_ref) { args = event.args; - if (eventType === BID_TIMEOUT) { - _timedOutBidders = args.bidderCode; - } else { + if (eventType !== BID_TIMEOUT) { _enqueue.call(_this, { eventType: eventType, args: args }); } })); @@ -255,4 +252,4 @@ function AnalyticsAdapter(_ref) { /***/ }) -},[66]); \ No newline at end of file +},[68]); \ No newline at end of file diff --git a/build/dist/appnexusAstBidAdapter.js b/build/dist/appnexusAstBidAdapter.js index 424be829389..a1d848f7bec 100644 --- a/build/dist/appnexusAstBidAdapter.js +++ b/build/dist/appnexusAstBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([73],{ +pbjsChunk([82],{ -/***/ 68: +/***/ 70: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(69); +module.exports = __webpack_require__(71); /***/ }), -/***/ 69: +/***/ 71: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22,7 +22,7 @@ var _adapter = __webpack_require__(7); var _adapter2 = _interopRequireDefault(_adapter); -var _Renderer = __webpack_require__(16); +var _Renderer = __webpack_require__(17); var _bidfactory = __webpack_require__(3); @@ -56,6 +56,7 @@ var VIDEO_TARGETING = ['id', 'mimes', 'minduration', 'maxduration', 'startdelay' var USER_PARAMS = ['age', 'external_uid', 'segments', 'gender', 'dnt', 'language']; var NATIVE_MAPPING = { body: 'description', + cta: 'ctatext', image: { serverName: 'main_image', serverParams: { required: true, sizes: [{}] } @@ -73,7 +74,7 @@ var NATIVE_MAPPING = { * to Prebid.js. This adapter supports alias bidding. */ function AppnexusAstAdapter() { - var baseAdapter = _adapter2['default'].createNew('appnexusAst'); + var baseAdapter = new _adapter2['default']('appnexusAst'); var bidRequests = {}; var usersync = false; @@ -148,7 +149,7 @@ function AppnexusAstAdapter() { // if the mapping for this identifier specifies required server // params via the `serverParams` object, merge that in - var params = _extends({}, bid.nativeParams[key], NATIVE_MAPPING[key] && NATIVE_MAPPING[key].serverParams); + var params = _extends({}, NATIVE_MAPPING[key] && NATIVE_MAPPING[key].serverParams, bid.nativeParams[key]); nativeRequest[requestKey] = params; })); @@ -399,6 +400,7 @@ function AppnexusAstAdapter() { bid.native = { title: native.title, body: native.desc, + cta: native.ctatext, sponsoredBy: native.sponsored, image: native.main_img && native.main_img.url, icon: native.icon && native.icon.url, @@ -422,17 +424,12 @@ function AppnexusAstAdapter() { return bid; } - return { - createNew: AppnexusAstAdapter.createNew, + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode - }; + }); } -AppnexusAstAdapter.createNew = function () { - return new AppnexusAstAdapter(); -}; - _adaptermanager2['default'].registerBidAdapter(new AppnexusAstAdapter(), 'appnexusAst', { supportedMediaTypes: ['video', 'native'] }); @@ -441,4 +438,4 @@ module.exports = AppnexusAstAdapter; /***/ }) -},[68]); \ No newline at end of file +},[70]); \ No newline at end of file diff --git a/build/dist/appnexusBidAdapter.js b/build/dist/appnexusBidAdapter.js index 224cb0c4b2c..427e8b776b6 100644 --- a/build/dist/appnexusBidAdapter.js +++ b/build/dist/appnexusBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([72],{ +pbjsChunk([81],{ -/***/ 70: +/***/ 72: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(71); +module.exports = __webpack_require__(73); /***/ }), -/***/ 71: +/***/ 73: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -29,11 +29,11 @@ var utils = __webpack_require__(0); var adloader = __webpack_require__(5); var bidmanager = __webpack_require__(2); var bidfactory = __webpack_require__(3); -var Adapter = __webpack_require__(7); +var Adapter = __webpack_require__(7)['default']; var AppNexusAdapter; AppNexusAdapter = function AppNexusAdapter() { - var baseAdapter = Adapter.createNew('appnexus'); + var baseAdapter = new Adapter('appnexus'); var usersync = false; baseAdapter.callBids = function (params) { @@ -237,16 +237,11 @@ AppNexusAdapter = function AppNexusAdapter() { } }; - return { + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode, - createNew: AppNexusAdapter.createNew, buildJPTCall: buildJPTCall - }; -}; - -AppNexusAdapter.createNew = function () { - return new AppNexusAdapter(); + }); }; _adaptermanager2['default'].registerBidAdapter(new AppNexusAdapter(), 'appnexus'); @@ -262,4 +257,4 @@ module.exports = AppNexusAdapter; /***/ }) -},[70]); \ No newline at end of file +},[72]); \ No newline at end of file diff --git a/build/dist/atomxBidAdapter.js b/build/dist/atomxBidAdapter.js index 27d78f2ec98..95e388ae6b7 100644 --- a/build/dist/atomxBidAdapter.js +++ b/build/dist/atomxBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([71],{ +pbjsChunk([80],{ -/***/ 72: +/***/ 74: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(73); +module.exports = __webpack_require__(75); /***/ }), -/***/ 73: +/***/ 75: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -44,11 +44,14 @@ var AtomxAdapter = function AtomxAdapter() { for (var i = 0, ln = bids.length; i < ln; i++) { var bid = bids[i]; if (bid.params && bid.params.id) { - Ajax.ajax(url, _responseCallback.bind(this, bid), { - id: bid.params.id, - size: utils.parseSizesInput(bid.sizes)[0], - prebid: bid.placementCode - }, { method: 'GET' }); + var sizes = utils.parseSizesInput(bid.sizes); + for (var j = 0; j < sizes.length; j++) { + Ajax.ajax(url, _responseCallback.bind(this, bid), { + id: bid.params.id, + size: sizes[j], + prebid: bid.placementCode + }, { method: 'GET' }); + } } else { var bidObject = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bid); bidObject.bidderCode = 'atomx'; @@ -97,4 +100,4 @@ module.exports = AtomxAdapter; /***/ }) -},[72]); \ No newline at end of file +},[74]); \ No newline at end of file diff --git a/build/dist/audienceNetworkBidAdapter.js b/build/dist/audienceNetworkBidAdapter.js index c864fb8a945..af435b3e5bf 100644 --- a/build/dist/audienceNetworkBidAdapter.js +++ b/build/dist/audienceNetworkBidAdapter.js @@ -1,19 +1,21 @@ -pbjsChunk([70],{ +pbjsChunk([79],{ -/***/ 74: +/***/ 76: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(75); +module.exports = __webpack_require__(77); /***/ }), -/***/ 75: +/***/ 77: /***/ (function(module, exports, __webpack_require__) { "use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** @@ -29,21 +31,23 @@ var _bidmanager = __webpack_require__(2); var _constants = __webpack_require__(4); -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); var _utils = __webpack_require__(0); var _adapter = __webpack_require__(7); +var _adapter2 = _interopRequireDefault(_adapter); + var _adaptermanager = __webpack_require__(1); var _adaptermanager2 = _interopRequireDefault(_adaptermanager); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } -var _createNew = (0, _adapter.createNew)('audienceNetwork'), - setBidderCode = _createNew.setBidderCode, - getBidderCode = _createNew.getBidderCode; +var _ref = new _adapter2['default']('audienceNetwork'), + setBidderCode = _ref.setBidderCode, + getBidderCode = _ref.getBidderCode; /** * Does this bid request contain valid parameters? @@ -167,7 +171,7 @@ var createSuccessBidResponse = function createSuccessBidResponse(placementId, si bid.fb_placementid = placementId; // Video attributes if (isVideo(format)) { - var vast = 'https://an.facebook.com/v1/instream/vast.xml?placementid=' + placementId + '&pageurl=' + encodeURIComponent(pageurl) + '&playerwidth=' + bid.width + '&playerheight=' + bid.height + '&bidid=' + bidId; + var vast = 'https://an.facebook.com/v1/instream/vast.xml?placementid=' + placementId + '&pageurl=' + pageurl + '&playerwidth=' + bid.width + '&playerheight=' + bid.height + '&bidid=' + bidId; bid.mediaType = 'video'; bid.vastUrl = vast; bid.descriptionUrl = vast; @@ -220,7 +224,7 @@ var callBids = function callBids(bidRequest) { if (placementids.length) { // Build URL var testmode = isTestmode(); - var pageurl = location.href; + var pageurl = encodeURIComponent(location.href); var search = { placementids: placementids, adformats: adformats, @@ -283,9 +287,13 @@ var callBids = function callBids(bidRequest) { * @property {Function} setBidderCode - used for bidder aliasing * @property {Function} getBidderCode - unique 'audienceNetwork' identifier */ -var AudienceNetwork = function AudienceNetwork() { - return { callBids: callBids, setBidderCode: setBidderCode, getBidderCode: getBidderCode }; -}; +function AudienceNetwork() { + return _extends(this, { + callBids: callBids, + setBidderCode: setBidderCode, + getBidderCode: getBidderCode + }); +} _adaptermanager2['default'].registerBidAdapter(new AudienceNetwork(), 'audienceNetwork', { supportedMediaTypes: ['video'] @@ -295,4 +303,4 @@ module.exports = AudienceNetwork; /***/ }) -},[74]); \ No newline at end of file +},[76]); \ No newline at end of file diff --git a/build/dist/beachfrontBidAdapter.js b/build/dist/beachfrontBidAdapter.js index bb327f5c47a..b334f1aa0a5 100644 --- a/build/dist/beachfrontBidAdapter.js +++ b/build/dist/beachfrontBidAdapter.js @@ -1,19 +1,21 @@ -pbjsChunk([69],{ +pbjsChunk([78],{ -/***/ 76: +/***/ 78: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(77); +module.exports = __webpack_require__(79); /***/ }), -/***/ 77: +/***/ 79: /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) { +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + var _adapter = __webpack_require__(7); var _adapter2 = _interopRequireDefault(_adapter); @@ -45,7 +47,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'd var ENDPOINT = '//reachms.bfmio.com/bid.json?exchange_id='; function BeachfrontAdapter() { - var baseAdapter = _adapter2['default'].createNew('beachfront'); + var baseAdapter = new _adapter2['default']('beachfront'); baseAdapter.callBids = function (bidRequests) { var bids = bidRequests.bids || []; @@ -159,24 +161,19 @@ function BeachfrontAdapter() { return bid; } - return { - createNew: BeachfrontAdapter.createNew, + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode - }; + }); } -BeachfrontAdapter.createNew = function () { - return new BeachfrontAdapter(); -}; - _adaptermanager2['default'].registerBidAdapter(new BeachfrontAdapter(), 'beachfront', { supportedMediaTypes: ['video'] }); module.exports = BeachfrontAdapter; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(25))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27))) /***/ }) -},[76]); \ No newline at end of file +},[78]); \ No newline at end of file diff --git a/build/dist/bidfluenceBidAdapter.js b/build/dist/bidfluenceBidAdapter.js index a9fe874923a..a6fb57a2040 100644 --- a/build/dist/bidfluenceBidAdapter.js +++ b/build/dist/bidfluenceBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([68],{ +pbjsChunk([77],{ -/***/ 78: +/***/ 80: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(79); +module.exports = __webpack_require__(81); /***/ }), -/***/ 79: +/***/ 81: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75,4 +75,4 @@ module.exports = BidfluenceAdapter; /***/ }) -},[78]); \ No newline at end of file +},[80]); \ No newline at end of file diff --git a/build/dist/brightcomBidAdapter.js b/build/dist/brightcomBidAdapter.js index 31d72742255..8633b363cbd 100644 --- a/build/dist/brightcomBidAdapter.js +++ b/build/dist/brightcomBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([67],{ +pbjsChunk([76],{ -/***/ 80: +/***/ 82: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(81); +module.exports = __webpack_require__(83); /***/ }), -/***/ 81: +/***/ 83: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -35,8 +35,8 @@ var BrightcomAdapter = function BrightcomAdapter() { var brightcomCallbackFunction = 'window.pbjs=window.pbjs||window.parent.pbjs||window.top.pbjs;window.pbjs.brightcomResponse'; // Manage the requested and received ad units' codes, to know which are invalid (didn't return) - var reqAdUnitsCode = [], - resAdUnitsCode = []; + var reqAdUnitsCode = []; + var resAdUnitsCode = []; function _callBids(params) { var bidRequests = params.bids || []; @@ -218,4 +218,4 @@ module.exports = BrightcomAdapter; /***/ }) -},[80]); \ No newline at end of file +},[82]); \ No newline at end of file diff --git a/build/dist/c1xBidAdapter.js b/build/dist/c1xBidAdapter.js new file mode 100644 index 00000000000..26546ffee8e --- /dev/null +++ b/build/dist/c1xBidAdapter.js @@ -0,0 +1,169 @@ +pbjsChunk([75],{ + +/***/ 84: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(85); + + +/***/ }), + +/***/ 85: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CONSTANTS = __webpack_require__(4); +var utils = __webpack_require__(0); +var bidfactory = __webpack_require__(3); +var bidmanager = __webpack_require__(2); +var adloader = __webpack_require__(5); +var adaptermanager = __webpack_require__(1); + +/** + * Adapter for requesting bids from C1X header tag server. + * v2.0 (c) C1X Inc., 2017 + * + * @param {Object} options - Configuration options for C1X + * + * @returns {{callBids: _callBids}} + * @constructor + */ +function C1XAdapter() { + // default endpoint. Can be overridden by adding an "endpoint" property to the first param in bidder config. + var ENDPOINT = 'http://ht-integration.c1exchange.com:9000/ht'; + var PIXEL_ENDPOINT = '//px.c1exchange.com/pubpixel/'; + var PIXEL_FIRE_DELAY = 3000; + var LOG_MSG = { + invalidBid: 'C1X: ERROR bidder returns an invalid bid', + noSite: 'C1X: ERROR no site id supplied', + noBid: 'C1X: INFO creating a NO bid for Adunit: ', + bidWin: 'C1X: INFO creating a bid for Adunit: ' + }; + var BIDDER_CODE = 'c1x'; + + var pbjs = window.pbjs; + + pbjs._c1xResponse = function (c1xResponse) { + var response = c1xResponse; + + if (typeof response === 'string') { + try { + response = JSON.parse(c1xResponse); + } catch (error) { + utils.logError(error); + } + } + + if (response && !response.error) { + for (var i = 0; i < response.length; i++) { + var data = response[i]; + var bidObject = null; + if (data.bid) { + bidObject = bidfactory.createBid(CONSTANTS.STATUS.GOOD); + bidObject.bidderCode = BIDDER_CODE; + bidObject.cpm = data.cpm; + bidObject.ad = data.ad; + bidObject.width = data.width; + bidObject.height = data.height; + utils.logInfo(LOG_MSG.bidWin + data.adId + ' size: ' + data.width + 'x' + data.height); + bidmanager.addBidResponse(data.adId, bidObject); + } else { + // no bid + utils.logInfo(LOG_MSG.noBid + data.adId); + bidmanager.addBidResponse(data.adId, noBidResponse()); + } + } + } else { + // invalid bid + var slots = pbjs.adUnits; + utils.logWarn(LOG_MSG.invalidBid); + for (i = 0; i < slots.length; i++) { + bidmanager.addBidResponse(slots[i].code, noBidResponse()); + } + } + }; + + function noBidResponse() { + var bidObject = bidfactory.createBid(CONSTANTS.STATUS.NO_BID); + bidObject.bidderCode = BIDDER_CODE; + return bidObject; + } + + // inject the audience pixel only if bids.params.pixelId is set. + function injectAudiencePixel(pixel) { + var pixelId = pixel; + window.setTimeout((function () { + var pixel = document.createElement('img'); + pixel.width = 1; + pixel.height = 1; + pixel.style = 'display:none;'; + var useSSL = document.location.protocol; + pixel.src = (useSSL ? 'https:' : 'http:') + PIXEL_ENDPOINT + pixelId; + document.body.insertBefore(pixel, null); + }), PIXEL_FIRE_DELAY); + } + + function _callBids(params) { + var bids = params.bids; + var c1xParams = bids[0].params; + + if (c1xParams.pixelId) { + var pixelId = c1xParams.pixelId; + injectAudiencePixel(pixelId); + } + + var siteId = c1xParams.siteId; + if (!siteId) { + utils.logWarn(LOG_MSG.noSite); + return; + } + + var options = ['adunits=' + bids.length]; + options.push('site=' + siteId); + + for (var i = 0; i < bids.length; i++) { + options.push('a' + (i + 1) + '=' + bids[i].placementCode); + var sizes = bids[i].sizes; + var sizeStr = sizes.reduce((function (prev, current) { + return prev + (prev === '' ? '' : ',') + current.join('x'); + }), ''); + // send floor price if the setting is available. + var floorPriceMap = c1xParams.floorPriceMap; + if (floorPriceMap) { + var adUnitSize = sizes[0].join('x'); + if (adUnitSize in floorPriceMap) { + options.push('a' + (i + 1) + 'p=' + floorPriceMap[adUnitSize]); + } + } + options.push('a' + (i + 1) + 's=[' + sizeStr + ']'); + } + options.push('rid=' + new Date().getTime()); // cache busting + var c1xEndpoint = ENDPOINT; + if (c1xParams.endpoint) { + c1xEndpoint = c1xParams.endpoint; + } + var dspid = c1xParams.dspid; + if (dspid) { + options.push('dspid=' + dspid); + } + var url = c1xEndpoint + '?' + options.join('&'); + window._c1xResponse = function (c1xResponse) { + pbjs._c1xResponse(c1xResponse); + }; + adloader.loadScript(url); + } + // Export the callBids function, so that prebid.js can execute this function + // when the page asks to send out bid requests. + return { + callBids: _callBids + }; +}; + +adaptermanager.registerBidAdapter(new C1XAdapter(), 'c1x'); +module.exports = C1XAdapter; + +/***/ }) + +},[84]); \ No newline at end of file diff --git a/build/dist/carambolaBidAdapter.js b/build/dist/carambolaBidAdapter.js index 1e709de77f4..db9dafbda7a 100644 --- a/build/dist/carambolaBidAdapter.js +++ b/build/dist/carambolaBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([66],{ +pbjsChunk([74],{ -/***/ 82: +/***/ 86: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(83); +module.exports = __webpack_require__(87); /***/ }), -/***/ 83: +/***/ 87: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -100,7 +100,7 @@ function CarambolaAdapter() { } } - var server = bid.params.server || 'route.carambo.la'; + var server = bid.params.server || 'hb.carambo.la'; var cbolaHbApiUrl = '//' + server + '/' + REQUEST_PATH; // the responses of the bid requests @@ -130,9 +130,9 @@ function CarambolaAdapter() { // build the genral request to the server function _callBids(params) { - var isIfr = void 0, - bids = params.bids || [], - currentURL = window.parent !== window ? document.referrer : window.location.href; + var isIfr = void 0; + var bids = params.bids || []; + var currentURL = window.parent !== window ? document.referrer : window.location.href; currentURL = currentURL && encodeURIComponent(currentURL); try { isIfr = window.self !== window.top; @@ -158,12 +158,12 @@ function CarambolaAdapter() { } function _getViewportDimensions(isIfr) { - var width = void 0, - height = void 0, - tWin = window, - tDoc = document, - docEl = tDoc.documentElement, - body = void 0; + var width = void 0; + var height = void 0; + var tWin = window; + var tDoc = document; + var docEl = tDoc.documentElement; + var body = void 0; if (isIfr) { try { @@ -203,4 +203,4 @@ module.exports = CarambolaAdapter; /***/ }) -},[82]); \ No newline at end of file +},[86]); \ No newline at end of file diff --git a/build/dist/centroBidAdapter.js b/build/dist/centroBidAdapter.js index 6848743706a..5797ba1dc9a 100644 --- a/build/dist/centroBidAdapter.js +++ b/build/dist/centroBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([65],{ +pbjsChunk([73],{ -/***/ 84: +/***/ 88: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(85); +module.exports = __webpack_require__(89); /***/ }), -/***/ 85: +/***/ 89: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21,11 +21,12 @@ var adloader = __webpack_require__(5); var adaptermanager = __webpack_require__(1); var CentroAdapter = function CentroAdapter() { - var baseUrl = '//t.brand-server.com/hb', - devUrl = '//staging.brand-server.com/hb', - bidderCode = 'centro', - handlerPrefix = 'adCentroHandler_', - LOG_ERROR_MESS = { + var baseUrl = '//t.brand-server.com/hb'; + var devUrl = '//staging.brand-server.com/hb'; + var bidderCode = 'centro'; + var handlerPrefix = 'adCentroHandler_'; + + var LOG_ERROR_MESS = { noUnit: 'Bid has no unit', noAdTag: 'Bid has missmatch format.', noBid: 'Response has no bid.', @@ -47,8 +48,8 @@ var CentroAdapter = function CentroAdapter() { } function _sendBidRequest(requestedBid) { - var bid, - size = requestedBid.sizes && requestedBid.sizes[0]; + var bid; + var size = requestedBid.sizes && requestedBid.sizes[0]; bid = requestedBid.params; if (!bid.unit) { @@ -115,8 +116,8 @@ var CentroAdapter = function CentroAdapter() { size: [300, 250] */ function _callBids(params) { - var bid, - bids = params.bids || []; + var bid; + var bids = params.bids || []; for (var i = 0; i < bids.length; i++) { bid = bids[i]; if (bid && bid.bidder === bidderCode) { @@ -136,4 +137,4 @@ module.exports = CentroAdapter; /***/ }) -},[84]); \ No newline at end of file +},[88]); \ No newline at end of file diff --git a/build/dist/conversantBidAdapter.js b/build/dist/conversantBidAdapter.js index 91be810b0b8..b076f53a015 100644 --- a/build/dist/conversantBidAdapter.js +++ b/build/dist/conversantBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([64],{ +pbjsChunk([72],{ -/***/ 86: +/***/ 90: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(87); +module.exports = __webpack_require__(91); /***/ }), -/***/ 87: +/***/ 91: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -302,4 +302,4 @@ module.exports = ConversantAdapter; /***/ }) -},[86]); \ No newline at end of file +},[90]); \ No newline at end of file diff --git a/build/dist/coxBidAdapter.js b/build/dist/coxBidAdapter.js index d2e9c098d28..89d6f0ea49c 100644 --- a/build/dist/coxBidAdapter.js +++ b/build/dist/coxBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([63],{ +pbjsChunk([71],{ -/***/ 88: +/***/ 92: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(89); +module.exports = __webpack_require__(93); /***/ }), -/***/ 89: +/***/ 93: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -20,10 +20,10 @@ var adLoader = __webpack_require__(5); var adaptermanager = __webpack_require__(1); function CoxAdapter() { - var adZoneAttributeKeys = ['id', 'size', 'thirdPartyClickUrl'], - otherKeys = ['siteId', 'wrapper', 'referrerUrl'], - placementMap = {}, - W = window; + var adZoneAttributeKeys = ['id', 'size', 'thirdPartyClickUrl']; + var otherKeys = ['siteId', 'wrapper', 'referrerUrl']; + var placementMap = {}; + var W = window; var COX_BIDDER_CODE = 'cox'; @@ -35,13 +35,13 @@ function CoxAdapter() { if (!W.CMT) W.CMT = _getCoxLite(); // Populate the tag with the info from prebid - var bids = params.bids || [], - tag = W.cdsTag, - i, - j; + var bids = params.bids || []; + var tag = W.cdsTag; + var i; + var j; for (i = 0; i < bids.length; i++) { - var bid = bids[i], - cfg = bid.params || {}; + var bid = bids[i]; + var cfg = bid.params || {}; if (cfg.id) { tag.zones = tag.zones || {}; @@ -85,9 +85,9 @@ function CoxAdapter() { // } for (var adZoneKey in placementMap) { - var bid = W.CMT.Service.getBidTrue(adZoneKey), - bidObj, - data = placementMap[adZoneKey]; + var bid = W.CMT.Service.getBidTrue(adZoneKey); + var bidObj; + var data = placementMap[adZoneKey]; if (bid > 0) { bidObj = bidfactory.createBid(1); @@ -124,19 +124,19 @@ function CoxAdapter() { try { if (!W.location.ancestorOrigins) return; for (var i = 0, len = W.location.ancestorOrigins.length; len > i; i++) { - callback.call(null, W.location.ancestorOrigins[i], i); + callback(W.location.ancestorOrigins[i], i); } } catch (ignore) {} return []; } function f1(callback) { - var oneWindow, - infoArray = []; + var oneWindow; + var infoArray = []; do { try { oneWindow = oneWindow ? oneWindow.parent : W; - callback.call(null, oneWindow, infoArray); + callback(oneWindow, infoArray); } catch (t) { infoArray.push({ referrer: null, @@ -172,9 +172,9 @@ function CoxAdapter() { }, srTestCapabilities: function srTestCapabilities() { - var plugins = navigator.plugins, - flashVer = -1, - sf = 'Shockwave Flash'; + var plugins = navigator.plugins; + var flashVer = -1; + var sf = 'Shockwave Flash'; if (plugins && plugins.length > 0) { if (plugins[sf + ' 2.0'] || plugins[sf]) { @@ -246,8 +246,8 @@ function CoxAdapter() { }, _getData: function _getData(zoneKey, field) { - var response = this._getResponse(), - zoneResponseData = response.zones ? response.zones[zoneKey] : {}; + var response = this._getResponse(); + var zoneResponseData = response.zones ? response.zones[zoneKey] : {}; return (zoneResponseData || {})[field] || null; }, @@ -275,4 +275,4 @@ module.exports = CoxAdapter; /***/ }) -},[88]); \ No newline at end of file +},[92]); \ No newline at end of file diff --git a/build/dist/criteoBidAdapter.js b/build/dist/criteoBidAdapter.js index 512745bb473..9b510e435d8 100644 --- a/build/dist/criteoBidAdapter.js +++ b/build/dist/criteoBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([62],{ +pbjsChunk([70],{ -/***/ 90: +/***/ 94: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(91); +module.exports = __webpack_require__(95); /***/ }), -/***/ 91: +/***/ 95: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50,22 +50,29 @@ var CriteoAdapter = function CriteoAdapter() { var slots = []; var isAudit = false; var networkid; + var integrationMode; // build slots before sending one multi-slots bid request for (var i = 0; i < bids.length; i++) { var bid = bids[i]; - var sizes = bid.sizes || []; - slots.push(new Criteo.PubTag.DirectBidding.DirectBiddingSlot(bid.placementCode, bid.params.zoneId, bid.params.nativeCallback ? bid.params.nativeCallback : undefined, bid.transactionId, sizes.map((function (size) { - return { width: size[0], height: size[1] }; + var sizes = utils.parseSizesInput(bid.sizes); + slots.push(new Criteo.PubTag.DirectBidding.DirectBiddingSlot(bid.placementCode, bid.params.zoneId, bid.params.nativeCallback ? bid.params.nativeCallback : undefined, bid.transactionId, sizes.map((function (sizeString) { + var xIndex = sizeString.indexOf('x'); + var w = parseInt(sizeString.substring(0, xIndex)); + var h = parseInt(sizeString.substring(xIndex + 1, sizeString.length)); + return new Criteo.PubTag.DirectBidding.Size(w, h); })))); networkid = bid.params.networkId || networkid; + if (bid.params.integrationMode !== undefined) { + integrationMode = bid.params.integrationMode.toLowerCase() == 'amp' ? 1 : 0; + } isAudit |= bid.params.audit !== undefined; } var biddingEvent = new Criteo.PubTag.DirectBidding.DirectBiddingEvent(_profileId, new Criteo.PubTag.DirectBidding.DirectBiddingUrlBuilder(isAudit), slots, _callbackSuccess(slots), _callbackError(slots), _callbackError(slots), // timeout handled as error - undefined, networkid); + undefined, networkid, integrationMode); // process the event as soon as possible window.criteo_pubtag.push(biddingEvent); @@ -172,4 +179,4 @@ module.exports = CriteoAdapter; /***/ }) -},[90]); \ No newline at end of file +},[94]); \ No newline at end of file diff --git a/build/dist/dfpAdServerVideo.js b/build/dist/dfpAdServerVideo.js index e21cad1ad81..96b8dba9bc7 100644 --- a/build/dist/dfpAdServerVideo.js +++ b/build/dist/dfpAdServerVideo.js @@ -1,14 +1,14 @@ -pbjsChunk([4],{ +pbjsChunk([5],{ -/***/ 92: +/***/ 96: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(93); +module.exports = __webpack_require__(97); /***/ }), -/***/ 93: +/***/ 97: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24,11 +24,11 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument exports['default'] = buildDfpVideoUrl; -var _adServerManager = __webpack_require__(94); +var _adServerManager = __webpack_require__(98); -var _targeting = __webpack_require__(17); +var _targeting = __webpack_require__(19); -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); var _utils = __webpack_require__(0); @@ -107,7 +107,7 @@ function buildDfpVideoUrl(options) { /***/ }), -/***/ 94: +/***/ 98: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -118,7 +118,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.registerVideoSupport = registerVideoSupport; -var _prebidGlobal = __webpack_require__(26); +var _prebidGlobal = __webpack_require__(28); var _utils = __webpack_require__(0); @@ -176,4 +176,4 @@ function registerVideoSupport(name, videoSupport) { /***/ }) -},[92]); \ No newline at end of file +},[96]); \ No newline at end of file diff --git a/build/dist/districtmDMXBidAdapter.js b/build/dist/districtmDMXBidAdapter.js index f3f5ddc7c83..b55ce7f119d 100644 --- a/build/dist/districtmDMXBidAdapter.js +++ b/build/dist/districtmDMXBidAdapter.js @@ -1,14 +1,6 @@ -pbjsChunk([61],{ +pbjsChunk([69],{ -/***/ 95: -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(96); - - -/***/ }), - -/***/ 96: +/***/ 100: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73,6 +65,14 @@ adaptermanager.registerBidAdapter(new DistrictmAdaptor(), 'districtmDMX'); module.exports = DistrictmAdaptor; +/***/ }), + +/***/ 99: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(100); + + /***/ }) -},[95]); \ No newline at end of file +},[99]); \ No newline at end of file diff --git a/build/dist/eplanningBidAdapter.js b/build/dist/eplanningBidAdapter.js index 327fecd3a23..05ca98b4b96 100644 --- a/build/dist/eplanningBidAdapter.js +++ b/build/dist/eplanningBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([60],{ +pbjsChunk([68],{ -/***/ 97: +/***/ 101: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(98); +module.exports = __webpack_require__(102); /***/ }), -/***/ 98: +/***/ 102: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -22,18 +22,18 @@ var adaptermanager = __webpack_require__(1); function EPlanningAdapter() { (function () { - var win = window, - doc = win.document, - pbjsVar = win.pbjs, - _global = {}, - _default = { 'sv': 'ads.us.e-planning.net', 't': 0 }, - rnd, - FILE = 'file', - CALLBACK_FUNCTION = 'hbpb.rH', - NULL_SIZE = '1x1', - _csRequested = [], - PROTO = location.protocol === 'https:' ? 'https:' : 'http:', - ISV = 'aklc.img.e-planning.net'; + var win = window; + var doc = win.document; + var pbjsVar = win.pbjs; + var _global = {}; + var _default = { 'sv': 'ads.us.e-planning.net', 't': 0 }; + var rnd; + var FILE = 'file'; + var CALLBACK_FUNCTION = 'hbpb.rH'; + var NULL_SIZE = '1x1'; + var _csRequested = []; + var PROTO = location.protocol === 'https:' ? 'https:' : 'http:'; + var ISV = 'aklc.img.e-planning.net'; function Hbpb() { var slots = (function () { var _data = []; @@ -46,9 +46,9 @@ function EPlanningAdapter() { return data.sizes; } function getSizesString() { - var s = [], - i, - sizes = getSizes(); + var s = []; + var i; + var sizes = getSizes(); if (sizes && sizes.length) { if (_typeof(sizes[0]) === 'object') { for (i = 0; i < sizes.length; i++) { @@ -73,8 +73,8 @@ function EPlanningAdapter() { _data[slotId].ads.push(ad); }, getFormatedResponse: function getFormatedResponse() { - var ad, - that = this; + var ad; + var that = this; if (hasAds()) { ad = data.ads[0]; return { @@ -93,8 +93,8 @@ function EPlanningAdapter() { }; } function findAll() { - var i = 0, - r = []; + var i = 0; + var r = []; for (i = 0; i < _data.length; i++) { r.push(new Slot(i)); } @@ -109,9 +109,9 @@ function EPlanningAdapter() { return new Slot(slotId); }, getString: function getString() { - var _slots = [], - i, - slot; + var _slots = []; + var i; + var slot; for (i = 0; i < _data.length; i++) { slot = this.get(i); _slots.push(slot.getString()); @@ -119,8 +119,8 @@ function EPlanningAdapter() { return _slots.join('+'); }, findByPlacementCode: function findByPlacementCode(placementCode) { - var i, - _slots = findAll(); + var i; + var _slots = findAll(); for (i = 0; i < _slots.length; i++) { if (_slots[i].getPlacementCode() === placementCode) { return _slots[i]; @@ -128,9 +128,9 @@ function EPlanningAdapter() { } }, getFormatedResponse: function getFormatedResponse() { - var _slots = findAll(), - i, - r = []; + var _slots = findAll(); + var i; + var r = []; for (i = 0; i < _slots.length; i++) { r.push(_slots[i].getFormatedResponse()); } @@ -141,8 +141,8 @@ function EPlanningAdapter() { }; })(); function _call(params) { - var i, - bids = params.bids; + var i; + var bids = params.bids; for (i = 0; i < bids.length; i++) { slots.add({ _raw: bids[i], @@ -181,12 +181,12 @@ function EPlanningAdapter() { return CALLBACK_FUNCTION; } function doRequest() { - var clienteId = getGlobalParam('ci'), - url, - dfpClienteId = '1', - sec = 'ROS', - params = [], - t = getGlobalParam('t'); + var clienteId = getGlobalParam('ci'); + var url; + var dfpClienteId = '1'; + var sec = 'ROS'; + var params = []; + var t = getGlobalParam('t'); if (clienteId && !t) { url = PROTO + '//' + getGlobalParam('sv') + '/hb/1/' + clienteId + '/' + dfpClienteId + '/' + (win.location.hostname || FILE) + '/' + sec + '?'; params.push('rnd=' + getRandom()); @@ -301,8 +301,8 @@ function EPlanningAdapter() { }; function getBidObject(bid) { - var bidObject = bidfactory.createBid(1), - i; + var bidObject = bidfactory.createBid(1); + var i; bidObject.bidderCode = 'eplanning'; for (i in bid.ad) { if (bid.ad.hasOwnProperty(i)) { @@ -329,4 +329,4 @@ module.exports = EPlanningAdapter; /***/ }) -},[97]); \ No newline at end of file +},[101]); \ No newline at end of file diff --git a/build/dist/essensBidAdapter.js b/build/dist/essensBidAdapter.js new file mode 100644 index 00000000000..258901748e0 --- /dev/null +++ b/build/dist/essensBidAdapter.js @@ -0,0 +1,191 @@ +pbjsChunk([67],{ + +/***/ 103: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(104); + + +/***/ }), + +/***/ 104: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var CONSTANTS = __webpack_require__(4); +var utils = __webpack_require__(0); +var bidfactory = __webpack_require__(3); +var bidmanager = __webpack_require__(2); +var adloader = __webpack_require__(5); +var Adapter = __webpack_require__(7)['default']; +var adaptermanager = __webpack_require__(1); + +// Essens Prebid Adapter +function EssensAdapter() { + var baseAdapter = new Adapter('essens'); + + var ENDPOINT = 'bid.essrtb.com/bid/prebid_call'; + + var receivedBidRequests = {}; + + baseAdapter.callBids = function (bidRequest) { + if (!bidRequest) { + utils.logError('empty bid request received'); + return; + } + receivedBidRequests = bidRequest; + + var bids = bidRequest.bids || []; + + var essensBids = bids.filter((function (bid) { + return isPlacementBidComplete(bid); + })).map((function (bid) { + var essensBid = {}; + essensBid.impressionId = bid.bidId; + essensBid.sizes = utils.parseSizesInput(bid.sizes); + essensBid.placementId = bid.params.placementId; + + if (bid.params.dealId) { + essensBid.deal = bid.params.dealId; + } + + if (bid.params.floorPrice) { + essensBid.floorPrice = bid.params.floorPrice; + } + + return essensBid; + })); + + var bidderRequestId = bidRequest.bidderRequestId; + var cur = ['USD']; + var urlParam = utils.getTopWindowUrl(); + var uaParam = getUa(); + + if (!utils.isEmpty(essensBids)) { + var payloadJson = { bidderRequestId: bidderRequestId, cur: cur, url: urlParam, ua: uaParam, imp: essensBids }; + + var scriptUrl = '//' + ENDPOINT + '?callback=pbjs.essensResponseHandler' + '&bid=' + encodeURIComponent(JSON.stringify(payloadJson)); + adloader.loadScript(scriptUrl); + } else { + sendEmptyResponseForAllPlacement(); + } + + function isPlacementBidComplete(bid) { + if (bid.bidId && bid.params && bid.params.placementId) { + return true; + } else { + utils.logError('bid requires missing essential params for essens'); + } + } + + function getUa() { + return window.navigator.userAgent; + } + }; + + function sendEmptyResponseForAllPlacement() { + if (receivedBidRequests && receivedBidRequests.bids) { + receivedBidRequests.bids.forEach(registerEmptyResponse); + } + } + + function registerEmptyResponse(bidRequest) { + var bid = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bidRequest); + bid.bidderCode = 'essens'; + bidmanager.addBidResponse(bidRequest.placementCode, bid); + } + + pbjs.essensResponseHandler = function (essensResponse) { + utils.logInfo('received bid request from Essens'); + if (!isValidResponse(essensResponse)) { + sendEmptyResponseForAllPlacement(); + return; + } + + registerBids(essensResponse); + + function isValidResponse(essensResponse) { + return !!(essensResponse && essensResponse.id && essensResponse.seatbid); + } + + function registerBids(essensResponses) { + var requestHasResponse = []; + + if (essensResponses.seatbid.length > 0) { + essensResponses.seatbid.filter(isValidSeat).forEach((function (seat) { + return seat.bid.forEach(sendResponse); + })); + } + + receivedBidRequests.bids.filter((function (request) { + return !hasResponse(request); + })).forEach(registerEmptyResponse); + + function sendResponse(bidCandidate) { + var bidRequest = getBidRequest(bidCandidate.impid); + + var bidsToBeRegister = getBid(bidRequest, bidCandidate); + + if (bidsToBeRegister) { + requestHasResponse.push(bidRequest); + bidmanager.addBidResponse(bidRequest.placementCode, bidsToBeRegister); + } + } + + function hasResponse(request) { + return utils.contains(requestHasResponse, request); + } + + function isValidSeat(seatbid) { + return seatbid.bid && seatbid.bid.length !== 0; + } + + function getBidRequest(id) { + return receivedBidRequests.bids.find((function (bid) { + return bid.bidId === id; + })); + } + } + + function getBid(pbBidReq, bidCandidate) { + if (!validBid(bidCandidate)) { + return; + } + var bid = bidfactory.createBid(CONSTANTS.STATUS.GOOD, pbBidReq); + + bid.creative_id = bidCandidate.crid; + bid.adUrl = bidCandidate.ext.adUrl; + bid.bidderCode = 'essens'; + bid.cpm = parseFloat(bidCandidate.price); + bid.width = parseInt(bidCandidate.w); + bid.height = parseInt(bidCandidate.h); + + if (bidCandidate.dealid) { + bid.dealId = bidCandidate.dealid; + } + return bid; + } + + function validBid(bid) { + return !!(bid.price && bid.crid && bid.ext && bid.ext.adUrl && bid.w && bid.h && bid.impid); + } + }; + + return _extends(this, { + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode, + getBidderCode: baseAdapter.getBidderCode + }); +} + +adaptermanager.registerBidAdapter(new EssensAdapter(), 'essens'); + +module.exports = EssensAdapter; + +/***/ }) + +},[103]); \ No newline at end of file diff --git a/build/dist/express.js b/build/dist/express.js index 2ccad04a8b1..80c3c091338 100644 --- a/build/dist/express.js +++ b/build/dist/express.js @@ -1,6 +1,14 @@ -pbjsChunk([59],{ +pbjsChunk([66],{ -/***/ 100: +/***/ 105: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(106); + + +/***/ }), + +/***/ 106: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78,9 +86,9 @@ pbjs.express = function () { var adUnits = []; // traverse backwards (since gptSlots is mutated) to find adUnits in cache and remove non-mapped slots for (var i = gptSlots.length - 1; i > -1; i--) { - var gptSlot = gptSlots[i], - elemId = gptSlot.getSlotElementId(), - adUnit = adUnitsCache[elemId]; + var gptSlot = gptSlots[i]; + var elemId = gptSlot.getSlotElementId(); + var adUnit = adUnitsCache[elemId]; if (adUnit) { adUnit._gptSlot = gptSlot; @@ -210,14 +218,6 @@ pbjs.express = function () { })); }; -/***/ }), - -/***/ 99: -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(100); - - /***/ }) -},[99]); \ No newline at end of file +},[105]); \ No newline at end of file diff --git a/build/dist/featureforwardBidAdapter.js b/build/dist/featureforwardBidAdapter.js new file mode 100644 index 00000000000..343ca39b5bd --- /dev/null +++ b/build/dist/featureforwardBidAdapter.js @@ -0,0 +1,119 @@ +pbjsChunk([65],{ + +/***/ 107: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(108); + + +/***/ }), + +/***/ 108: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _bidfactory = __webpack_require__(3); + +var _bidmanager = __webpack_require__(2); + +var _adaptermanager = __webpack_require__(1); + +var _utils = __webpack_require__(0); + +var _ajax = __webpack_require__(6); + +var _constants = __webpack_require__(4); + +function FeatureForwardAdapter() { + var bidUrl = window.location.protocol + '//prmbdr.featureforward.com/newbidder/bidder1_prm.php?'; + var ajaxOptions = { + method: 'POST', + withCredentials: true, + contentType: 'text/plain' + }; + + function _callBids(bidderRequest) { + var i = 0; + bidderRequest.bids.forEach((function (bidRequest) { + try { + while (bidRequest.sizes[i] !== undefined) { + var params = _extends({}, environment(), bidRequest.params, { 'size': bidRequest.sizes[i] }); + var postRequest = JSON.stringify(params); + var url = bidUrl; + i++; + (0, _ajax.ajax)(url, (function (bidResponse) { + bidResponseAvailable(bidRequest, bidResponse); + }), postRequest, ajaxOptions); + } + } catch (e) { + // register passback on any exceptions while attempting to fetch response. + (0, _utils.logError)('featureforward.requestBid', 'ERROR', e); + bidResponseAvailable(bidRequest); + } + })); + } + + function environment() { + return { + ca: 'BID', + 'if': 0, + url: (0, _utils.getTopWindowLocation)().href, + refurl: referrer(), + ew: document.documentElement.clientWidth, + eh: document.documentElement.clientHeight, + ln: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage + }; + } + + function referrer() { + try { + return window.top.document.referrer; + } catch (e) { + return document.referrer; + } + } + + function bidResponseAvailable(bidRequest, rawResponse) { + if (rawResponse) { + var bidResponse = parse(rawResponse); + if (bidResponse) { + var bid = (0, _bidfactory.createBid)(_constants.STATUS.GOOD, bidRequest); + bid.bidderCode = bidRequest.bidder; + bid.cpm = bidResponse.bidCpm; + bid.ad = bidResponse.html; + bid.width = bidResponse.width; + bid.height = bidResponse.height; + (0, _bidmanager.addBidResponse)(bidRequest.placementCode, bid); + return; + } + } + var passback = (0, _bidfactory.createBid)(_constants.STATUS.NO_BID, bidRequest); + passback.bidderCode = bidRequest.bidder; + (0, _bidmanager.addBidResponse)(bidRequest.placementCode, passback); + } + + function parse(rawResponse) { + try { + return JSON.parse(rawResponse); + } catch (ex) { + (0, _utils.logError)('featureforward.safeParse', 'ERROR', ex); + return null; + } + } + + return { + callBids: _callBids + }; +} + +(0, _adaptermanager.registerBidAdapter)(new FeatureForwardAdapter(), 'featureforward'); + +module.exports = FeatureForwardAdapter; + +/***/ }) + +},[107]); \ No newline at end of file diff --git a/build/dist/fidelityBidAdapter.js b/build/dist/fidelityBidAdapter.js index eee22d6fcff..37a4cbb1990 100644 --- a/build/dist/fidelityBidAdapter.js +++ b/build/dist/fidelityBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([58],{ +pbjsChunk([64],{ -/***/ 101: +/***/ 109: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(102); +module.exports = __webpack_require__(110); /***/ }), -/***/ 102: +/***/ 110: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -121,4 +121,4 @@ module.exports = FidelityAdapter; /***/ }) -},[101]); \ No newline at end of file +},[109]); \ No newline at end of file diff --git a/build/dist/getintentBidAdapter.js b/build/dist/getintentBidAdapter.js index 2925130b2dc..6f581c081f7 100644 --- a/build/dist/getintentBidAdapter.js +++ b/build/dist/getintentBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([57],{ +pbjsChunk([63],{ -/***/ 103: +/***/ 111: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(104); +module.exports = __webpack_require__(112); /***/ }), -/***/ 104: +/***/ 112: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76,6 +76,7 @@ var GetIntentAdapter = function GetIntentAdapter() { if (br.mediaType === 'video') { bid.vastUrl = bidResponse.vast_url; bid.descriptionUrl = bidResponse.vast_url; + bid.mediaType = 'video'; } else { bid.ad = bidResponse.ad; } @@ -99,4 +100,4 @@ module.exports = GetIntentAdapter; /***/ }) -},[103]); \ No newline at end of file +},[111]); \ No newline at end of file diff --git a/build/dist/googleAnalyticsAdapter.js b/build/dist/googleAnalyticsAdapter.js index a5debc0b020..6edde7fa8b6 100644 --- a/build/dist/googleAnalyticsAdapter.js +++ b/build/dist/googleAnalyticsAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([56],{ +pbjsChunk([62],{ -/***/ 105: +/***/ 113: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(106); +module.exports = __webpack_require__(114); /***/ }), -/***/ 106: +/***/ 114: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -279,4 +279,4 @@ adaptermanager.registerAnalyticsAdapter({ /***/ }) -},[105]); \ No newline at end of file +},[113]); \ No newline at end of file diff --git a/build/dist/gumgumBidAdapter.js b/build/dist/gumgumBidAdapter.js index accf5b1aa71..87d63243dcf 100644 --- a/build/dist/gumgumBidAdapter.js +++ b/build/dist/gumgumBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([55],{ +pbjsChunk([61],{ -/***/ 107: +/***/ 115: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(108); +module.exports = __webpack_require__(116); /***/ }), -/***/ 108: +/***/ 116: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -157,7 +157,7 @@ var GumgumAdapter = function GumgumAdapter() { bidResponse.request = cachedBidRequest; var encodedResponse = encodeURIComponent(JSON.stringify(bidResponse)); - var gumgumAdLoader = ''; + var gumgumAdLoader = ''; _extends(bid, { cpm: ad.price, ad: gumgumAdLoader, @@ -185,8 +185,8 @@ var GumgumAdapter = function GumgumAdapter() { adaptermanager.registerBidAdapter(new GumgumAdapter(), 'gumgum'); module.exports = GumgumAdapter; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(25))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27))) /***/ }) -},[107]); \ No newline at end of file +},[115]); \ No newline at end of file diff --git a/build/dist/hiromediaBidAdapter.js b/build/dist/hiromediaBidAdapter.js index 606413f693b..984ed411056 100644 --- a/build/dist/hiromediaBidAdapter.js +++ b/build/dist/hiromediaBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([54],{ +pbjsChunk([60],{ -/***/ 109: +/***/ 117: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(110); +module.exports = __webpack_require__(118); /***/ }), -/***/ 110: +/***/ 118: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -394,4 +394,4 @@ module.exports = HiroMediaAdapter; /***/ }) -},[109]); \ No newline at end of file +},[117]); \ No newline at end of file diff --git a/build/dist/huddledmassesBidAdapter.js b/build/dist/huddledmassesBidAdapter.js index 43d7d955435..8b2fe5d2748 100644 --- a/build/dist/huddledmassesBidAdapter.js +++ b/build/dist/huddledmassesBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([53],{ +pbjsChunk([59],{ -/***/ 111: +/***/ 119: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(112); +module.exports = __webpack_require__(120); /***/ }), -/***/ 112: +/***/ 120: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18,7 +18,7 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument var _adapter = __webpack_require__(7); -var Adapter = _interopRequireWildcard(_adapter); +var _adapter2 = _interopRequireDefault(_adapter); var _bidfactory = __webpack_require__(3); @@ -40,10 +40,10 @@ var _adaptermanager = __webpack_require__(1); var _adaptermanager2 = _interopRequireDefault(_adaptermanager); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var BIDDER_CODE = 'huddledmasses'; var sizeObj = { @@ -121,15 +121,22 @@ function HuddledMassesAdapter() { } var secure = 0; - if (window.location.protocol !== 'http:') { + var win; + try { + win = window.top; + } catch (e) { + win = window; + } + + if (win.location.protocol !== 'http:') { secure = 1; } - var host = window.location.host; - var page = window.location.pathname; + var host = win.location.host; + var page = win.location.pathname; var language = navigator.language; - var deviceWidth = window.screen.width; - var deviceHeight = window.screen.height; + var deviceWidth = win.screen.width; + var deviceHeight = win.screen.height; var queryString = ['banner_id', bid.params.placement_id, 'size_ad', parsedSizes[0], 'alt_size_ad', parsedSizes.slice(1).join(',') || [], 'host', host, 'page', page, 'language', language, 'deviceWidth', deviceWidth, 'deviceHeight', deviceHeight, 'secure', secure, 'bidId', bid.bidId, 'checkOn', 'rf']; @@ -153,9 +160,8 @@ function HuddledMassesAdapter() { _bidmanager2['default'].addBidResponse(bidRequest.placementCode, bid); } - return _extends(Adapter.createNew(BIDDER_CODE), { // BIDDER_CODE huddledmasses - callBids: _callBids, - createNew: HuddledMassesAdapter.createNew + return _extends(new _adapter2['default'](BIDDER_CODE), { // BIDDER_CODE huddledmasses + callBids: _callBids }); } @@ -185,14 +191,10 @@ HuddledMassesAdapter.masSizeOrdering = function (sizes) { })); }; -HuddledMassesAdapter.createNew = function () { - return new HuddledMassesAdapter(); -}; - _adaptermanager2['default'].registerBidAdapter(new HuddledMassesAdapter(), 'huddledmasses'); module.exports = HuddledMassesAdapter; /***/ }) -},[111]); \ No newline at end of file +},[119]); \ No newline at end of file diff --git a/build/dist/imonomyBidAdapter.js b/build/dist/imonomyBidAdapter.js new file mode 100644 index 00000000000..68dd0dacb7e --- /dev/null +++ b/build/dist/imonomyBidAdapter.js @@ -0,0 +1,215 @@ +pbjsChunk([58],{ + +/***/ 121: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(122); + + +/***/ }), + +/***/ 122: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* imonomy.js v3.1.0 +Updated : 2017-03-15 */ + +var utils = __webpack_require__(0); +var adloader = __webpack_require__(5); +var bidmanager = __webpack_require__(2); +var bidfactory = __webpack_require__(3); +var adaptermanager = __webpack_require__(1); +var STATUSCODES = __webpack_require__(4).STATUS; + +function ImonomyAdapter() { + return { + callBids: _callBids + }; + + function _callBids(params) { + var request = []; + var siteRef = ''; + var screen_w = ''; + var screen_h = ''; + var language = ''; + var pxr = ''; + var keywords = ''; + var connectiontype = ''; + var domain = ''; + var page = ''; + var bid, i, l; + var bids = params.bids; + var imonomy_domain = 'b.imonomy.com'; + var callbackName = '_hb_' + utils.getUniqueIdentifierStr(); + + try { + siteRef = document.referrer; + } catch (e) {} + try { + domain = window.location.host; + } catch (e) {} + try { + pxr = window.devicePixelRatio; + } catch (e) {} + try { + screen_w = screen.width || document.body.clientWidth || 0; + } catch (e) {} + try { + screen_h = screen.height || document.body.clientHeight || 0; + } catch (e) {} + try { + page = window.location.pathname + location.search + location.hash; + } catch (e) {} + + try { + var meta = document.getElementsByTagName('meta') || {}; + keywords = 'keywords' in meta ? meta['keywords'].content : ''; + } catch (e) {} + + try { + var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection; + connectiontype = connection != undefined ? connection.type : ''; + } catch (e) {} + + try { + var language_tmp = document.documentElement.lang || navigator.language || navigator.userLanguage || ''; + language = language_tmp.split('-')[0]; + } catch (e) {} + + try { + var data = { + pxr: pxr, + page: page, + domain: domain, + siteRef: siteRef, + screen_w: screen_w, + screen_h: screen_h, + language: language, + keywords: keywords, + connectiontype: connectiontype, + requestId: params['requestId'], + bidderRequestId: params['bidderRequestId'], + callback: 'pbjs.' + callbackName, + publisher_id: params['bids'][0]['params']['publisher_id'], + bids: encodeURIComponent(JSON.stringify(params['bids'])) + }; + + var protocol = document.location.protocol === 'https:' ? 'https' : 'http'; + request.unshift(protocol + '://' + imonomy_domain + '/openrtb/hb/' + params['bids'][0]['params']['publisher_id'] + '?id=' + utils.getUniqueIdentifierStr()); + + for (var key in data) { + if (data.hasOwnProperty(key)) { + request.push(key + '=' + encodeURIComponent(data[key])); + } + } + + for (i = 0, l = bids.length; i < l; i++) { + bid = bids[i]; + request.push(formRequestUrl(bid.params)); + } + + pbjs[callbackName] = handleCallback(bids); + + adloader.loadScript(request.join('&')); + } catch (e) {} + } + + function formRequestUrl(reqData) { + var key; + var url = []; + + for (key in reqData) { + if (reqData.hasOwnProperty(key) && reqData[key]) { + url.push(key, '=', reqData[key], '&'); + } + } + + return btoa(url.join('').slice(0, -1)); + } + + function handleCallback(bids) { + return function handleResponse(adItems) { + try { + var bidObject; + var bidder = 'imonomy'; + var adItem; + var bid; + + try { + if (adItems.um_list) { + _processUserMatchings(adItems.um_list); + } + } catch (e) {} + + adItems = adItems.ads; + + for (var i = 0, l = bids.length; i < l; i++) { + bid = bids[i]; + adItem = getAdItem(adItems, bids[i].bidId); + + if (adItem) { + bidObject = bidfactory.createBid(STATUSCODES.GOOD, bid); + bidObject.bidderCode = bidder; + bidObject.ad = adItem.ad; + bidObject.cpm = adItem.cpm; + bidObject.cur = adItem.cur; + bidObject.width = adItem.width; + bidObject.height = adItem.height; + bidmanager.addBidResponse(bid.placementCode, bidObject); + } else { + bidObject = bidfactory.createBid(STATUSCODES.NO_BID, bid); + bidObject.bidderCode = bidder; + bidmanager.addBidResponse(bid.placementCode, bidObject); + } + } + } catch (e) {} + }; + } + + function _processUserMatchings(userMatchings) { + var headElem = document.getElementsByTagName('head')[0]; + var createdElem; + + utils._each(userMatchings, (function (userMatching) { + createdElem = undefined; + switch (userMatching.type) { + case 'redirect': + createdElem = document.createElement('img'); + break; + case 'iframe': + createdElem = utils.createInvisibleIframe(); + break; + case 'js': + createdElem = document.createElement('script'); + createdElem.type = 'text/javascript'; + createdElem.async = true; + break; + } + if (createdElem) { + createdElem.src = decodeURIComponent(userMatching.Url); + headElem.insertBefore(createdElem, headElem.firstChild); + } + })); + } + + function getAdItem(adItems, imp) { + adItems = adItems || []; + for (var i = 0, l = adItems.length; i < l; i++) { + if (adItems[i].impression_id == imp) { + return adItems[i]; + } + } + + return null; + } +} + +adaptermanager.registerBidAdapter(new ImonomyAdapter(), 'imonomy'); +module.exports = ImonomyAdapter; + +/***/ }) + +},[121]); \ No newline at end of file diff --git a/build/dist/indexExchangeBidAdapter.js b/build/dist/indexExchangeBidAdapter.js index 4b5efa885d6..0459e3517f7 100644 --- a/build/dist/indexExchangeBidAdapter.js +++ b/build/dist/indexExchangeBidAdapter.js @@ -1,27 +1,58 @@ -pbjsChunk([52],{ +pbjsChunk([57],{ -/***/ 113: +/***/ 123: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(114); +module.exports = __webpack_require__(124); /***/ }), -/***/ 114: +/***/ 124: /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -// Factory for creating the bidderAdaptor -var utils = __webpack_require__(0); -var bidfactory = __webpack_require__(3); -var bidmanager = __webpack_require__(2); -var adloader = __webpack_require__(5); -var adaptermanager = __webpack_require__(1); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // Factory for creating the bidderAdaptor +// jshint ignore:start + + +var _adapter = __webpack_require__(7); + +var _adapter2 = _interopRequireDefault(_adapter); + +var _bidfactory = __webpack_require__(3); + +var _bidfactory2 = _interopRequireDefault(_bidfactory); + +var _bidmanager = __webpack_require__(2); + +var _bidmanager2 = _interopRequireDefault(_bidmanager); + +var _utils = __webpack_require__(0); + +var utils = _interopRequireWildcard(_utils); + +var _constants = __webpack_require__(4); + +var _url = __webpack_require__(11); + +var url = _interopRequireWildcard(_url); + +var _adloader = __webpack_require__(5); + +var _adloader2 = _interopRequireDefault(_adloader); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var ADAPTER_NAME = 'INDEXEXCHANGE'; var ADAPTER_CODE = 'indexExchange'; @@ -42,6 +73,58 @@ var CONSTANTS = { var OPEN_MARKET = 'IOM'; var PRIVATE_MARKET = 'IPM'; +var VIDEO_REQUIRED_PARAMS_MAP = { + siteID: true, + playerType: true, + protocols: true, + maxduration: true +}; +var VIDEO_OPTIONAL_PARAMS_MAP = { + minduration: 0, + startdelay: 'preroll', + linearity: 'linear', + mimes: [], + allowVPAID: true, + apiList: [] +}; +var SUPPORTED_PLAYER_TYPES_MAP = { + HTML5: true, + FLASH: true +}; +var SUPPORTED_PROTOCOLS_MAP = { + 'VAST2': [2, 5], + 'VAST3': [3, 6] +}; +var SUPPORTED_API_MAP = { + FLASH: [1, 2], + HTML5: [2] +}; +var LINEARITY_MAP = { + linear: 1, + nonlinear: 2 +}; +var START_DELAY_MAP = { + preroll: 0, + midroll: -1, + postroll: -2 +}; +var SLOT_ID_PREFIX_MAP = { + preroll: 'pr', + midroll: 'm', + postroll: 'po' +}; +var DEFAULT_MIMES_MAP = { + FLASH: ['video/mp4', 'video/x-flv'], + HTML5: ['video/mp4', 'video/webm'] +}; +var DEFAULT_VPAID_MIMES_MAP = { + FLASH: ['application/x-shockwave-flash'], + HTML5: ['application/javascript'] +}; + +var BASE_CYGNUS_VIDEO_URL_INSECURE = 'http://as.casalemedia.com/cygnus?v=8&fn=pbjs.handleCygnusResponse'; +var BASE_CYGNUS_VIDEO_URL_SECURE = 'https://as-sec.casalemedia.com/cygnus?v=8&fn=pbjs.handleCygnusResponse'; + window.cygnus_index_parse_res = function (response) { try { if (response) { @@ -136,7 +219,7 @@ window.index_render = function (doc, targetID) { if (ad != null) { doc.write(ad); } else { - var url = window.location.protocol === 'https:' ? 'https://as-sec.casalemedia.com' : 'http://as.casalemedia.com'; + var url = utils.getTopWindowLocation().protocol === 'http:' ? 'http://as.casalemedia.com' : 'https://as-sec.casalemedia.com'; url += '/headerstats?type=RT&s=' + cygnus_index_args.siteID + '&u=' + encodeURIComponent(location.href) + '&r=' + _IndexRequestData.lastRequestID; var px_call = new Image(); px_call.src = url + '&blank=' + targetID; @@ -364,12 +447,12 @@ var cygnus_index_start = function cygnus_index_start() { var scriptSrc; if (getIndexDebugMode() == CONSTANTS.INDEX_DEBUG_MODE.mode.sandbox.queryValue.toUpperCase()) { this.siteID = CONSTANTS.INDEX_DEBUG_MODE.mode.sandbox.siteID; - scriptSrc = window.location.protocol === 'https:' ? 'https://sandbox.ht.indexexchange.com' : 'http://sandbox.ht.indexexchange.com'; + scriptSrc = utils.getTopWindowLocation().protocol === 'http:' ? 'http://sandbox.ht.indexexchange.com' : 'https://sandbox.ht.indexexchange.com'; utils.logMessage('IX DEBUG: Sandbox mode activated'); } else { - scriptSrc = window.location.protocol === 'https:' ? 'https://as-sec.casalemedia.com' : 'http://as.casalemedia.com'; + scriptSrc = utils.getTopWindowLocation().protocol === 'http:' ? 'http://as.casalemedia.com' : 'https://as-sec.casalemedia.com'; } - var prebidVersion = encodeURIComponent('0.27.0-pre'); + var prebidVersion = encodeURIComponent('0.28.0-pre'); scriptSrc += '/cygnus?v=7&fn=cygnus_index_parse_res&s=' + this.siteID + '&r=' + jsonURI + '&pid=pb' + prebidVersion; if (typeof this.timeoutDelay === 'number' && this.timeoutDelay % 1 === 0 && this.timeoutDelay >= 0) { scriptSrc += '&t=' + this.timeoutDelay; @@ -416,6 +499,8 @@ var cygnus_index_start = function cygnus_index_start() { }; var IndexExchangeAdapter = function IndexExchangeAdapter() { + var baseAdapter = new _adapter2['default']('indexExchange'); + var slotIdMap = {}; var requiredParams = [ /* 0 */ @@ -423,8 +508,20 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { /* 1 */ 'siteID']; var firstAdUnitCode = ''; + var bidRequests = {}; + + function passOnBid(adUnitCode) { + var bid = _bidfactory2['default'].createBid(2); + bid.bidderCode = ADAPTER_CODE; + _bidmanager2['default'].addBidResponse(adUnitCode, bid); + return bid; + } function _callBids(request) { + if (typeof request === 'undefined' || utils.isEmpty(request)) { + return; + } + var bidArr = request.bids; if (typeof window._IndexRequestData === 'undefined') { @@ -435,128 +532,35 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { // clear custom targets at the beginning of every request _IndexRequestData.targetAggregate = { 'open': {}, 'private': {} }; - if (!utils.hasValidBidRequest(bidArr[0].params, requiredParams, ADAPTER_NAME)) { - return; - } - // Our standard is to always bid for all known slots. cygnus_index_args.slots = []; - var expectedBids = 0; + var videoImpressions = []; // Grab the slot level data for cygnus_index_args - for (var i = 0; i < bidArr.length; i++) { - var bid = bidArr[i]; - var sizeID = 0; - - expectedBids++; - - // Expecting nested arrays for sizes - if (!(bid.sizes[0] instanceof Array)) { - bid.sizes = [bid.sizes]; - } - - // Create index slots for all bids and sizes - for (var j = 0; j < bid.sizes.length; j++) { - var validSize = false; - for (var k = 0; k < cygnus_index_adunits.length; k++) { - if (bid.sizes[j][0] == cygnus_index_adunits[k][0] && bid.sizes[j][1] == cygnus_index_adunits[k][1]) { - bid.sizes[j][0] = Number(bid.sizes[j][0]); - bid.sizes[j][1] = Number(bid.sizes[j][1]); - validSize = true; - break; - } - } - - if (!validSize) { - utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to no valid sizes'); - continue; - } - - var usingSizeSpecificSiteID = false; - // Check for size defined in bidder params - if (bid.params.size && bid.params.size instanceof Array) { - if (!(bid.sizes[j][0] == bid.params.size[0] && bid.sizes[j][1] == bid.params.size[1])) { - continue; - } - usingSizeSpecificSiteID = true; - } - - if (bid.params.timeout && typeof cygnus_index_args.timeout === 'undefined') { - cygnus_index_args.timeout = bid.params.timeout; - } - - var siteID = Number(bid.params.siteID); - if (typeof siteID !== 'number' || siteID % 1 != 0 || siteID <= 0) { - utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to invalid siteID'); - continue; - } - if (siteID && typeof cygnus_index_args.siteID === 'undefined') { - cygnus_index_args.siteID = siteID; - } - - if (utils.hasValidBidRequest(bid.params, requiredParams, ADAPTER_NAME)) { - firstAdUnitCode = bid.placementCode; - var slotID = bid.params[requiredParams[0]]; - if (typeof slotID !== 'string' && typeof slotID !== 'number') { - utils.logError(ADAPTER_NAME + ' bid contains invalid slot ID from ' + bid.placementCode + '. Discarding slot'); - continue; - } - - sizeID++; - var size = { - width: bid.sizes[j][0], - height: bid.sizes[j][1] - }; - - var slotName = usingSizeSpecificSiteID ? String(slotID) : slotID + '_' + sizeID; - slotIdMap[slotName] = bid; - - // Doesn't need the if(primary_request) conditional since we are using the mergeSlotInto function which is safe - cygnus_index_args.slots = mergeSlotInto({ - id: slotName, - width: size.width, - height: size.height, - siteID: siteID || cygnus_index_args.siteID - }, cygnus_index_args.slots); - - if (bid.params.tier2SiteID) { - var tier2SiteID = Number(bid.params.tier2SiteID); - if (typeof tier2SiteID !== 'undefined' && !tier2SiteID) { - continue; - } - - cygnus_index_args.slots = mergeSlotInto({ - id: 'T1_' + slotName, - width: size.width, - height: size.height, - siteID: tier2SiteID - }, cygnus_index_args.slots); - } - - if (bid.params.tier3SiteID) { - var tier3SiteID = Number(bid.params.tier3SiteID); - if (typeof tier3SiteID !== 'undefined' && !tier3SiteID) { - continue; - } - - cygnus_index_args.slots = mergeSlotInto({ - id: 'T2_' + slotName, - width: size.width, - height: size.height, - siteID: tier3SiteID - }, cygnus_index_args.slots); - } + bidArr.forEach((function (bid) { + if (bid.mediaType === 'video') { + var impression = buildVideoImpressions(bid, bidRequests); + if (typeof impression !== 'undefined') { + videoImpressions.push(impression); } + } else { + cygnus_index_init(bid); } + })); + + if (videoImpressions.length > 0) { + sendVideoRequest(request.bidderRequestId, videoImpressions); } if (cygnus_index_args.slots.length > 20) { utils.logError('Too many unique sizes on slots, will use the first 20.', ADAPTER_NAME); } - // bidmanager.setExpectedBidsCount(ADAPTER_CODE, expectedBids); - adloader.loadScript(cygnus_index_start()); + if (cygnus_index_args.slots.length > 0) { + // bidmanager.setExpectedBidsCount(ADAPTER_CODE, expectedBids); + _adloader2['default'].loadScript(cygnus_index_start()); + } var responded = false; @@ -569,7 +573,6 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { try { var indexObj = _IndexRequestData.targetIDToBid; - var lookupObj = cygnus_index_args; // Grab all the bids for each slot for (var adSlotId in slotIdMap) { @@ -593,7 +596,7 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { var slotObj = getSlotObj(cygnus_index_args, tier + slotID); // Bid is for the current slot if (slotID === adSlotId) { - var bid = bidfactory.createBid(1); + var bid = _bidfactory2['default'].createBid(1); bid.cpm = currentCPM / 100; bid.ad = indexObj[cpmAndSlotId][0]; bid.bidderCode = ADAPTER_CODE; @@ -616,19 +619,14 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { } } - var currentBid; - if (bids.length > 0) { // Add all bid responses for (var i = 0; i < bids.length; i++) { - bidmanager.addBidResponse(adUnitCode, bids[i]); + _bidmanager2['default'].addBidResponse(adUnitCode, bids[i]); } // No bids for expected bid, pass bid } else { - var bid = bidfactory.createBid(2); - bid.bidderCode = ADAPTER_CODE; - currentBid = bid; - bidmanager.addBidResponse(adUnitCode, currentBid); + passOnBid(adUnitCode); } } } catch (e) { @@ -645,6 +643,190 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { }; } + function cygnus_index_init(bid) { + if (!utils.hasValidBidRequest(bid.params, requiredParams, ADAPTER_NAME)) { + passOnBid(bid.placementCode); + return; + } + + var sizeID = 0; + + // Expecting nested arrays for sizes + if (!utils.isArray(bid.sizes[0])) { + bid.sizes = [bid.sizes]; + } + + // Create index slots for all bids and sizes + for (var j = 0; j < bid.sizes.length; j++) { + var validSize = false; + for (var k = 0; k < cygnus_index_adunits.length; k++) { + if (bid.sizes[j][0] == cygnus_index_adunits[k][0] && bid.sizes[j][1] == cygnus_index_adunits[k][1]) { + bid.sizes[j][0] = Number(bid.sizes[j][0]); + bid.sizes[j][1] = Number(bid.sizes[j][1]); + validSize = true; + break; + } + } + + if (!validSize) { + utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to no valid sizes'); + passOnBid(bid.placementCode); + continue; + } + + var usingSizeSpecificSiteID = false; + // Check for size defined in bidder params + if (bid.params.size && utils.isArray(bid.params.size)) { + if (!(bid.sizes[j][0] == bid.params.size[0] && bid.sizes[j][1] == bid.params.size[1])) { + passOnBid(bid.placementCode); + continue; + } + usingSizeSpecificSiteID = true; + } + + if (bid.params.timeout && typeof cygnus_index_args.timeout === 'undefined') { + cygnus_index_args.timeout = bid.params.timeout; + } + + var siteID = Number(bid.params.siteID); + if (typeof siteID !== 'number' || siteID % 1 != 0 || siteID <= 0) { + utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to invalid siteID'); + passOnBid(bid.placementCode); + continue; + } + if (siteID && typeof cygnus_index_args.siteID === 'undefined') { + cygnus_index_args.siteID = siteID; + } + + if (utils.hasValidBidRequest(bid.params, requiredParams, ADAPTER_NAME)) { + firstAdUnitCode = bid.placementCode; + var slotID = bid.params[requiredParams[0]]; + if (typeof slotID !== 'string' && typeof slotID !== 'number') { + utils.logError(ADAPTER_NAME + ' bid contains invalid slot ID from ' + bid.placementCode + '. Discarding slot'); + passOnBid(bid.placementCode); + continue; + } + + sizeID++; + var size = { + width: bid.sizes[j][0], + height: bid.sizes[j][1] + }; + + var slotName = usingSizeSpecificSiteID ? String(slotID) : slotID + '_' + sizeID; + slotIdMap[slotName] = bid; + + // Doesn't need the if(primary_request) conditional since we are using the mergeSlotInto function which is safe + cygnus_index_args.slots = mergeSlotInto({ + id: slotName, + width: size.width, + height: size.height, + siteID: siteID || cygnus_index_args.siteID + }, cygnus_index_args.slots); + + if (bid.params.tier2SiteID) { + var tier2SiteID = Number(bid.params.tier2SiteID); + if (typeof tier2SiteID !== 'undefined' && !tier2SiteID) { + continue; + } + + cygnus_index_args.slots = mergeSlotInto({ + id: 'T1_' + slotName, + width: size.width, + height: size.height, + siteID: tier2SiteID + }, cygnus_index_args.slots); + } + + if (bid.params.tier3SiteID) { + var tier3SiteID = Number(bid.params.tier3SiteID); + if (typeof tier3SiteID !== 'undefined' && !tier3SiteID) { + continue; + } + + cygnus_index_args.slots = mergeSlotInto({ + id: 'T2_' + slotName, + width: size.width, + height: size.height, + siteID: tier3SiteID + }, cygnus_index_args.slots); + } + } + } + } + + function sendVideoRequest(requestID, videoImpressions) { + var cygnusRequest = { + 'id': requestID, + 'imp': videoImpressions, + 'site': { + 'page': utils.getTopWindowUrl() + } + }; + + if (!utils.isEmpty(cygnusRequest.imp)) { + var cygnusRequestUrl = createCygnusRequest(cygnusRequest.imp[0].ext.siteID, cygnusRequest); + + _adloader2['default'].loadScript(cygnusRequestUrl); + } + } + + function buildVideoImpressions(bid) { + if (!validateBid(bid)) { + return; + } + + bid = transformBid(bid); + + // map request id to bid object to retrieve adUnit code in callback + bidRequests[bid.bidId] = {}; + bidRequests[bid.bidId].prebid = bid; + + var cygnusImpression = {}; + cygnusImpression.id = bid.bidId; + + cygnusImpression.ext = {}; + cygnusImpression.ext.siteID = bid.params.video.siteID; + delete bid.params.video.siteID; + + var podType = bid.params.video.startdelay; + if (bid.params.video.startdelay === 0) { + podType = 'preroll'; + } else if (typeof START_DELAY_MAP[bid.params.video.startdelay] === 'undefined') { + podType = 'midroll'; + } + cygnusImpression.ext.sid = [SLOT_ID_PREFIX_MAP[podType], 1, 1, 's'].join('_'); + + cygnusImpression.video = {}; + + if (bid.params.video) { + Object.keys(bid.params.video).filter((function (param) { + return typeof VIDEO_REQUIRED_PARAMS_MAP[param] !== 'undefined' || typeof VIDEO_OPTIONAL_PARAMS_MAP[param] !== 'undefined'; + })).forEach((function (param) { + if (param === 'startdelay' && typeof START_DELAY_MAP[bid.params.video[param]] !== 'undefined') { + bid.params.video[param] = START_DELAY_MAP[bid.params.video[param]]; + } + if (param === 'linearity' && typeof LINEARITY_MAP[bid.params.video[param]] !== 'undefined') { + bid.params.video[param] = LINEARITY_MAP[bid.params.video[param]]; + } + cygnusImpression.video[param] = bid.params.video[param]; + })); + } else { + return; + } + + var bidSize = getSizes(bid.sizes).shift(); + if (!bidSize || !bidSize.width || !bidSize.height) { + return; + } + cygnusImpression.video.w = bidSize.width; + cygnusImpression.video.h = bidSize.height; + + bidRequests[bid.bidId].cygnus = cygnusImpression; + + return cygnusImpression; + } + /* Function in order to add a slot into the list if it hasn't been created yet, else it returns the same list. */ @@ -672,22 +854,310 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { function logErrorBidResponse() { // no bid response - var bid = bidfactory.createBid(2); + var bid = _bidfactory2['default'].createBid(2); bid.bidderCode = ADAPTER_CODE; // log error to first add unit - bidmanager.addBidResponse(firstAdUnitCode, bid); + _bidmanager2['default'].addBidResponse(firstAdUnitCode, bid); } - return { - callBids: _callBids + function createCygnusRequest(siteID, cygnusRequest) { + var cygnusUrl = window.location.protocol === 'https:' ? url.parse(BASE_CYGNUS_VIDEO_URL_SECURE) : url.parse(BASE_CYGNUS_VIDEO_URL_INSECURE); + cygnusUrl.search.s = siteID; + cygnusUrl.search.r = encodeURIComponent(JSON.stringify(cygnusRequest)); + var formattedCygnusUrl = url.format(cygnusUrl); + return formattedCygnusUrl; + } + + /* Notify Prebid of bid responses so bids can get in the auction */ + pbjs.handleCygnusResponse = function (response) { + if (!response || !response.seatbid || utils.isEmpty(response.seatbid)) { + utils.logInfo('Cygnus returned no bids'); + + // signal this response is complete + Object.keys(bidRequests).forEach((function (bidId) { + var prebidRequest = bidRequests[bidId].prebid; + var bid = createBidObj(_constants.STATUS.NO_BID, prebidRequest); + utils.logInfo(JSON.stringify(bid)); + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, bid); + })); + + return; + } + + response.seatbid.forEach((function (seat) { + seat.bid.forEach((function (cygnusBid) { + var validBid = true; + + if (typeof bidRequests[cygnusBid.impid] === 'undefined') { + utils.logInfo('Cygnus returned mismatched id'); + + // signal this response is complete + Object.keys(bidRequests).forEach((function (bidId) { + var prebidRequest = bidRequests[bidId].prebid; + var bid = createBidObj(_constants.STATUS.NO_BID, prebidRequest); + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, bid); + })); + return; + } + + if (!cygnusBid.ext.vasturl) { + utils.logInfo('Cygnus returned no vast url'); + validBid = false; + } + + if (url.parse(cygnusBid.ext.vasturl).host === window.location.host) { + utils.logInfo('Cygnus returned no vast url'); + validBid = false; + } + + var cpm = void 0; + if (typeof cygnusBid.ext.pricelevel === 'string') { + var priceLevel = cygnusBid.ext.pricelevel; + if (priceLevel.charAt(0) === '_') priceLevel = priceLevel.slice(1); + cpm = priceLevel / 100; + if (!utils.isNumber(cpm) || isNaN(cpm)) { + utils.logInfo('Cygnus returned invalid price'); + validBid = false; + } + } else { + validBid = false; + } + + var prebidRequest = bidRequests[cygnusBid.impid].prebid; + var cygnusRequest = bidRequests[cygnusBid.impid].cygnus; + + if (!validBid) { + var _bid = createBidObj(_constants.STATUS.NO_BID, prebidRequest); + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, _bid); + return; + } + + var bid = createBidObj(_constants.STATUS.GOOD, prebidRequest); + bid.cpm = cpm; + bid.width = cygnusRequest.video.w; + bid.height = cygnusRequest.video.h; + bid.vastUrl = cygnusBid.ext.vasturl; + bid.descriptionUrl = cygnusBid.ext.vasturl; + bid.mediaType = 'video'; + + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, bid); + })); + })); + + bidRequests = {}; }; + + function createBidObj(status, request) { + var bid = _bidfactory2['default'].createBid(status, request); + bid.code = baseAdapter.getBidderCode(); + bid.bidderCode = baseAdapter.getBidderCode(); + + return bid; + } + + /* Check that a bid has required paramters */ + function validateBid(bid) { + if (bid.mediaType === 'video' && utils.hasValidBidRequest(bid.params.video, Object.keys(VIDEO_REQUIRED_PARAMS_MAP), ADAPTER_NAME) && isValidSite(bid.params.video.siteID) && isValidPlayerType(bid.params.video.playerType) && isValidProtocolArray(bid.params.video.protocols) && isValidDuration(bid.params.video.maxduration) && bid.params.video.maxduration > 0) { + return bid; + } + } + + function isValidSite(siteID) { + var intSiteID = +siteID; + if (isNaN(intSiteID) || !utils.isNumber(intSiteID) || intSiteID < 0 || utils.isArray(siteID)) { + utils.logError('Site ID is invalid, must be a number > 0. Got: ' + siteID); + return false; + } + return true; + } + + function isValidPlayerType(playerType) { + if (typeof playerType === 'undefined' || !utils.isStr(playerType)) { + utils.logError('Player type is invalid, must be one of: ' + Object.keys(SUPPORTED_PLAYER_TYPES_MAP)); + return false; + } + playerType = playerType.toUpperCase(); + if (!SUPPORTED_PLAYER_TYPES_MAP[playerType]) { + utils.logError('Player type is invalid, must be one of: ' + Object.keys(SUPPORTED_PLAYER_TYPES_MAP)); + return false; + } + return true; + } + + function isValidProtocolArray(protocolArray) { + if (!utils.isArray(protocolArray) || utils.isEmpty(protocolArray)) { + utils.logError('Protocol array is not an array. Got: ' + protocolArray); + return false; + } else { + for (var i = 0; i < protocolArray.length; i++) { + var protocol = protocolArray[i]; + if (!SUPPORTED_PROTOCOLS_MAP[protocol]) { + utils.logError('Protocol array contains an invalid protocol, must be one of: ' + SUPPORTED_PROTOCOLS_MAP + '. Got: ' + protocol); + return false; + } + } + } + return true; + } + + function isValidDuration(duration) { + var intDuration = +duration; + if (isNaN(intDuration) || !utils.isNumber(intDuration) || utils.isArray(duration)) { + utils.logError('Duration is invalid, must be a number. Got: ' + duration); + return false; + } + return true; + } + + function isValidMimeArray(mimeArray) { + if (!utils.isArray(mimeArray) || utils.isEmpty(mimeArray)) { + utils.logError('MIMEs array is not an array. Got: ' + mimeArray); + return false; + } else { + for (var i = 0; i < mimeArray.length; i++) { + var mimeType = mimeArray[i]; + if (!utils.isStr(mimeType) || utils.isEmptyStr(mimeType) || !/^\w+\/[\w-]+$/.test(mimeType)) { + utils.logError('MIMEs array contains an invalid MIME type. Got: ' + mimeType); + return false; + } + } + } + return true; + } + + function isValidLinearity(linearity) { + if (!LINEARITY_MAP[linearity]) { + utils.logInfo('Linearity is invalid, must be one of: ' + Object.keys(LINEARITY_MAP) + '. Got: ' + linearity); + return false; + } + return true; + } + + function isValidStartDelay(startdelay) { + if (typeof START_DELAY_MAP[startdelay] === 'undefined') { + var intStartdelay = +startdelay; + if (isNaN(intStartdelay) || !utils.isNumber(intStartdelay) || intStartdelay < -2 || utils.isArray(startdelay)) { + utils.logInfo('Start delay is invalid, must be a number >= -2. Got: ' + startdelay); + return false; + } + } + return true; + } + + function isValidApiArray(apiArray, playerType) { + if (!utils.isArray(apiArray) || utils.isEmpty(apiArray)) { + utils.logInfo('API array is not an array. Got: ' + apiArray); + return false; + } else { + for (var i = 0; i < apiArray.length; i++) { + var api = +apiArray[i]; + if (isNaN(api) || !SUPPORTED_API_MAP[playerType].includes(api)) { + utils.logInfo('API array contains an invalid API version. Got: ' + api); + return false; + } + } + } + return true; + } + + function transformBid(bid) { + bid.params.video.siteID = +bid.params.video.siteID; + bid.params.video.maxduration = +bid.params.video.maxduration; + + bid.params.video.protocols = bid.params.video.protocols.reduce((function (arr, protocol) { + return arr.concat(SUPPORTED_PROTOCOLS_MAP[protocol]); + }), []); + + var minduration = bid.params.video.minduration; + if (typeof minduration === 'undefined' || !isValidDuration(minduration)) { + utils.logInfo('Using default value for \'minduration\', default: ' + VIDEO_OPTIONAL_PARAMS_MAP.minduration); + bid.params.video.minduration = VIDEO_OPTIONAL_PARAMS_MAP.minduration; + } + + var startdelay = bid.params.video.startdelay; + if (typeof startdelay === 'undefined' || !isValidStartDelay(startdelay)) { + utils.logInfo('Using default value for \'startdelay\', default: ' + VIDEO_OPTIONAL_PARAMS_MAP.startdelay); + bid.params.video.startdelay = VIDEO_OPTIONAL_PARAMS_MAP.startdelay; + } + + var linearity = bid.params.video.linearity; + if (typeof linearity === 'undefined' || !isValidLinearity(linearity)) { + utils.logInfo('Using default value for \'linearity\', default: ' + VIDEO_OPTIONAL_PARAMS_MAP.linearity); + bid.params.video.linearity = VIDEO_OPTIONAL_PARAMS_MAP.linearity; + } + + var mimes = bid.params.video.mimes; + var playerType = bid.params.video.playerType.toUpperCase(); + if (typeof mimes === 'undefined' || !isValidMimeArray(mimes)) { + utils.logInfo('Using default value for \'mimes\', player type: \'' + playerType + '\', default: ' + DEFAULT_MIMES_MAP[playerType]); + bid.params.video.mimes = DEFAULT_MIMES_MAP[playerType]; + } + + var apiList = bid.params.video.apiList; + if (typeof apiList !== 'undefined' && !isValidApiArray(apiList, playerType)) { + utils.logInfo('Removing invalid api versions from api list.'); + if (utils.isArray(apiList)) { + bid.params.video.apiList = apiList.filter((function (api) { + return SUPPORTED_API_MAP[playerType].includes(api); + })); + } else { + bid.params.video.apiList = []; + } + } + + if (typeof apiList === 'undefined' && bid.params.video.allowVPAID && utils.isA(bid.params.video.allowVPAID, 'Boolean')) { + bid.params.video.mimes = bid.params.video.mimes.concat(DEFAULT_VPAID_MIMES_MAP[playerType]); + bid.params.video.apiList = SUPPORTED_API_MAP[playerType]; + } + + if (utils.isEmpty(bid.params.video.apiList)) { + utils.logInfo('API list is empty, VPAID ads will not be requested.'); + delete bid.params.video.apiList; + } + + delete bid.params.video.playerType; + delete bid.params.video.allowVPAID; + + return bid; + } + + /* Turn bid request sizes into ut-compatible format */ + function getSizes(requestSizes) { + var sizes = []; + var sizeObj = {}; + + if (utils.isArray(requestSizes) && requestSizes.length === 2 && !utils.isArray(requestSizes[0])) { + if (!utils.isNumber(requestSizes[0]) || !utils.isNumber(requestSizes[1])) { + return sizes; + } + sizeObj.width = requestSizes[0]; + sizeObj.height = requestSizes[1]; + sizes.push(sizeObj); + } else if ((typeof requestSizes === 'undefined' ? 'undefined' : _typeof(requestSizes)) === 'object') { + for (var i = 0; i < requestSizes.length; i++) { + var size = requestSizes[i]; + sizeObj = {}; + sizeObj.width = parseInt(size[0], 10); + sizeObj.height = parseInt(size[1], 10); + sizes.push(sizeObj); + } + } + + return sizes; + } + + return _extends(this, { + callBids: _callBids + }); }; -adaptermanager.registerBidAdapter(new IndexExchangeAdapter(), 'indexExchange'); +_adaptermanager2['default'].registerBidAdapter(new IndexExchangeAdapter(), 'indexExchange', { + supportedMediaTypes: ['video'] +}); module.exports = IndexExchangeAdapter; /***/ }) -},[113]); \ No newline at end of file +},[123]); \ No newline at end of file diff --git a/build/dist/inneractiveBidAdapter.js b/build/dist/inneractiveBidAdapter.js index c34d6c3b559..1d88e4c32ca 100644 --- a/build/dist/inneractiveBidAdapter.js +++ b/build/dist/inneractiveBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([51],{ +pbjsChunk([56],{ -/***/ 115: +/***/ 125: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(116); +module.exports = __webpack_require__(126); /***/ }), -/***/ 116: +/***/ 126: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -40,12 +40,14 @@ var _bidfactory2 = _interopRequireDefault(_bidfactory); var _constants = __webpack_require__(4); -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); var _adaptermanager = __webpack_require__(1); var _adaptermanager2 = _interopRequireDefault(_adaptermanager); +var _config = __webpack_require__(10); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } @@ -267,7 +269,7 @@ var Url = { } if (typeof pbjs !== 'undefined') { - toQueryString.bco = pbjs.cbTimeout || pbjs.bidderTimeout; + toQueryString.bco = pbjs.cbTimeout || _config.config.getConfig('bidderTimeout'); } toQueryString.timestamp = Date.now(); @@ -306,7 +308,9 @@ var InnerActiveAdapter = (function () { function InnerActiveAdapter() { _classCallCheck(this, InnerActiveAdapter); - this.iaAdapter = _adapter2['default'].createNew(CONSTANTS.ADAPTER_NAME); + this.iaAdapter = new _adapter2['default'](CONSTANTS.ADAPTER_NAME); + this.setBidderCode = this.iaAdapter.setBidderCode.bind(this); + this.bidByBidId = {}; } @@ -527,17 +531,6 @@ var InnerActiveAdapter = (function () { value: function _getUtils() { return { Reporter: Reporter }; } - - /** - * Creates new instance of InnerActiveAdapter for prebid auction - * @returns {InnerActiveAdapter} - */ - - }, { - key: 'createNew', - value: function createNew() { - return new InnerActiveAdapter(); - } }]); return InnerActiveAdapter; @@ -549,4 +542,4 @@ module.exports = InnerActiveAdapter; /***/ }) -},[115]); \ No newline at end of file +},[125]); \ No newline at end of file diff --git a/build/dist/innityBidAdapter.js b/build/dist/innityBidAdapter.js index faa22ac0718..341cc5a6d31 100644 --- a/build/dist/innityBidAdapter.js +++ b/build/dist/innityBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([50],{ +pbjsChunk([55],{ -/***/ 117: +/***/ 127: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(118); +module.exports = __webpack_require__(128); /***/ }), -/***/ 118: +/***/ 128: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -23,19 +23,19 @@ var adaptermanager = __webpack_require__(1); var InnityAdapter = function InnityAdapter() { function _callBids(params) { - var bidURL, - bids = params.bids || [], - requestURL = window.location.protocol + '//as.innity.com/synd/?cb=' + new Date().getTime() + '&ver=2&hb=1&output=js&'; + var bidURL; + var bids = params.bids || []; + var requestURL = window.location.protocol + '//as.innity.com/synd/?cb=' + new Date().getTime() + '&ver=2&hb=1&output=js&'; for (var i = 0; i < bids.length; i++) { - var requestParams = {}, - bid = bids[i]; + var requestParams = {}; + var bid = bids[i]; requestParams.pub = bid.params.pub; requestParams.zone = bid.params.zone; // Page URL requestParams.url = utils.getTopWindowUrl(); // Sizes - var parseSized = utils.parseSizesInput(bid.sizes), - arrSize = parseSized[0].split('x'); + var parseSized = utils.parseSizesInput(bid.sizes); + var arrSize = parseSized[0].split('x'); requestParams.width = arrSize[0]; requestParams.height = arrSize[1]; // Callback function @@ -50,10 +50,10 @@ var InnityAdapter = function InnityAdapter() { } pbjs._doInnityCallback = function (response) { - var bidObject, - bidRequest, - callbackID, - libURL = window.location.protocol + '//cdn.innity.net/frame_util.js'; + var bidObject; + var bidRequest; + var callbackID; + var libURL = window.location.protocol + '//cdn.innity.net/frame_util.js'; callbackID = response.callback_uid; bidRequest = utils.getBidRequest(callbackID); if (response.cpm > 0) { @@ -82,4 +82,4 @@ module.exports = InnityAdapter; /***/ }) -},[117]); \ No newline at end of file +},[127]); \ No newline at end of file diff --git a/build/dist/jcmBidAdapter.js b/build/dist/jcmBidAdapter.js index 37b53738f07..554b59c5d73 100644 --- a/build/dist/jcmBidAdapter.js +++ b/build/dist/jcmBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([49],{ +pbjsChunk([54],{ -/***/ 119: +/***/ 129: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(120); +module.exports = __webpack_require__(130); /***/ }), -/***/ 120: +/***/ 130: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86,4 +86,4 @@ module.exports = JCMAdapter; /***/ }) -},[119]); \ No newline at end of file +},[129]); \ No newline at end of file diff --git a/build/dist/justpremiumBidAdapter.js b/build/dist/justpremiumBidAdapter.js new file mode 100644 index 00000000000..4374300393b --- /dev/null +++ b/build/dist/justpremiumBidAdapter.js @@ -0,0 +1,305 @@ +pbjsChunk([53],{ + +/***/ 131: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(132); + + +/***/ }), + +/***/ 132: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _bidfactory = __webpack_require__(3); + +var _bidfactory2 = _interopRequireDefault(_bidfactory); + +var _bidmanager = __webpack_require__(2); + +var _bidmanager2 = _interopRequireDefault(_bidmanager); + +var _adloader = __webpack_require__(5); + +var _adloader2 = _interopRequireDefault(_adloader); + +var _utils = __webpack_require__(0); + +var utils = _interopRequireWildcard(_utils); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var CONSTANTS = __webpack_require__(4); + +var JustpremiumAdapter = function JustpremiumAdapter() { + var top = window.top; + var d = void 0; + var bids = void 0; + var cookieLoaded = false; + var adManagerLoaded = false; + var jPAM = void 0; + var dConfig = void 0; + var toLoad = void 0; + var server = void 0; + + function isCrossOriginIframe() { + try { + return !top.document; + } catch (e) { + return true; + } + } + + function arrayUnique(array) { + var a = array.concat(); + for (var i = 0; i < a.length; ++i) { + for (var j = i + 1; j < a.length; ++j) { + if (a[i] === a[j]) { + a.splice(j--, 1); + } + } + } + + return a; + } + + function readCookie(name) { + var nameEQ = name + '='; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') { + c = c.substring(1, c.length); + }if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); + } + return null; + } + + function setupVar() { + d = top.document; + jPAM = top.jPAM = top.jPAM || window.jPAM || {}; + dConfig = jPAM._dev || { + toLoad: null, + server: null + }; + var libVer = readCookie('jpxhbjs') || null; + toLoad = dConfig.toLoad || [d.location.protocol + '//cdn-cf.justpremium.com/js/' + (libVer ? libVer + '/' : '') + 'jpx.js']; + server = dConfig.server || d.location.protocol + '//pre.ads.justpremium.com/v/1.4'; + } + + function loadCookie() { + if (cookieLoaded) return; + cookieLoaded = true; + _adloader2['default'].loadScript(d.location.protocol + '//ox-d.justpremium.com/w/1.0/cj'); + } + + function loadTag(params, callback) { + var keys = Object.keys(params || {}); + var url = '' + server + (keys.length ? '/?' : '') + keys.map((function (key) { + return key + '=' + params[key]; + })).join('&'); + _adloader2['default'].loadScript(url, callback); + } + + function onLoad() { + jPAM = top.jPAM = Jpx.JAM.instance({ + plugins: ['bidder'] + }); + } + + function loadResources() { + if (toLoad.length > 0) { + _adloader2['default'].loadScript(toLoad.shift(), (function () { + loadResources(); + })); + } else { + onLoad(); + } + } + + function loadAdManager() { + if (adManagerLoaded) return; + if (managerAlreadyDefined()) { + if (!jPAM.hasPlugin('bidder')) { + return jPAM.addPlugin('bidder'); + } + return; + } + adManagerLoaded = true; + loadResources(); + } + + function managerAlreadyDefined() { + return top.jPAM && top.jPAM.initialized; + } + + function findBid(zone, bids) { + var len = bids.length; + while (len--) { + if (parseInt(bids[len].params.zone) === parseInt(zone)) { + var rec = bids.splice(len, 1); + return rec.length ? rec.pop() : false; + } + } + + return false; + } + + function handleError(err, zone, reqBids) { + var bid = findBid(zone, reqBids); + while (bid) { + var bidObject = _bidfactory2['default'].createBid(CONSTANTS.STATUS.NO_BID, bid); + bidObject.bidderCode = 'justpremium'; + _bidmanager2['default'].addBidResponse(bid.placementCode, bidObject); + bid = findBid(zone, reqBids); + } + utils.logError(err); + } + + function addBidResponse(zone, reqBids) { + var jPAM = window.top.jPAM = window.top.jPAM || window.jPAM || {}; + var c = jPAM.cb = jPAM.cb || {}; + + reqBids.filter((function (r) { + return parseInt(r.params.zone) === parseInt(zone); + })).forEach((function (bid) { + var bidder = c['bidder' + zone]; + + _bidmanager2['default'].addBidResponse(bid.placementCode, bidder.createBid((function (ad) { + var bidObject = void 0; + if (!ad) { + bidObject = _bidfactory2['default'].createBid(CONSTANTS.STATUS.NO_BID, bid); + bidObject.bidderCode = 'justpremium'; + return bidObject; + } + bidObject = _bidfactory2['default'].createBid(CONSTANTS.STATUS.GOOD, bid); + bidObject.bidderCode = 'justpremium'; + bidObject.adSlot = bid.adSlot; + return bidObject; + }), bid)); + })); + } + + function requestBids(bids) { + var pubCond = preparePubCond(bids); + var reqBids = bids.concat(); + + Object.keys(pubCond).forEach((function (zone) { + loadTag({ + zone: zone, + hostname: d.location.hostname, + protocol: d.location.protocol.replace(':', ''), + sw: top.screen.width, + sh: top.screen.height, + ww: top.innerWidth, + wh: top.innerHeight, + c: encodeURIComponent(JSON.stringify(pubCond[zone])), + id: zone, + i: +new Date() + }, (function (err) { + if (err) { + handleError(err, zone, reqBids); + } + addBidResponse(zone, reqBids); + }), true); + })); + } + + function preparePubCond(bids) { + var cond = {}; + var count = {}; + + bids.forEach((function (bid) { + var params = bid.params || {}; + var zone = params.zone; + + if (!zone) { + throw new Error('JustPremium: Bid should contains zone id.'); + } + + if (cond[zone] === 1) { + return; + } + + var allow = params.allow || params.formats || []; + var exclude = params.exclude || []; + + if (allow.length === 0 && exclude.length === 0) { + return cond[params.zone] = 1; + } + + cond[zone] = cond[zone] || [[], {}]; + cond[zone][0] = arrayUnique(cond[zone][0].concat(allow)); + exclude.forEach((function (e) { + if (!cond[zone][1][e]) { + cond[zone][1][e] = 1; + } else cond[zone][1][e]++; + })); + + count[zone] = count[zone] || 0; + if (exclude.length) count[zone]++; + })); + + Object.keys(count).forEach((function (zone) { + if (cond[zone] === 1) return; + + var exclude = []; + Object.keys(cond[zone][1]).forEach((function (format) { + if (cond[zone][1][format] === count[zone]) exclude.push(format); + })); + cond[zone][1] = exclude; + })); + + Object.keys(cond).forEach((function (zone) { + if (cond[zone] !== 1 && cond[zone][1].length) { + cond[zone][0].forEach((function (r) { + var idx = cond[zone][1].indexOf(r); + if (idx > -1) { + cond[zone][1].splice(idx, 1); + } + })); + cond[zone][0].length = 0; + } + + if (cond[zone] !== 1 && !cond[zone][0].length && !cond[zone][1].length) cond[zone] = 1; + })); + + return cond; + } + + function callBids(params) { + bids = params.bids || []; + + if (!isCrossOriginIframe()) { + setupVar(); + loadCookie(); + loadAdManager(); + requestBids(bids); + } else { + bids.forEach((function (bid) { + handleError(new Error('Justpremium: Adapter does not support cross origin iframe.'), bid.params.zone, bids); + })); + } + } + + return { + callBids: callBids + }; +}; + +_adaptermanager2['default'].registerBidAdapter(new JustpremiumAdapter(), 'justpremium'); + +module.exports = JustpremiumAdapter; + +/***/ }) + +},[131]); \ No newline at end of file diff --git a/build/dist/kargoBidAdapter.js b/build/dist/kargoBidAdapter.js index 13a3ad47ccb..bcc85e843d6 100644 --- a/build/dist/kargoBidAdapter.js +++ b/build/dist/kargoBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([48],{ +pbjsChunk([52],{ -/***/ 121: +/***/ 133: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(122); +module.exports = __webpack_require__(134); /***/ }), -/***/ 122: +/***/ 134: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65,9 +65,9 @@ var KargoAdapter = function KargoAdapter() { adSlotIds: utils._map(params.bids, (function (bid) { return bid.params.placementId; })) - }, _getAllMetadata()), - encodedParams = encodeURIComponent(JSON.stringify(transformedParams)), - callbackName = 'kargo_prebid_' + params.requestId.replace(/-/g, '_'); + }, _getAllMetadata()); + var encodedParams = encodeURIComponent(JSON.stringify(transformedParams)); + var callbackName = 'kargo_prebid_' + params.requestId.replace(/-/g, '_'); window.pbjs[callbackName] = _handleBid(params.bids); @@ -76,35 +76,16 @@ var KargoAdapter = function KargoAdapter() { function _readCookie(name) { var nameEquals = name + '='; + var cookies = document.cookie.split(';'); - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = document.cookie.split(';')[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var cookie = _step.value; - - while (cookie.charAt(0) === ' ') { - cookie = cookie.substring(1, cookie.length); - } - - if (cookie.indexOf(nameEquals) === 0) { - return cookie.substring(nameEquals.length, cookie.length); - } + for (var key in cookies) { + var cookie = cookies[key]; + while (cookie.charAt(0) === ' ') { + cookie = cookie.substring(1, cookie.length); } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator['return']) { - _iterator['return'](); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } + + if (cookie.indexOf(nameEquals) === 0) { + return cookie.substring(nameEquals.length, cookie.length); } } @@ -113,8 +94,8 @@ var KargoAdapter = function KargoAdapter() { function _getCrbIds() { try { - var crb = JSON.parse(decodeURIComponent(_readCookie('krg_crb'))), - syncIds = {}; + var crb = JSON.parse(decodeURIComponent(_readCookie('krg_crb'))); + var syncIds = {}; if (crb && crb.v) { var vParsed = JSON.parse(atob(crb.v)); @@ -132,8 +113,8 @@ var KargoAdapter = function KargoAdapter() { function _getUid() { try { - var uid = JSON.parse(decodeURIComponent(_readCookie('krg_uid'))), - vData = {}; + var uid = JSON.parse(decodeURIComponent(_readCookie('krg_uid'))); + var vData = {}; if (uid && uid.v) { vData = uid.v; @@ -154,8 +135,8 @@ var KargoAdapter = function KargoAdapter() { } function _getKrux() { - var segmentsStr = _getKruxSegments(), - segments = []; + var segmentsStr = _getKruxSegments(); + var segments = []; if (segmentsStr) { segments = segmentsStr.split(','); @@ -176,8 +157,8 @@ var KargoAdapter = function KargoAdapter() { } function _getUserIds() { - var uid = _getUid(), - crbIds = _getCrbIds(); + var uid = _getUid(); + var crbIds = _getCrbIds(); return { kargoID: uid.userId, @@ -208,4 +189,4 @@ module.exports = KargoAdapter; /***/ }) -},[121]); \ No newline at end of file +},[133]); \ No newline at end of file diff --git a/build/dist/komoonaBidAdapter.js b/build/dist/komoonaBidAdapter.js index e9068d43a94..2b6a9cc916b 100644 --- a/build/dist/komoonaBidAdapter.js +++ b/build/dist/komoonaBidAdapter.js @@ -1,19 +1,21 @@ -pbjsChunk([47],{ +pbjsChunk([51],{ -/***/ 123: +/***/ 135: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(124); +module.exports = __webpack_require__(136); /***/ }), -/***/ 124: +/***/ 136: /***/ (function(module, exports, __webpack_require__) { "use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + var _adapter = __webpack_require__(7); var _adapter2 = _interopRequireDefault(_adapter); @@ -47,7 +49,7 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var ENDPOINT = '//bidder.komoona.com/v1/GetSBids'; function KomoonaAdapter() { - var baseAdapter = _adapter2['default'].createNew('komoona'); + var baseAdapter = new _adapter2['default']('komoona'); var bidRequests = {}; /* Prebid executes this function when the page asks to send out bid requests */ @@ -146,21 +148,16 @@ function KomoonaAdapter() { return bid; } - return { - createNew: KomoonaAdapter.createNew, + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode - }; + }); } -KomoonaAdapter.createNew = function () { - return new KomoonaAdapter(); -}; - _adaptermanager2['default'].registerBidAdapter(new KomoonaAdapter(), 'komoona'); module.exports = KomoonaAdapter; /***/ }) -},[123]); \ No newline at end of file +},[135]); \ No newline at end of file diff --git a/build/dist/kruxlinkBidAdapter.js b/build/dist/kruxlinkBidAdapter.js index 7e24f84d58c..482408ee3f2 100644 --- a/build/dist/kruxlinkBidAdapter.js +++ b/build/dist/kruxlinkBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([46],{ +pbjsChunk([50],{ -/***/ 125: +/***/ 137: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(126); +module.exports = __webpack_require__(138); /***/ }), -/***/ 126: +/***/ 138: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -101,4 +101,4 @@ module.exports = KruxAdapter; /***/ }) -},[125]); \ No newline at end of file +},[137]); \ No newline at end of file diff --git a/build/dist/lifestreetBidAdapter.js b/build/dist/lifestreetBidAdapter.js index 266eb2665a1..b3862510bd0 100644 --- a/build/dist/lifestreetBidAdapter.js +++ b/build/dist/lifestreetBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([45],{ +pbjsChunk([49],{ -/***/ 127: +/***/ 139: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(128); +module.exports = __webpack_require__(140); /***/ }), -/***/ 128: +/***/ 140: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -153,4 +153,4 @@ module.exports = LifestreetAdapter; /***/ }) -},[127]); \ No newline at end of file +},[139]); \ No newline at end of file diff --git a/build/dist/mantisBidAdapter.js b/build/dist/mantisBidAdapter.js index f4d773751fc..28b69d6ac91 100644 --- a/build/dist/mantisBidAdapter.js +++ b/build/dist/mantisBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([44],{ +pbjsChunk([48],{ -/***/ 129: +/***/ 141: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(130); +module.exports = __webpack_require__(142); /***/ }), -/***/ 130: +/***/ 142: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -244,4 +244,4 @@ module.exports = MantisAdapter; /***/ }) -},[129]); \ No newline at end of file +},[141]); \ No newline at end of file diff --git a/build/dist/marsmediaAnalyticsAdapter.js b/build/dist/marsmediaAnalyticsAdapter.js new file mode 100644 index 00000000000..e51a8257ecd --- /dev/null +++ b/build/dist/marsmediaAnalyticsAdapter.js @@ -0,0 +1,286 @@ +pbjsChunk([4],{ + +/***/ 143: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(144); + + +/***/ }), + +/***/ 144: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _ajax = __webpack_require__(6); + +var _AnalyticsAdapter = __webpack_require__(9); + +var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +/**** + * Mars Media Analytics + * Contact: prebid@m-m-g.com‏ + * Developer: Chen Saadia + */ + +var MARS_BIDDER_CODE = 'marsmedia'; +var analyticsType = 'endpoint'; +var MARS_VERSION = '1.0.1'; +var MARS_ANALYTICS_URL = '//prebid_stats.mars.media/prebidjs/api/analytics.php'; +var events = {}; + +var marsmediaAnalyticsAdapter = _extends((0, _AnalyticsAdapter2['default'])({ + MARS_ANALYTICS_URL: MARS_ANALYTICS_URL, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (typeof args !== 'undefined' && args.bidderCode === MARS_BIDDER_CODE) { + events[eventType] = args; + } + + if (eventType === 'auctionEnd') { + setTimeout((function () { + (0, _ajax.ajax)(MARS_ANALYTICS_URL, { + success: function success() {}, + error: function error() {} + }, JSON.stringify({ act: 'prebid_analytics', params: events, 'pbjs': pbjs.getBidResponses(), ver: MARS_VERSION }), { + method: 'POST' + }); + }), 3000); + } + } +}); + +_adaptermanager2['default'].registerAnalyticsAdapter({ + adapter: marsmediaAnalyticsAdapter, + code: 'marsmedia' +}); + +exports['default'] = marsmediaAnalyticsAdapter; + +/***/ }), + +/***/ 9: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports['default'] = AnalyticsAdapter; + +var _constants = __webpack_require__(4); + +var _constants2 = _interopRequireDefault(_constants); + +var _adloader = __webpack_require__(5); + +var _ajax = __webpack_require__(6); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var events = __webpack_require__(8); +var utils = __webpack_require__(0); + +var AUCTION_INIT = _constants2['default'].EVENTS.AUCTION_INIT; +var AUCTION_END = _constants2['default'].EVENTS.AUCTION_END; +var BID_REQUESTED = _constants2['default'].EVENTS.BID_REQUESTED; +var BID_TIMEOUT = _constants2['default'].EVENTS.BID_TIMEOUT; +var BID_RESPONSE = _constants2['default'].EVENTS.BID_RESPONSE; +var BID_WON = _constants2['default'].EVENTS.BID_WON; +var BID_ADJUSTMENT = _constants2['default'].EVENTS.BID_ADJUSTMENT; + +var LIBRARY = 'library'; +var ENDPOINT = 'endpoint'; +var BUNDLE = 'bundle'; + +var _sampled = true; + +function AnalyticsAdapter(_ref) { + var url = _ref.url, + analyticsType = _ref.analyticsType, + global = _ref.global, + handler = _ref.handler; + + var _queue = []; + var _eventCount = 0; + var _enableCheck = true; + var _handlers; + + if (analyticsType === LIBRARY) { + (0, _adloader.loadScript)(url, _emptyQueue); + } + + if (analyticsType === ENDPOINT || BUNDLE) { + _emptyQueue(); + } + + return { + track: _track, + enqueue: _enqueue, + enableAnalytics: _enable, + disableAnalytics: _disable, + getAdapterType: function getAdapterType() { + return analyticsType; + }, + getGlobal: function getGlobal() { + return global; + }, + getHandler: function getHandler() { + return handler; + }, + getUrl: function getUrl() { + return url; + } + }; + + function _track(_ref2) { + var eventType = _ref2.eventType, + args = _ref2.args; + + if (this.getAdapterType() === LIBRARY || BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(undefined, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + + (0, _ajax.ajax)(url, callback, JSON.stringify({ eventType: eventType, args: args })); + } + + function _enqueue(_ref4) { + var eventType = _ref4.eventType, + args = _ref4.args; + + var _this = this; + + if (global && window[global] && eventType && args) { + this.track({ eventType: eventType, args: args }); + } else { + _queue.push((function () { + _eventCount++; + _this.track({ eventType: eventType, args: args }); + })); + } + } + + function _enable(config) { + var _this2 = this; + + var _this = this; + + if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && _typeof(config.options) === 'object') { + _sampled = typeof config.options.sampling === 'undefined' || Math.random() < parseFloat(config.options.sampling); + } else { + _sampled = true; + } + + if (_sampled) { + var _handlers2; + + // first send all events fired before enableAnalytics called + events.getEvents().forEach((function (event) { + if (!event) { + return; + } + + var eventType = event.eventType, + args = event.args; + + + if (eventType !== BID_TIMEOUT) { + _enqueue.call(_this, { eventType: eventType, args: args }); + } + })); + + // Next register event listeners to send data immediately + + _handlers = (_handlers2 = {}, _defineProperty(_handlers2, BID_REQUESTED, (function (args) { + return _this2.enqueue({ eventType: BID_REQUESTED, args: args }); + })), _defineProperty(_handlers2, BID_RESPONSE, (function (args) { + return _this2.enqueue({ eventType: BID_RESPONSE, args: args }); + })), _defineProperty(_handlers2, BID_TIMEOUT, (function (args) { + return _this2.enqueue({ eventType: BID_TIMEOUT, args: args }); + })), _defineProperty(_handlers2, BID_WON, (function (args) { + return _this2.enqueue({ eventType: BID_WON, args: args }); + })), _defineProperty(_handlers2, BID_ADJUSTMENT, (function (args) { + return _this2.enqueue({ eventType: BID_ADJUSTMENT, args: args }); + })), _defineProperty(_handlers2, AUCTION_END, (function (args) { + return _this2.enqueue({ eventType: AUCTION_END, args: args }); + })), _defineProperty(_handlers2, AUCTION_INIT, (function (args) { + args.config = config.options; // enableAnaltyics configuration object + _this2.enqueue({ eventType: AUCTION_INIT, args: args }); + })), _handlers2); + + utils._each(_handlers, (function (handler, event) { + events.on(event, handler); + })); + } else { + utils.logMessage('Analytics adapter for "' + global + '" disabled by sampling'); + } + + // finally set this function to return log message, prevents multiple adapter listeners + this.enableAnalytics = function _enable() { + return utils.logMessage('Analytics adapter for "' + global + '" already enabled, unnecessary call to `enableAnalytics`.'); + }; + } + + function _disable() { + utils._each(_handlers, (function (handler, event) { + events.off(event, handler); + })); + } + + function _emptyQueue() { + if (_enableCheck) { + for (var i = 0; i < _queue.length; i++) { + _queue[i](); + } + + // override push to execute the command immediately from now on + _queue.push = function (fn) { + fn(); + }; + + _enableCheck = false; + } + + utils.logMessage('event count sent to ' + global + ': ' + _eventCount); + } +} + +/***/ }) + +},[143]); \ No newline at end of file diff --git a/build/dist/marsmediaBidAdapter.js b/build/dist/marsmediaBidAdapter.js new file mode 100644 index 00000000000..1156706f823 --- /dev/null +++ b/build/dist/marsmediaBidAdapter.js @@ -0,0 +1,197 @@ +pbjsChunk([47],{ + +/***/ 145: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(146); + + +/***/ }), + +/***/ 146: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _adapter = __webpack_require__(7); + +var _adapter2 = _interopRequireDefault(_adapter); + +var _bidfactory = __webpack_require__(3); + +var _bidfactory2 = _interopRequireDefault(_bidfactory); + +var _bidmanager = __webpack_require__(2); + +var _bidmanager2 = _interopRequireDefault(_bidmanager); + +var _ajax = __webpack_require__(6); + +var _constants = __webpack_require__(4); + +var _utils = __webpack_require__(0); + +var utils = _interopRequireWildcard(_utils); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var MARS_BIDDER_CODE = 'marsmedia'; +var MARS_BIDDER_URL = '//bid306.rtbsrv.com:9306/bidder/?bid=3mhdom'; + +var MarsmediaBidAdapter = function MarsmediaBidAdapter() { + function _callBids(bidderRequest) { + var bids = bidderRequest.bids || []; + + bids.forEach((function (bid) { + try { + (0, _ajax.ajax)(MARS_BIDDER_URL, { + success: handleBidResponse, + error: handleBidError + }, buildCallParams(bid, bidderRequest), {}); + } catch (err) { + utils.logError('Error sending marsmedia request for publisher id: ' + bid.params.publisherID, null, err); + handleBidError(); + } + + function handleBidResponse(res) { + try { + utils.logMessage('Register bid for publisher ID: ' + bid.params.publisherID); + addBid(res, bid); + } catch (err) { + utils.logError('Error processing response for publisher ID: ' + bid.params.publisherID, null, err); + handleBidError(); + } + } + + function addBid(res, bid) { + var obj; + try { + obj = JSON.parse(res); + } catch (err) { + throw 'Faild to parse bid response'; + } + + if (Object.keys(obj).length === 0 || Object.keys(bid).length === 0) { + throw 'Empty Bid'; + } + + var ad = obj.seatbid[0].bid[0]; + var bid_params = _bidfactory2['default'].createBid(_constants.STATUS.GOOD, bid); + var sizes = bid.sizes[0]; + bid_params.un_id = obj.id; + bid_params.bidderCode = bid.bidder; + bid_params.cpm = Number(ad.price); + bid_params.price = Number(ad.price); + bid_params.width = sizes[0]; + bid_params.height = sizes[1]; + bid_params.ad = ad.adm; + bid_params.cid = ad.cid; + bid_params.seat = obj.seatbid[0].seat; + + _bidmanager2['default'].addBidResponse(bid.placementCode, bid_params); + } + + function handleBidError() { + var bidObj = _bidfactory2['default'].createBid(_constants.STATUS.NO_BID, bid); + bidObj.bidderCode = bid.bidder; + _bidmanager2['default'].addBidResponse(bid.bidid, bidObj); + } + })); + } + + function buildCallParams(bidRequest) { + if (typeof bidRequest.params === 'undefined') { + throw 'No params'; + } + + if (typeof bidRequest.sizes === 'undefined' || bidRequest.sizes.length === 0) { + throw 'No sizes'; + } + + if (typeof bidRequest.params.floor === 'undefined') { + throw 'No floor'; + } else if (isNaN(Number(bidRequest.params.floor))) { + throw 'Floor must be numeric value'; + } + + var sizes = bidRequest.sizes[0]; + var floor = typeof bidRequest.params.floor !== 'undefined' && bidRequest.params.floor === '' ? 0 : bidRequest.params.floor; + var protocol = window.location.protocol === 'https' ? 1 : 0; + var publisher_id = typeof bidRequest.params.publisherID !== 'undefined' ? bidRequest.params.publisherID : ''; + var params = {}; + params.id = utils.generateUUID(); + + params.cur = ['USD']; + + params.imp = [{ + id: params.id, + banner: { + w: sizes[0], + h: sizes[1], + secure: protocol + }, + bidfloor: floor + }]; + + params.device = { + ua: navigator.userAgent + }; + + params.user = { + id: publisher_id + }; + + params.app = { + id: params.id, + domain: document.domain, + publisher: { + id: publisher_id + } + }; + + params.site = { + 'id': publisher_id, + 'domain': window.location.hostname, + 'page': document.URL, + 'ref': document.referrer, + 'publisher': { + 'id': publisher_id, + 'domain': window.location.hostname + } + }; + + params.publisher = { + 'id': publisher_id, + 'domain': window.location.hostname + }; + + return JSON.stringify(params); + } + + return _extends(new _adapter2['default'](MARS_BIDDER_CODE), { + callBids: _callBids, + createNew: MarsmediaBidAdapter.createNew, + buildCallParams: buildCallParams + }); +}; + +MarsmediaBidAdapter.createNew = function () { + return new MarsmediaBidAdapter(); +}; + +_adaptermanager2['default'].registerBidAdapter(new MarsmediaBidAdapter(), MARS_BIDDER_CODE); + +module.exports = MarsmediaBidAdapter; + +/***/ }) + +},[145]); \ No newline at end of file diff --git a/build/dist/memeglobalBidAdapter.js b/build/dist/memeglobalBidAdapter.js index f657ef09711..a58db9d3507 100644 --- a/build/dist/memeglobalBidAdapter.js +++ b/build/dist/memeglobalBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([43],{ +pbjsChunk([46],{ -/***/ 131: +/***/ 147: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(132); +module.exports = __webpack_require__(148); /***/ }), -/***/ 132: +/***/ 148: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -21,7 +21,6 @@ var bidmanager = __webpack_require__(2); var adloader = __webpack_require__(5); var adaptermanager = __webpack_require__(1); -var defaultPlacementForBadBid = null; var bidderName = 'memeglobal'; /** * Adapter for requesting bids from Meme Global Media Group @@ -35,9 +34,6 @@ var MemeGlobalAdapter = function MemeGlobalAdapter() { if (!bids) return; - // assign the first adUnit (placement) for bad bids; - defaultPlacementForBadBid = bids[0].placementCode; - for (var i = 0; i < bids.length; i++) { _requestBid(bids[i]); } @@ -146,4 +142,4 @@ module.exports = MemeGlobalAdapter; /***/ }) -},[131]); \ No newline at end of file +},[147]); \ No newline at end of file diff --git a/build/dist/mobfoxBidAdapter.js b/build/dist/mobfoxBidAdapter.js index 72021ae6e9c..65a3d965fb3 100644 --- a/build/dist/mobfoxBidAdapter.js +++ b/build/dist/mobfoxBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([42],{ +pbjsChunk([45],{ -/***/ 133: +/***/ 149: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(134); +module.exports = __webpack_require__(150); /***/ }), -/***/ 134: +/***/ 150: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18,13 +18,12 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr var bidfactory = __webpack_require__(3); var bidmanager = __webpack_require__(2); -var adloader = __webpack_require__(5); var ajax = __webpack_require__(6); var CONSTANTS = __webpack_require__(4); var utils = __webpack_require__(0); var adaptermanager = __webpack_require__(1); -var mobfoxAdapter = function mobfoxAdapter() { +function MobfoxAdapter() { var BIDDER_CODE = 'mobfox'; var BID_REQUEST_BASE_URL = 'https://my.mobfox.com/request.php'; @@ -165,8 +164,8 @@ var mobfoxAdapter = function mobfoxAdapter() { throw ['htmlString is missing', responseBody]; } - var cpm = void 0, - cpmHeader = bidderResponse.xhr.getResponseHeader('X-Pricing-CPM'); + var cpm = void 0; + var cpmHeader = bidderResponse.xhr.getResponseHeader('X-Pricing-CPM'); try { cpm = Number(cpmHeader); } catch (e) { @@ -195,11 +194,11 @@ var mobfoxAdapter = function mobfoxAdapter() { return { callBids: callBids }; -}; +} -adaptermanager.registerBidAdapter(new mobfoxAdapter(), 'mobfox'); -module.exports = mobfoxAdapter; +adaptermanager.registerBidAdapter(new MobfoxAdapter(), 'mobfox'); +module.exports = MobfoxAdapter; /***/ }) -},[133]); \ No newline at end of file +},[149]); \ No newline at end of file diff --git a/build/dist/nginadBidAdapter.js b/build/dist/nginadBidAdapter.js index ec83202eb3d..037d3062933 100644 --- a/build/dist/nginadBidAdapter.js +++ b/build/dist/nginadBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([41],{ +pbjsChunk([44],{ -/***/ 135: +/***/ 151: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(136); +module.exports = __webpack_require__(152); /***/ }), -/***/ 136: +/***/ 152: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -205,4 +205,4 @@ module.exports = NginAdAdapter; /***/ }) -},[135]); \ No newline at end of file +},[151]); \ No newline at end of file diff --git a/build/dist/openxBidAdapter.js b/build/dist/openxBidAdapter.js index 2a50715f66e..e23583f2ff1 100644 --- a/build/dist/openxBidAdapter.js +++ b/build/dist/openxBidAdapter.js @@ -1,22 +1,24 @@ -pbjsChunk([40],{ +pbjsChunk([43],{ -/***/ 137: +/***/ 153: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(138); +module.exports = __webpack_require__(154); /***/ }), -/***/ 138: +/***/ 154: /***/ (function(module, exports, __webpack_require__) { "use strict"; +var _config = __webpack_require__(10); + var bidfactory = __webpack_require__(3); var bidmanager = __webpack_require__(2); -var adloader = __webpack_require__(5); +var ajax = __webpack_require__(6); var CONSTANTS = __webpack_require__(4); var utils = __webpack_require__(0); var adaptermanager = __webpack_require__(1); @@ -24,11 +26,21 @@ var adaptermanager = __webpack_require__(1); var OpenxAdapter = function OpenxAdapter() { var BIDDER_CODE = 'openx'; var BIDDER_CONFIG = 'hb_pb'; + var BIDDER_VERSION = '1.0.1'; var startTime = void 0; + var timeout = _config.config.getConfig('bidderTimeout'); var pdNode = null; - pbjs.oxARJResponse = function (oxResponseObj) { + function oxARJResponse(oxResponseObj) { + try { + oxResponseObj = JSON.parse(oxResponseObj); + } catch (_) { + // Could not parse response, changing to an empty response instead + oxResponseObj = { + ads: {} + }; + } var adUnits = oxResponseObj.ads.ad; if (oxResponseObj.ads && oxResponseObj.ads.pixels) { makePDCall(oxResponseObj.ads.pixels); @@ -56,11 +68,10 @@ var OpenxAdapter = function OpenxAdapter() { var beaconParams = { bd: +new Date() - startTime, - br: '0', // maybe 0, t, or p - bt: pbjs.cbTimeout || pbjs.bidderTimeout, // For the timeout per bid request + br: '0', // may be 0, t, or p + bt: Math.min(timeout, window.PREBID_TIMEOUT || _config.config.getConfig('bidderTimeout')), bs: window.location.hostname }; - // no fill :( if (!auid || !adUnit.pub_rev) { addBidResponse(null, bid); @@ -77,12 +88,12 @@ var OpenxAdapter = function OpenxAdapter() { }; function getViewportDimensions(isIfr) { - var width = void 0, - height = void 0, - tWin = window, - tDoc = document, - docEl = tDoc.documentElement, - body = void 0; + var width = void 0; + var height = void 0; + var tWin = window; + var tDoc = document; + var docEl = tDoc.documentElement; + var body = void 0; if (isIfr) { try { @@ -142,6 +153,9 @@ var OpenxAdapter = function OpenxAdapter() { bidResponse.width = creative.width; bidResponse.height = creative.height; } + if (adUnit.tbd) { + bidResponse.tbd = adUnit.tbd; + } } bidmanager.addBidResponse(bid.placementCode, bidResponse); } @@ -196,6 +210,9 @@ var OpenxAdapter = function OpenxAdapter() { params.auid = utils._map(bids, (function (bid) { return bid.params.unit; })).join('%2C'); + params.dddid = utils._map(bids, (function (bid) { + return bid.transactionId; + })).join('%2C'); params.aus = utils._map(bids, (function (bid) { return utils.parseSizesInput(bid.sizes).join(','); })).join('|'); @@ -208,16 +225,21 @@ var OpenxAdapter = function OpenxAdapter() { } })); - params.callback = 'window.pbjs.oxARJResponse'; - var queryString = buildQueryStringFromParams(params); - - adloader.loadScript('//' + delDomain + '/w/1.0/arj?' + queryString); + try { + var queryString = buildQueryStringFromParams(params); + var url = '//' + delDomain + '/w/1.0/arj?' + queryString; + ajax.ajax(url, oxARJResponse, void 0, { + withCredentials: true + }); + } catch (err) { + utils.logMessage('Ajax call failed due to ' + err); + } } function callBids(params) { - var isIfr = void 0, - bids = params.bids || [], - currentURL = window.parent !== window ? document.referrer : window.location.href; + var isIfr = void 0; + var bids = params.bids || []; + var currentURL = window.parent !== window ? document.referrer : window.location.href; currentURL = currentURL && encodeURIComponent(currentURL); try { isIfr = window.self !== window.top; @@ -231,6 +253,9 @@ var OpenxAdapter = function OpenxAdapter() { var delDomain = bids[0].params.delDomain; startTime = new Date(params.start); + if (params.timeout) { + timeout = params.timeout; + } buildRequest(bids, { ju: currentURL, @@ -242,7 +267,8 @@ var OpenxAdapter = function OpenxAdapter() { tws: getViewportDimensions(isIfr), ef: 'bt%2Cdb', be: 1, - bc: BIDDER_CONFIG + bc: BIDDER_CONFIG + '_' + BIDDER_VERSION, + nocache: new Date().getTime() }, delDomain); } @@ -257,4 +283,4 @@ module.exports = OpenxAdapter; /***/ }) -},[137]); \ No newline at end of file +},[153]); \ No newline at end of file diff --git a/build/dist/piximediaBidAdapter.js b/build/dist/piximediaBidAdapter.js index 6eb756e1cdd..d0e72007856 100644 --- a/build/dist/piximediaBidAdapter.js +++ b/build/dist/piximediaBidAdapter.js @@ -1,30 +1,32 @@ -pbjsChunk([39],{ +pbjsChunk([42],{ -/***/ 139: +/***/ 155: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(140); +module.exports = __webpack_require__(156); /***/ }), -/***/ 140: +/***/ 156: /***/ (function(module, exports, __webpack_require__) { "use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + var CONSTANTS = __webpack_require__(4); var utils = __webpack_require__(0); var bidmanager = __webpack_require__(2); var bidfactory = __webpack_require__(3); var adloader = __webpack_require__(5); -var Adapter = __webpack_require__(7); +var Adapter = __webpack_require__(7)['default']; var adaptermanager = __webpack_require__(1); var PiximediaAdapter = function PiximediaAdapter() { var PREBID_URL = '//static.adserver.pm/prebid'; - var baseAdapter = Adapter.createNew('piximedia'); + var baseAdapter = new Adapter('piximedia'); var bidStash = {}; var tryAppendPixiQueryString = function tryAppendPixiQueryString(url, name, value) { @@ -155,11 +157,11 @@ var PiximediaAdapter = function PiximediaAdapter() { }; // return an object with PiximediaAdapter methods - return { + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode, getBidderCode: baseAdapter.getBidderCode - }; + }); }; adaptermanager.registerBidAdapter(new PiximediaAdapter(), 'piximedia'); @@ -168,4 +170,4 @@ module.exports = PiximediaAdapter; /***/ }) -},[139]); \ No newline at end of file +},[155]); \ No newline at end of file diff --git a/build/dist/platformioBidAdapter.js b/build/dist/platformioBidAdapter.js new file mode 100644 index 00000000000..5ceaaa6a215 --- /dev/null +++ b/build/dist/platformioBidAdapter.js @@ -0,0 +1,83 @@ +pbjsChunk([41],{ + +/***/ 157: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(158); + + +/***/ }), + +/***/ 158: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var bidfactory = __webpack_require__(3); +var bidmanager = __webpack_require__(2); +var adloader = __webpack_require__(5); +var utils = __webpack_require__(0); +var CONSTANTS = __webpack_require__(4); +var adaptermanager = __webpack_require__(1); + +var PlatformIOAdapter = function PlatformIOAdapter() { + function _callBids(params) { + var bidURL; + var bids = params.bids || []; + var requestURL = window.location.protocol + '//js.adx1.com/pb_ortb.js?cb=' + new Date().getTime() + '&ver=1&'; + + for (var i = 0; i < bids.length; i++) { + var requestParams = {}; + var bid = bids[i]; + + requestParams.pub_id = bid.params.pubId; + requestParams.site_id = bid.params.siteId; + requestParams.placement_id = bid.placementCode; + + var parseSized = utils.parseSizesInput(bid.sizes); + var arrSize = parseSized[0].split('x'); + + requestParams.width = arrSize[0]; + requestParams.height = arrSize[1]; + requestParams.callback = 'pbjs._doPlatformIOCallback'; + requestParams.callback_uid = bid.bidId; + bidURL = requestURL + utils.parseQueryStringParameters(requestParams); + + utils.logMessage('PlatformIO.prebid, Bid ID: ' + bid.bidId + ', Pub ID: ' + bid.params.pubId); + adloader.loadScript(bidURL); + } + } + + pbjs._doPlatformIOCallback = function (response) { + var bidObject; + var bidRequest; + var callbackID; + callbackID = response.callback_uid; + bidRequest = utils.getBidRequest(callbackID); + if (response.cpm > 0) { + bidObject = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidRequest); + bidObject.bidderCode = 'platformio'; + bidObject.cpm = response.cpm; + bidObject.ad = response.tag; + bidObject.width = response.width; + bidObject.height = response.height; + } else { + bidObject = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bidRequest); + bidObject.bidderCode = 'platformio'; + utils.logMessage('No Bid response from Platformio request: ' + callbackID); + } + bidmanager.addBidResponse(bidRequest.placementCode, bidObject); + }; + + return { + callBids: _callBids + }; +}; +adaptermanager.registerBidAdapter(new PlatformIOAdapter(), 'platformio'); + +module.exports = PlatformIOAdapter; + +/***/ }) + +},[157]); \ No newline at end of file diff --git a/build/dist/polluxBidAdapter.js b/build/dist/polluxBidAdapter.js new file mode 100644 index 00000000000..883c0d514c7 --- /dev/null +++ b/build/dist/polluxBidAdapter.js @@ -0,0 +1,136 @@ +pbjsChunk([40],{ + +/***/ 159: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(160); + + +/***/ }), + +/***/ 160: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _bidfactory = __webpack_require__(3); + +var _bidfactory2 = _interopRequireDefault(_bidfactory); + +var _bidmanager = __webpack_require__(2); + +var _bidmanager2 = _interopRequireDefault(_bidmanager); + +var _utils = __webpack_require__(0); + +var utils = _interopRequireWildcard(_utils); + +var _adloader = __webpack_require__(5); + +var _adloader2 = _interopRequireDefault(_adloader); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +var _constants = __webpack_require__(4); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +// Prebid adapter for Pollux header bidding client +function PolluxBidAdapter() { + function _callBids(params) { + var bidderUrl = window.location.protocol + '//adn.plxnt.com/prebid'; + var bids = params.bids || []; + for (var i = 0; i < bids.length; i++) { + var request_obj = {}; + var bid = bids[i]; + // check params + if (bid.params.zone) { + var domain = utils.getParameterByName('domain'); + var tracker2 = utils.getParameterByName('tracker2'); + if (domain) { + request_obj.domain = domain; + } else { + request_obj.domain = window.location.host; + } + if (tracker2) { + request_obj.tracker2 = tracker2; + } + request_obj.zone = bid.params.zone; + } else { + utils.logError('required param "zone" is missing', 'polluxHandler'); + continue; + } + var parsedSizes = utils.parseSizesInput(bid.sizes); + var parsedSizesLength = parsedSizes.length; + if (parsedSizesLength > 0) { + // first value should be "size" + request_obj.size = parsedSizes[0]; + if (parsedSizesLength > 1) { + // any subsequent values should be "promo_sizes" + var promo_sizes = []; + for (var j = 1; j < parsedSizesLength; j++) { + promo_sizes.push(parsedSizes[j]); + } + request_obj.promo_sizes = promo_sizes.join(','); + } + } + // detect urls + request_obj.callback_id = bid.bidId; + // set a different url bidder + if (bid.bidderUrl) { + bidderUrl = bid.bidderUrl; + } + var prebidUrl = bidderUrl + '?' + utils.parseQueryStringParameters(request_obj); + utils.logMessage('Pollux request built: ' + prebidUrl); + _adloader2['default'].loadScript(prebidUrl, null, true); + } + } + + // expose the callback to global object + function _polluxHandler(response) { + // pollux handler + var bidObject = {}; + var callback_id = response.callback_id; + var placementCode = ''; + var bidObj = utils.getBidRequest(callback_id); + if (bidObj) { + placementCode = bidObj.placementCode; + } + if (bidObj && response.cpm > 0 && !!response.ad) { + bidObject = _bidfactory2['default'].createBid(_constants.STATUS.GOOD, bidObj); + bidObject.bidderCode = bidObj.bidder; + bidObject.mediaType = response.mediaType; + bidObject.cpm = parseFloat(response.cpm); + if (response.ad_type === 'url') { + bidObject.adUrl = response.ad; + } else { + bidObject.ad = response.ad; + } + bidObject.width = response.width; + bidObject.height = response.height; + } else { + bidObject = _bidfactory2['default'].createBid(_constants.STATUS.NO_BID, bidObj); + bidObject.bidderCode = 'pollux'; + utils.logMessage('No prebid response from polluxHandler for placement code ' + placementCode); + } + _bidmanager2['default'].addBidResponse(placementCode, bidObject); + }; + pbjs.polluxHandler = _polluxHandler; + // Export the `callBids` function, so that Prebid.js can execute + // this function when the page asks to send out bid requests. + return { + callBids: _callBids, + polluxHandler: _polluxHandler + }; +}; +_adaptermanager2['default'].registerBidAdapter(new PolluxBidAdapter(), 'pollux'); +module.exports = PolluxBidAdapter; + +/***/ }) + +},[159]); \ No newline at end of file diff --git a/build/dist/prebid-core.js b/build/dist/prebid-core.js index dcbc09cf35a..cb4f8553ce7 100644 --- a/build/dist/prebid-core.js +++ b/build/dist/prebid-core.js @@ -1,5 +1,5 @@ -/* prebid.js v0.27.0-pre -Updated : 2017-07-28 */ +/* prebid.js v0.28.0-pre +Updated : 2017-08-24 */ /******/ (function(modules) { // webpackBootstrap /******/ // install a JSONP callback for chunk loading /******/ var parentJsonpFunction = window["pbjsChunk"]; @@ -36,7 +36,7 @@ Updated : 2017-07-28 */ /******/ /******/ // objects to store loaded and loading chunks /******/ var installedChunks = { -/******/ 86: 0 +/******/ 95: 0 /******/ }; /******/ /******/ // The require function @@ -108,7 +108,7 @@ Updated : 2017-07-28 */ /******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 215); +/******/ return __webpack_require__(__webpack_require__.s = 235); /******/ }) /************************************************************************/ /******/ ([ @@ -143,11 +143,11 @@ exports.isSafariBrowser = isSafariBrowser; exports.replaceAuctionPrice = replaceAuctionPrice; exports.getBidderRequestAllAdUnits = getBidderRequestAllAdUnits; exports.getBidderRequest = getBidderRequest; -var CONSTANTS = __webpack_require__(4); +exports.groupBy = groupBy; + +var _config = __webpack_require__(10); -var objectType_object = 'object'; -var objectType_string = 'string'; -var objectType_number = 'number'; +var CONSTANTS = __webpack_require__(4); var _loggingChecked = false; @@ -259,7 +259,7 @@ function parseSizesInput(sizeObj) { var parsedSizes = []; // if a string for now we can assume it is a single size, like "300x250" - if ((typeof sizeObj === 'undefined' ? 'undefined' : _typeof(sizeObj)) === objectType_string) { + if (typeof sizeObj === 'string') { // multiple sizes will be comma-separated var sizes = sizeObj.split(','); @@ -273,13 +273,13 @@ function parseSizesInput(sizeObj) { } } } - } else if ((typeof sizeObj === 'undefined' ? 'undefined' : _typeof(sizeObj)) === objectType_object) { + } else if ((typeof sizeObj === 'undefined' ? 'undefined' : _typeof(sizeObj)) === 'object') { var sizeArrayLength = sizeObj.length; // don't process empty array if (sizeArrayLength > 0) { // if we are a 2 item array of 2 numbers, we must be a SingleSize array - if (sizeArrayLength === 2 && _typeof(sizeObj[0]) === objectType_number && _typeof(sizeObj[1]) === objectType_number) { + if (sizeArrayLength === 2 && typeof sizeObj[0] === 'number' && typeof sizeObj[1] === 'number') { parsedSizes.push(parseGPTSingleSizeArray(sizeObj)); } else { // otherwise, we must be a MultiSize array @@ -360,12 +360,13 @@ var errLogFn = (function (hasLogger) { })(hasConsoleLogger()); var debugTurnedOn = function debugTurnedOn() { - if (pbjs.logging === false && _loggingChecked === false) { - pbjs.logging = getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; + if (_config.config.getConfig('debug') === false && _loggingChecked === false) { + var debug = getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; + _config.config.setConfig({ debug: debug }); _loggingChecked = true; } - return !!pbjs.logging; + return !!_config.config.getConfig('debug'); }; exports.debugTurnedOn = debugTurnedOn; @@ -410,6 +411,8 @@ var getParameterByName = function getParameterByName(name) { return decodeURIComponent(results[1].replace(/\+/g, ' ')); }; +exports.getParameterByName = getParameterByName; + /** * This function validates paramaters. * @param {object[string]} paramObj [description] @@ -825,6 +828,21 @@ function getBidderRequest(bidder, adUnitCode) { })) || { start: null, requestId: null }; } +/** + * + * https://stackoverflow.com/a/34890276/428704 + * @export + * @param {array} xs + * @param {string} key + * @returns {${key_value}: ${groupByArray}, key_value: {groupByArray}} + */ +function groupBy(xs, key) { + return xs.reduce((function (rv, x) { + (rv[x[key]] = rv[x[key]] || []).push(x); + return rv; + }), {}); +} + /***/ })), /* 1 */ /***/ (function(module, exports, __webpack_require__) { @@ -832,15 +850,15 @@ function getBidderRequest(bidder, adUnitCode) { "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** @module adaptermanger */ var _utils = __webpack_require__(0); -var _sizeMapping = __webpack_require__(43); +var _sizeMapping = __webpack_require__(45); + +var _native = __webpack_require__(13); -var _native = __webpack_require__(12); +var _storagemanager = __webpack_require__(18); var utils = __webpack_require__(0); var CONSTANTS = __webpack_require__(4); @@ -855,8 +873,16 @@ var _s2sConfig = { adapter: CONSTANTS.S2S.ADAPTER, syncEndpoint: CONSTANTS.S2S.SYNC_ENDPOINT }; + +var RANDOM = 'random'; +var FIXED = 'fixed'; + +var VALID_ORDERS = {}; +VALID_ORDERS[RANDOM] = true; +VALID_ORDERS[FIXED] = true; + var _analyticsRegistry = {}; -var _bidderSequence = null; +var _bidderSequence = RANDOM; function getBids(_ref) { var bidderCode = _ref.bidderCode, @@ -914,7 +940,8 @@ exports.callBids = function (_ref2) { events.emit(CONSTANTS.EVENTS.AUCTION_INIT, auctionInit); var bidderCodes = (0, _utils.getBidderCodes)(adUnits); - if (_bidderSequence === CONSTANTS.ORDER.RANDOM) { + var syncedBidders = _storagemanager.StorageManager.get(_storagemanager.pbjsSyncsKey); + if (_bidderSequence === RANDOM) { bidderCodes = (0, _utils.shuffle)(bidderCodes); } @@ -926,7 +953,9 @@ exports.callBids = function (_ref2) { if (_s2sConfig.enabled) { // these are called on the s2s adapter - var adaptersServerSide = _s2sConfig.bidders; + var adaptersServerSide = _s2sConfig.bidders.filter((function (bidder) { + return syncedBidders.includes(bidder); + })); // don't call these client side bidderCodes = bidderCodes.filter((function (elm) { @@ -975,7 +1004,9 @@ exports.callBids = function (_ref2) { var s2sBidRequest = { tid: tid, 'ad_units': adUnitsCopy }; utils.logMessage('CALLING S2S HEADER BIDDERS ==== ' + adaptersServerSide.join(',')); - s2sAdapter.callBids(s2sBidRequest); + if (s2sBidRequest.ad_units.length) { + s2sAdapter.callBids(s2sBidRequest); + } } bidderCodes.forEach((function (bidderCode) { @@ -1025,7 +1056,7 @@ exports.registerBidAdapter = function (bidAdaptor, bidderCode) { supportedMediaTypes = _ref3$supportedMediaT === undefined ? [] : _ref3$supportedMediaT; if (bidAdaptor && bidderCode) { - if (_typeof(bidAdaptor.callBids) === CONSTANTS.objectType_function) { + if (typeof bidAdaptor.callBids === 'function') { _bidderRegistry[bidderCode] = bidAdaptor; if (supportedMediaTypes.includes('video')) { @@ -1045,15 +1076,14 @@ exports.registerBidAdapter = function (bidAdaptor, bidderCode) { exports.aliasBidAdapter = function (bidderCode, alias) { var existingAlias = _bidderRegistry[alias]; - if ((typeof existingAlias === 'undefined' ? 'undefined' : _typeof(existingAlias)) === CONSTANTS.objectType_undefined) { + if (typeof existingAlias === 'undefined') { var bidAdaptor = _bidderRegistry[bidderCode]; - if ((typeof bidAdaptor === 'undefined' ? 'undefined' : _typeof(bidAdaptor)) === CONSTANTS.objectType_undefined) { + if (typeof bidAdaptor === 'undefined') { utils.logError('bidderCode "' + bidderCode + '" is not an existing bidder.', 'adaptermanager.aliasBidAdapter'); } else { try { - var newAdapter = null; - newAdapter = bidAdaptor.createNew(); + var newAdapter = new bidAdaptor.constructor(); newAdapter.setBidderCode(alias); this.registerBidAdapter(newAdapter, alias); } catch (e) { @@ -1070,7 +1100,7 @@ exports.registerAnalyticsAdapter = function (_ref4) { code = _ref4.code; if (adapter && code) { - if (_typeof(adapter.enableAnalytics) === CONSTANTS.objectType_function) { + if (typeof adapter.enableAnalytics === 'function') { adapter.code = code; _analyticsRegistry[code] = adapter; } else { @@ -1097,7 +1127,11 @@ exports.enableAnalytics = function (config) { }; exports.setBidderSequence = function (order) { - _bidderSequence = order; + if (VALID_ORDERS[order]) { + _bidderSequence = order; + } else { + utils.logWarn('Invalid order: ' + order + '. Bidder Sequence was not set.'); + } }; exports.setS2SConfig = function (config) { @@ -1111,36 +1145,30 @@ exports.setS2SConfig = function (config) { "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; +var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); + var _utils = __webpack_require__(0); -var _cpmBucketManager = __webpack_require__(24); +var _cpmBucketManager = __webpack_require__(26); + +var _native = __webpack_require__(13); -var _native = __webpack_require__(12); +var _videoCache = __webpack_require__(44); -var _videoCache = __webpack_require__(42); +var _Renderer = __webpack_require__(17); -var _Renderer = __webpack_require__(16); +var _config = __webpack_require__(10); var CONSTANTS = __webpack_require__(4); var AUCTION_END = CONSTANTS.EVENTS.AUCTION_END; var utils = __webpack_require__(0); var events = __webpack_require__(8); -var objectType_function = 'function'; - var externalCallbacks = { byAdUnit: [], all: [], oneTime: null, timer: false }; -var _granularity = CONSTANTS.GRANULARITY_OPTIONS.MEDIUM; -var _customPriceBucket = void 0; var defaultBidderSettingsMap = {}; -exports.setCustomPriceBucket = function (customConfig) { - _customPriceBucket = customConfig; -}; - /** * Returns a list of bidders that we haven't received a response yet * @return {array} [description] @@ -1232,25 +1260,56 @@ exports.addBidResponse = function (adUnitCode, bid) { return 'Invalid bid from ' + bid.bidderCode + '. Ignoring bid: ' + msg; } - if (!adUnitCode) { - utils.logWarn('No adUnitCode was supplied to addBidResponse.'); + if (!bid) { + utils.logError('Some adapter tried to add an undefined bid for ' + adUnitCode + '.'); return false; } - if (!bid) { - utils.logWarn('Some adapter tried to add an undefined bid for ' + adUnitCode + '.'); + if (!adUnitCode) { + utils.logError(errorMessage('No adUnitCode was supplied to addBidResponse.')); return false; } if (bid.mediaType === 'native' && !(0, _native.nativeBidIsValid)(bid)) { utils.logError(errorMessage('Native bid missing some required properties.')); return false; } - if (bid.mediaType === 'video' && !bid.vastUrl) { - utils.logError(errorMessage('Video bid does not have required vastUrl property.')); + if (bid.mediaType === 'video' && !(bid.vastUrl || bid.vastPayload)) { + utils.logError(errorMessage('Video bid has no vastUrl or vastPayload property.')); + return false; + } + if (bid.mediaType === 'banner' && !validBidSize(bid)) { + utils.logError(errorMessage('Banner bids require a width and height')); return false; } + return true; } + // check that the bid has a width and height set + function validBidSize(bid) { + if ((bid.width || bid.width === 0) && (bid.height || bid.height === 0)) { + return true; + } + + var adUnit = (0, _utils.getBidderRequest)(bid.bidderCode, adUnitCode); + var sizes = adUnit && adUnit.bids && adUnit.bids[0] && adUnit.bids[0].sizes; + var parsedSizes = utils.parseSizesInput(sizes); + + // if a banner impression has one valid size, we assign that size to any bid + // response that does not explicitly set width or height + if (parsedSizes.length === 1) { + var _parsedSizes$0$split = parsedSizes[0].split('x'), + _parsedSizes$0$split2 = _slicedToArray(_parsedSizes$0$split, 2), + width = _parsedSizes$0$split2[0], + height = _parsedSizes$0$split2[1]; + + bid.width = width; + bid.height = height; + return true; + } + + return false; + } + // Postprocess the bids so that all the universal properties exist, no matter which bidder they came from. // This should be called before addBidToAuction(). function prepareBidForAuction() { @@ -1287,7 +1346,7 @@ exports.addBidResponse = function (adUnitCode, bid) { bid.renderer.setRender(adUnitRenderer.render); } - var priceStringsObj = (0, _cpmBucketManager.getPriceBucketString)(bid.cpm, _customPriceBucket); + var priceStringsObj = (0, _cpmBucketManager.getPriceBucketString)(bid.cpm, _config.config.getConfig('customPriceBucket')); bid.pbLg = priceStringsObj.low; bid.pbMg = priceStringsObj.med; bid.pbHg = priceStringsObj.high; @@ -1328,15 +1387,23 @@ exports.addBidResponse = function (adUnitCode, bid) { // Video bids may fail if the cache is down, or there's trouble on the network. function tryAddVideoBid(bid) { - (0, _videoCache.store)([bid], (function (error, cacheIds) { - if (error) { - utils.logWarn('Failed to save to the video cache: ' + error + '. Video bid must be discarded.'); - } else { - bid.videoCacheKey = cacheIds[0].uuid; - addBidToAuction(bid); - } + if (_config.config.getConfig('usePrebidCache')) { + (0, _videoCache.store)([bid], (function (error, cacheIds) { + if (error) { + utils.logWarn('Failed to save to the video cache: ' + error + '. Video bid must be discarded.'); + } else { + bid.videoCacheKey = cacheIds[0].uuid; + if (!bid.vastUrl) { + bid.vastUrl = (0, _videoCache.getCacheUrl)(bid.videoCacheKey); + } + addBidToAuction(bid); + } + doCallbacksIfNeeded(); + })); + } else { + addBidToAuction(bid); doCallbacksIfNeeded(); - })); + } } }; @@ -1351,20 +1418,18 @@ function getKeyValueTargetingPairs(bidderCode, custBidObj) { setKeys(keyValues, standardSettings, custBidObj); } - // 2) set keys from specific bidder setting override if they exist if (bidderCode && custBidObj && bidder_settings && bidder_settings[bidderCode] && bidder_settings[bidderCode][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { + // 2) set keys from specific bidder setting override if they exist setKeys(keyValues, bidder_settings[bidderCode], custBidObj); custBidObj.alwaysUseBid = bidder_settings[bidderCode].alwaysUseBid; custBidObj.sendStandardTargeting = bidder_settings[bidderCode].sendStandardTargeting; + } else if (defaultBidderSettingsMap[bidderCode]) { + // 2) set keys from standard setting. NOTE: this API doesn't seem to be in use by any Adapter + setKeys(keyValues, defaultBidderSettingsMap[bidderCode], custBidObj); + custBidObj.alwaysUseBid = defaultBidderSettingsMap[bidderCode].alwaysUseBid; + custBidObj.sendStandardTargeting = defaultBidderSettingsMap[bidderCode].sendStandardTargeting; } - // 2) set keys from standard setting. NOTE: this API doesn't seem to be in use by any Adapter - else if (defaultBidderSettingsMap[bidderCode]) { - setKeys(keyValues, defaultBidderSettingsMap[bidderCode], custBidObj); - custBidObj.alwaysUseBid = defaultBidderSettingsMap[bidderCode].alwaysUseBid; - custBidObj.sendStandardTargeting = defaultBidderSettingsMap[bidderCode].sendStandardTargeting; - } - // set native key value targeting if (custBidObj.native) { Object.keys(custBidObj.native).forEach((function (asset) { @@ -1414,18 +1479,6 @@ function setKeys(keyValues, bidderSettings, custBidObj) { return keyValues; } -exports.setPriceGranularity = function setPriceGranularity(granularity) { - var granularityOptions = CONSTANTS.GRANULARITY_OPTIONS; - if (Object.keys(granularityOptions).filter((function (option) { - return granularity === granularityOptions[option]; - }))) { - _granularity = granularity; - } else { - utils.logWarn('Prebid Warning: setPriceGranularity was called with invalid setting, using' + ' `medium` as default.'); - _granularity = CONSTANTS.GRANULARITY_OPTIONS.MEDIUM; - } -}; - exports.registerDefaultBidderSetting = function (bidderCode, defaultSetting) { defaultBidderSettingsMap[bidderCode] = defaultSetting; }; @@ -1531,7 +1584,7 @@ function adjustBids(bid) { var code = bid.bidderCode; var bidPriceAdjusted = bid.cpm; if (code && pbjs.bidderSettings && pbjs.bidderSettings[code]) { - if (_typeof(pbjs.bidderSettings[code].bidCpmAdjustment) === objectType_function) { + if (typeof pbjs.bidderSettings[code].bidCpmAdjustment === 'function') { try { bidPriceAdjusted = pbjs.bidderSettings[code].bidCpmAdjustment.call(null, bid.cpm, _extends({}, bid)); } catch (e) { @@ -1550,6 +1603,7 @@ exports.adjustBids = function () { }; function getStandardBidderSettings() { + var granularity = _config.config.getConfig('priceGranularity'); var bidder_settings = pbjs.bidderSettings; if (!bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]) { bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD] = { @@ -1566,17 +1620,17 @@ function getStandardBidderSettings() { }, { key: 'hb_pb', val: function val(bidResponse) { - if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.AUTO) { + if (granularity === CONSTANTS.GRANULARITY_OPTIONS.AUTO) { return bidResponse.pbAg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.DENSE) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.DENSE) { return bidResponse.pbDg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.LOW) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.LOW) { return bidResponse.pbLg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.MEDIUM) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.MEDIUM) { return bidResponse.pbMg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.HIGH) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.HIGH) { return bidResponse.pbHg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.CUSTOM) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.CUSTOM) { return bidResponse.pbCg; } } @@ -1634,6 +1688,7 @@ function Bid(statusCode, bidRequest) { this.height = 0; this.statusMessage = _getStatus(); this.adId = _bidId; + this.mediaType = 'banner'; function _getStatus() { switch (_statusCode) { @@ -1678,7 +1733,7 @@ module.exports = { "ADSERVER_TARGETING": "adserverTargeting", "BD_SETTING_STANDARD": "standard" }, - "REPO_AND_VERSION": "prebid_prebid_0.27.0-pre", + "REPO_AND_VERSION": "prebid_prebid_0.28.0-pre", "DEBUG_MODE": "pbjs_debug", "STATUS": { "GOOD": 1, @@ -1692,11 +1747,6 @@ module.exports = { "REQUEST_BIDS": "requestBids" } }, - "objectType_function": "function", - "objectType_undefined": "undefined", - "objectType_object": "object", - "objectType_string": "string", - "objectType_number": "number", "EVENTS": { "AUCTION_INIT": "auctionInit", "AUCTION_END": "auctionEnd", @@ -1711,9 +1761,6 @@ module.exports = { "EVENT_ID_PATHS": { "bidWon": "adUnitCode" }, - "ORDER": { - "RANDOM": "random" - }, "GRANULARITY_OPTIONS": { "LOW": "low", "MEDIUM": "medium", @@ -1733,7 +1780,8 @@ module.exports = { "DEFAULT_ENDPOINT": "https://prebid.adnxs.com/pbs/v1/auction", "SRC": "s2s", "ADAPTER": "prebidServer", - "SYNC_ENDPOINT": "https://prebid.adnxs.com/pbs/v1/cookie_sync" + "SYNC_ENDPOINT": "https://prebid.adnxs.com/pbs/v1/cookie_sync", + "SYNCED_BIDDERS_KEY": "pbjsSyncs" } }; @@ -1788,12 +1836,10 @@ exports.loadScript = function (tagSrc, callback, cacheRequest) { } })); } + } else { + // trigger one time request + requestResource(tagSrc, callback); } - - // trigger one time request - else { - requestResource(tagSrc, callback); - } }; function requestResource(tagSrc, callback) { @@ -1846,7 +1892,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol exports.setAjaxTimeout = setAjaxTimeout; exports.ajax = ajax; -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); var utils = __webpack_require__(0); @@ -1960,6 +2006,10 @@ function ajax(url, callback, data) { "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = Adapter; function Adapter(code) { var bidderCode = code; @@ -1980,10 +2030,6 @@ function Adapter(code) { }; } -exports.createNew = function (bidderCode) { - return new Adapter(bidderCode); -}; - /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { @@ -2152,6 +2198,276 @@ module.exports = (function () { "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.config = undefined; + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* + * Module for getting and setting Prebid configuration. + * + * Prebid previously defined these properties directly on the global object: + * pbjs.logging = true; + * + * Defining and access properties in this way is now deprecated, but these will + * continue to work during a deprecation window. + */ + + +exports.newConfig = newConfig; + +var _cpmBucketManager = __webpack_require__(26); + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var utils = __webpack_require__(0); + +var DEFAULT_DEBUG = false; +var DEFAULT_BIDDER_TIMEOUT = 3000; +var DEFAULT_PUBLISHER_DOMAIN = window.location.origin; +var DEFAULT_COOKIESYNC_DELAY = 100; +var DEFAULT_ENABLE_SEND_ALL_BIDS = false; + +var GRANULARITY_OPTIONS = { + 'LOW': 'low', + 'MEDIUM': 'medium', + 'HIGH': 'high', + 'AUTO': 'auto', + 'DENSE': 'dense', + 'CUSTOM': 'custom' +}; + +var ALL_TOPICS = '*'; + +/** + * @typedef {object} PrebidConfig + * + * @property {bool} usePrebidCache True if we should use prebid-cache to store video bids before adding + * bids to the auction, and false otherwise. **NOTE** This must be true if you want to use the + * dfpAdServerVideo module. + */ + +function newConfig() { + var listeners = []; + + var config = { + // `debug` is equivalent to legacy `pbjs.logging` property + _debug: DEFAULT_DEBUG, + get debug() { + if (pbjs.logging || pbjs.logging === false) { + return pbjs.logging; + } + return this._debug; + }, + set debug(val) { + this._debug = val; + }, + + // default timeout for all bids + _bidderTimeout: DEFAULT_BIDDER_TIMEOUT, + get bidderTimeout() { + return pbjs.bidderTimeout || this._bidderTimeout; + }, + set bidderTimeout(val) { + this._bidderTimeout = val; + }, + + // domain where prebid is running for cross domain iframe communication + _publisherDomain: DEFAULT_PUBLISHER_DOMAIN, + get publisherDomain() { + return pbjs.publisherDomain || this._publisherDomain; + }, + set publisherDomain(val) { + this._publisherDomain = val; + }, + + // delay to request cookie sync to stay out of critical path + _cookieSyncDelay: DEFAULT_COOKIESYNC_DELAY, + get cookieSyncDelay() { + return pbjs.cookieSyncDelay || this._cookieSyncDelay; + }, + set cookieSyncDelay(val) { + this._cookieSyncDelay = val; + }, + + // calls existing function which may be moved after deprecation + _priceGranularity: GRANULARITY_OPTIONS.MEDIUM, + set priceGranularity(val) { + if (validatePriceGranularity(val)) { + if (typeof val === 'string') { + this._priceGranularity = hasGranularity(val) ? val : GRANULARITY_OPTIONS.MEDIUM; + } else if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') { + this._customPriceBucket = val; + this._priceGranularity = GRANULARITY_OPTIONS.MEDIUM; + utils.logMessage('Using custom price granularity'); + } + } + }, + get priceGranularity() { + return this._priceGranularity; + }, + + _customPriceBucket: {}, + get customPriceBucket() { + return this._customPriceBucket; + }, + + _sendAllBids: DEFAULT_ENABLE_SEND_ALL_BIDS, + get enableSendAllBids() { + return this._sendAllBids; + }, + set enableSendAllBids(val) { + this._sendAllBids = val; + }, + + // calls existing function which may be moved after deprecation + set bidderSequence(val) { + pbjs.setBidderSequence(val); + }, + + // calls existing function which may be moved after deprecation + set s2sConfig(val) { + pbjs.setS2SConfig(val); + } + + }; + + function hasGranularity(val) { + return Object.keys(GRANULARITY_OPTIONS).find((function (option) { + return val === GRANULARITY_OPTIONS[option]; + })); + } + + function validatePriceGranularity(val) { + if (!val) { + utils.logError('Prebid Error: no value passed to `setPriceGranularity()`'); + return false; + } + if (typeof val === 'string') { + if (!hasGranularity(val)) { + utils.logWarn('Prebid Warning: setPriceGranularity was called with invalid setting, using `medium` as default.'); + } + } else if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') { + if (!(0, _cpmBucketManager.isValidePriceConfig)(val)) { + utils.logError('Invalid custom price value passed to `setPriceGranularity()`'); + return false; + } + } + return true; + } + + /* + * Returns configuration object if called without parameters, + * or single configuration property if given a string matching a configuartion + * property name. + * + * If called with callback parameter, or a string and a callback parameter, + * subscribes to configuration updates. See `subscribe` function for usage. + */ + function getConfig() { + if (arguments.length <= 1 && typeof (arguments.length <= 0 ? undefined : arguments[0]) !== 'function') { + var option = arguments.length <= 0 ? undefined : arguments[0]; + return option ? config[option] : config; + } + + return subscribe.apply(undefined, arguments); + } + + /* + * Sets configuration given an object containing key-value pairs and calls + * listeners that were added by the `subscribe` function + */ + function setConfig(options) { + if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') { + utils.logError('setConfig options must be an object'); + } + + _extends(config, options); + callSubscribers(options); + } + + /* + * Adds a function to a set of listeners that are invoked whenever `setConfig` + * is called. The subscribed function will be passed the options object that + * was used in the `setConfig` call. Topics can be subscribed to to only get + * updates when specific properties are updated by passing a topic string as + * the first parameter. + * + * Returns an `unsubscribe` function for removing the subscriber from the + * set of listeners + * + * Example use: + * // subscribe to all configuration changes + * subscribe((config) => console.log('config set:', config)); + * + * // subscribe to only 'logging' changes + * subscribe('logging', (config) => console.log('logging set:', config)); + * + * // unsubscribe + * const unsubscribe = subscribe(...); + * unsubscribe(); // no longer listening + */ + function subscribe(topic, listener) { + var callback = listener; + + if (typeof topic !== 'string') { + // first param should be callback function in this case, + // meaning it gets called for any config change + callback = topic; + topic = ALL_TOPICS; + } + + if (typeof callback !== 'function') { + utils.logError('listener must be a function'); + return; + } + + listeners.push({ topic: topic, callback: callback }); + + // save and call this function to remove the listener + return function unsubscribe() { + listeners.splice(listeners.indexOf(listener), 1); + }; + } + + /* + * Calls listeners that were added by the `subscribe` function + */ + function callSubscribers(options) { + var TOPICS = Object.keys(options); + + // call subscribers of a specific topic, passing only that configuration + listeners.filter((function (listener) { + return TOPICS.includes(listener.topic); + })).forEach((function (listener) { + listener.callback(_defineProperty({}, listener.topic, options[listener.topic])); + })); + + // call subscribers that didn't give a topic, passing everything that was set + listeners.filter((function (listener) { + return listener.topic === ALL_TOPICS; + })).forEach((function (listener) { + return listener.callback(options); + })); + } + + return { + getConfig: getConfig, + setConfig: setConfig + }; +} + +var config = exports.config = newConfig(); + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + Object.defineProperty(exports, "__esModule", { value: true }); @@ -2207,14 +2523,14 @@ function format(obj) { } /***/ }), -/* 11 */ +/* 12 */ /***/ (function(module, exports) { var core = module.exports = {version: '2.4.0'}; if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef /***/ }), -/* 12 */ +/* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2238,7 +2554,8 @@ var NATIVE_KEYS = exports.NATIVE_KEYS = { sponsoredBy: 'hb_native_brand', image: 'hb_native_image', icon: 'hb_native_icon', - clickUrl: 'hb_native_linkurl' + clickUrl: 'hb_native_linkurl', + cta: 'hb_native_cta' }; var NATIVE_TARGETING_KEYS = exports.NATIVE_TARGETING_KEYS = Object.keys(NATIVE_KEYS).map((function (key) { @@ -2340,7 +2657,7 @@ function fireNativeImpressions(adObject) { } /***/ }), -/* 13 */ +/* 14 */ /***/ (function(module, exports) { // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 @@ -2349,14 +2666,14 @@ var global = module.exports = typeof window != 'undefined' && window.Math == Mat if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef /***/ }), -/* 14 */ +/* 15 */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(13) - , core = __webpack_require__(11) - , hide = __webpack_require__(18) - , redefine = __webpack_require__(227) - , ctx = __webpack_require__(29) +var global = __webpack_require__(14) + , core = __webpack_require__(12) + , hide = __webpack_require__(20) + , redefine = __webpack_require__(247) + , ctx = __webpack_require__(31) , PROTOTYPE = 'prototype'; var $export = function(type, name, source){ @@ -2397,7 +2714,7 @@ $export.R = 128; // real proto method for `library` module.exports = $export; /***/ }), -/* 15 */ +/* 16 */ /***/ (function(module, exports) { module.exports = function(it){ @@ -2405,7 +2722,7 @@ module.exports = function(it){ }; /***/ }), -/* 16 */ +/* 17 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2509,15 +2826,80 @@ Renderer.prototype.process = function () { }; /***/ }), -/* 17 */ +/* 18 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.StorageManager = exports.pbjsSyncsKey = undefined; +exports.newStorageManager = newStorageManager; + var _utils = __webpack_require__(0); -var _native = __webpack_require__(12); +var pbjsSyncsKey = exports.pbjsSyncsKey = 'pbjsSyncs'; /** + * Storage Manager aims to provide a consistent but concise API to persist data where conditions may require alternatives + * to localStorage (storing as cookie, in indexedDB, etc), or potentially a mechanism for x-domain storage + * + * Only html5 localStorage implemented currently. + * + */ + +function newStorageManager() { + function set(key, item) { + try { + localStorage.setItem(key, JSON.stringify(item)); + } catch (e) { + (0, _utils.logWarn)('could not set storage item: ', e); + } + } + + function get(key) { + try { + var item = JSON.parse(localStorage.getItem(key)); + return item && item.length ? item : []; + } catch (e) { + (0, _utils.logWarn)('could not get storage item: ', e); + return []; + } + } + + return { + get: get, + set: set, + + add: function add(key, element) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + set(key, get(key).concat([element]).filter((function (value, index, array) { + return unique ? array.indexOf(value) === index : true; + }))); + }, + remove: function remove(key, element) { + set(key, get(key).filter((function (value) { + return value !== element; + }))); + } + }; +} + +var StorageManager = exports.StorageManager = newStorageManager(); + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _utils = __webpack_require__(0); + +var _config = __webpack_require__(10); + +var _native = __webpack_require__(13); function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -2552,7 +2934,7 @@ targeting.getAllTargeting = function (adUnitCode) { // Get targeting for the winning bid. Add targeting for any bids that have // `alwaysUseBid=true`. If sending all bids is enabled, add targeting for losing bids. - var targeting = getWinningBidTargeting(adUnitCodes).concat(getAlwaysUseBidTargeting(adUnitCodes)).concat(pbjs._sendAllBids ? getBidLandscapeTargeting(adUnitCodes) : []); + var targeting = getWinningBidTargeting(adUnitCodes).concat(getAlwaysUseBidTargeting(adUnitCodes)).concat(_config.config.getConfig('enableSendAllBids') ? getBidLandscapeTargeting(adUnitCodes) : []); // store a reference of the targeting keys targeting.map((function (adUnitCode) { @@ -2615,12 +2997,7 @@ targeting.getWinningBids = function (adUnitCode) { })).filter(_utils.uniques).map((function (adUnitCode) { return pbjs._bidsReceived.filter((function (bid) { return bid.adUnitCode === adUnitCode ? bid : null; - })).reduce(_utils.getHighestCpm, { - adUnitCode: adUnitCode, - cpm: 0, - adserverTargeting: {}, - timeToRespond: 0 - }); + })).reduce(_utils.getHighestCpm, getEmptyBid(adUnitCode)); })); }; @@ -2689,14 +3066,22 @@ function getAlwaysUseBidTargeting(adUnitCodes) { function getBidLandscapeTargeting(adUnitCodes) { var standardKeys = CONSTANTS.TARGETING_KEYS.concat(_native.NATIVE_TARGETING_KEYS); - - return pbjs._bidsReceived.filter(_utils.adUnitsFilter.bind(this, adUnitCodes)).map((function (bid) { + var bids = []; + // bucket by adUnitcode + var buckets = (0, _utils.groupBy)(pbjs._bidsReceived, 'adUnitCode'); + // filter top bid for each bucket by bidder + Object.keys(buckets).forEach((function (bucketKey) { + var bidsByBidder = (0, _utils.groupBy)(buckets[bucketKey], 'bidderCode'); + Object.keys(bidsByBidder).forEach((function (key) { + return bids.push(bidsByBidder[key].reduce(_utils.getHighestCpm, getEmptyBid())); + })); + })); + // populate targeting keys for the remaining bids + return bids.map((function (bid) { if (bid.adserverTargeting) { return _defineProperty({}, bid.adUnitCode, getTargetingMap(bid, standardKeys.filter((function (key) { return typeof bid.adserverTargeting[key] !== 'undefined'; - })) // mainly for possibly - // unset hb_deal - )); + })))); } })).filter((function (bid) { return bid; @@ -2715,13 +3100,22 @@ targeting.isApntagDefined = function () { } }; +function getEmptyBid(adUnitCode) { + return { + adUnitCode: adUnitCode, + cpm: 0, + adserverTargeting: {}, + timeToRespond: 0 + }; +} + /***/ }), -/* 18 */ +/* 20 */ /***/ (function(module, exports, __webpack_require__) { -var dP = __webpack_require__(221) - , createDesc = __webpack_require__(226); -module.exports = __webpack_require__(19) ? function(object, key, value){ +var dP = __webpack_require__(241) + , createDesc = __webpack_require__(246); +module.exports = __webpack_require__(21) ? function(object, key, value){ return dP.f(object, key, createDesc(1, value)); } : function(object, key, value){ object[key] = value; @@ -2729,16 +3123,16 @@ module.exports = __webpack_require__(19) ? function(object, key, value){ }; /***/ }), -/* 19 */ +/* 21 */ /***/ (function(module, exports, __webpack_require__) { // Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(20)((function(){ +module.exports = !__webpack_require__(22)((function(){ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; })); /***/ }), -/* 20 */ +/* 22 */ /***/ (function(module, exports) { module.exports = function(exec){ @@ -2750,7 +3144,7 @@ module.exports = function(exec){ }; /***/ }), -/* 21 */ +/* 23 */ /***/ (function(module, exports) { var id = 0 @@ -2760,29 +3154,29 @@ module.exports = function(key){ }; /***/ }), -/* 22 */ +/* 24 */ /***/ (function(module, exports, __webpack_require__) { // fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(31); +var cof = __webpack_require__(33); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ return cof(it) == 'String' ? it.split('') : Object(it); }; /***/ }), -/* 23 */ +/* 25 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = __webpack_require__(36)('unscopables') +var UNSCOPABLES = __webpack_require__(38)('unscopables') , ArrayProto = Array.prototype; -if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(18)(ArrayProto, UNSCOPABLES, {}); +if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(20)(ArrayProto, UNSCOPABLES, {}); module.exports = function(key){ ArrayProto[UNSCOPABLES][key] = true; }; /***/ }), -/* 24 */ +/* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2791,6 +3185,8 @@ module.exports = function(key){ Object.defineProperty(exports, "__esModule", { value: true }); +var utils = __webpack_require__(0); + var _defaultPrecision = 2; var _lgPriceConfig = { 'buckets': [{ @@ -2889,7 +3285,7 @@ function getCpmStringValue(cpm, config) { } function isValidePriceConfig(config) { - if (!config || !config.buckets || !Array.isArray(config.buckets)) { + if (utils.isEmpty(config) || !config.buckets || !Array.isArray(config.buckets)) { return false; } var isValid = true; @@ -2913,7 +3309,7 @@ exports.getPriceBucketString = getPriceBucketString; exports.isValidePriceConfig = isValidePriceConfig; /***/ }), -/* 25 */ +/* 27 */ /***/ (function(module, exports) { var g; @@ -2940,7 +3336,7 @@ module.exports = g; /***/ }), -/* 26 */ +/* 28 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2961,7 +3357,7 @@ function getGlobal() { } /***/ }), -/* 27 */ +/* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2975,13 +3371,13 @@ var _adloader = __webpack_require__(5); var _adloader2 = _interopRequireDefault(_adloader); +var _storagemanager = __webpack_require__(18); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } var cookie = exports; - - var queue = []; function fireSyncs() { @@ -2992,11 +3388,16 @@ function fireSyncs() { } else { utils.insertPixel(obj.url); } + setBidderSynced(obj.bidder); })); // empty queue. queue.length = 0; } +function setBidderSynced(bidder) { + _storagemanager.StorageManager.add(_storagemanager.pbjsSyncsKey, bidder, true); +} + /** * Add this bidder to the queue for sync * @param {String} bidder bidder code @@ -3030,7 +3431,7 @@ cookie.cookieSet = function (cookieSetUrl) { }; /***/ }), -/* 28 */ +/* 30 */ /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; @@ -3039,11 +3440,11 @@ module.exports = function(it, key){ }; /***/ }), -/* 29 */ +/* 31 */ /***/ (function(module, exports, __webpack_require__) { // optional / simple context binding -var aFunction = __webpack_require__(228); +var aFunction = __webpack_require__(248); module.exports = function(fn, that, length){ aFunction(fn); if(that === undefined)return fn; @@ -3064,7 +3465,7 @@ module.exports = function(fn, that, length){ }; /***/ }), -/* 30 */ +/* 32 */ /***/ (function(module, exports, __webpack_require__) { // 0 -> Array#forEach @@ -3074,11 +3475,11 @@ module.exports = function(fn, that, length){ // 4 -> Array#every // 5 -> Array#find // 6 -> Array#findIndex -var ctx = __webpack_require__(29) - , IObject = __webpack_require__(22) - , toObject = __webpack_require__(32) - , toLength = __webpack_require__(34) - , asc = __webpack_require__(229); +var ctx = __webpack_require__(31) + , IObject = __webpack_require__(24) + , toObject = __webpack_require__(34) + , toLength = __webpack_require__(36) + , asc = __webpack_require__(249); module.exports = function(TYPE, $create){ var IS_MAP = TYPE == 1 , IS_FILTER = TYPE == 2 @@ -3113,7 +3514,7 @@ module.exports = function(TYPE, $create){ }; /***/ }), -/* 31 */ +/* 33 */ /***/ (function(module, exports) { var toString = {}.toString; @@ -3123,17 +3524,17 @@ module.exports = function(it){ }; /***/ }), -/* 32 */ +/* 34 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.13 ToObject(argument) -var defined = __webpack_require__(33); +var defined = __webpack_require__(35); module.exports = function(it){ return Object(defined(it)); }; /***/ }), -/* 33 */ +/* 35 */ /***/ (function(module, exports) { // 7.2.1 RequireObjectCoercible(argument) @@ -3143,18 +3544,18 @@ module.exports = function(it){ }; /***/ }), -/* 34 */ +/* 36 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.15 ToLength -var toInteger = __webpack_require__(35) +var toInteger = __webpack_require__(37) , min = Math.min; module.exports = function(it){ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; /***/ }), -/* 35 */ +/* 37 */ /***/ (function(module, exports) { // 7.1.4 ToInteger @@ -3165,12 +3566,12 @@ module.exports = function(it){ }; /***/ }), -/* 36 */ +/* 38 */ /***/ (function(module, exports, __webpack_require__) { -var store = __webpack_require__(37)('wks') - , uid = __webpack_require__(21) - , Symbol = __webpack_require__(13).Symbol +var store = __webpack_require__(39)('wks') + , uid = __webpack_require__(23) + , Symbol = __webpack_require__(14).Symbol , USE_SYMBOL = typeof Symbol == 'function'; var $exports = module.exports = function(name){ @@ -3181,10 +3582,10 @@ var $exports = module.exports = function(name){ $exports.store = store; /***/ }), -/* 37 */ +/* 39 */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(13) +var global = __webpack_require__(14) , SHARED = '__core-js_shared__' , store = global[SHARED] || (global[SHARED] = {}); module.exports = function(key){ @@ -3192,14 +3593,14 @@ module.exports = function(key){ }; /***/ }), -/* 38 */ +/* 40 */ /***/ (function(module, exports, __webpack_require__) { // false -> Array#indexOf // true -> Array#includes -var toIObject = __webpack_require__(39) - , toLength = __webpack_require__(34) - , toIndex = __webpack_require__(236); +var toIObject = __webpack_require__(41) + , toLength = __webpack_require__(36) + , toIndex = __webpack_require__(256); module.exports = function(IS_INCLUDES){ return function($this, el, fromIndex){ var O = toIObject($this) @@ -3218,20 +3619,20 @@ module.exports = function(IS_INCLUDES){ }; /***/ }), -/* 39 */ +/* 41 */ /***/ (function(module, exports, __webpack_require__) { // to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(22) - , defined = __webpack_require__(33); +var IObject = __webpack_require__(24) + , defined = __webpack_require__(35); module.exports = function(it){ return IObject(defined(it)); }; /***/ }), -/* 40 */, -/* 41 */, -/* 42 */ +/* 42 */, +/* 43 */, +/* 44 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3241,18 +3642,28 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.store = store; +exports.getCacheUrl = getCacheUrl; var _ajax = __webpack_require__(6); -var PUT_URL = 'https://prebid.adnxs.com/pbc/v1/cache'; +var BASE_URL = 'https://prebid.adnxs.com/pbc/v1/cache'; /** - * These are the properties required on a Bid in order to cache and retrieve it. - * - * @typedef {object} CacheableBid + * @typedef {object} CacheableUrlBid * @property {string} vastUrl A URL which loads some valid VAST XML. */ +/** + * @typedef {object} CacheablePayloadBid + * @property {string} vastPayload Some VAST XML which loads an ad in a video player. + */ + +/** + * A CacheableBid describes the types which the videoCache can store. + * + * @typedef {CacheableUrlBid|CacheablePayloadBid} CacheableBid + */ + /** * Function which wraps a URI that serves VAST XML, so that it can be loaded. * @@ -3284,9 +3695,10 @@ function wrapURI(uri) { * @param {CacheableBid} bid */ function toStorageRequest(bid) { + var vastValue = bid.vastPayload ? bid.vastPayload : wrapURI(bid.vastUrl); return { type: 'xml', - value: wrapURI(bid.vastUrl) + value: vastValue }; } @@ -3320,7 +3732,11 @@ function shimStorageCallback(done) { return; } - done(null, ids); + if (ids) { + done(null, ids); + } else { + done(new Error("The cache server didn't respond with a responses property."), []); + } }, error: function error(statusText, responseBody) { done(new Error('Error storing video ad in the cache: ' + statusText + ': ' + JSON.stringify(responseBody)), []); @@ -3340,14 +3756,18 @@ function store(bids, done) { puts: bids.map(toStorageRequest) }; - (0, _ajax.ajax)(PUT_URL, shimStorageCallback(done), JSON.stringify(requestData), { + (0, _ajax.ajax)(BASE_URL, shimStorageCallback(done), JSON.stringify(requestData), { contentType: 'text/plain', withCredentials: true }); } +function getCacheUrl(id) { + return BASE_URL + '?uuid=' + id; +} + /***/ }), -/* 43 */ +/* 45 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3386,7 +3806,7 @@ function mapSizes(adUnit) { } var sizes = ''; var mapping = adUnit.sizeMapping.find((function (sizeMapping) { - return width > sizeMapping.minWidth; + return width >= sizeMapping.minWidth; })); if (mapping && mapping.sizes && mapping.sizes.length) { sizes = mapping.sizes; @@ -3428,8 +3848,6 @@ exports.getScreenWidth = getScreenWidth; exports.setWindow = setWindow; /***/ }), -/* 44 */, -/* 45 */, /* 46 */, /* 47 */, /* 48 */, @@ -3599,14 +4017,34 @@ exports.setWindow = setWindow; /* 212 */, /* 213 */, /* 214 */, -/* 215 */ +/* 215 */, +/* 216 */, +/* 217 */, +/* 218 */, +/* 219 */, +/* 220 */, +/* 221 */, +/* 222 */, +/* 223 */, +/* 224 */, +/* 225 */, +/* 226 */, +/* 227 */, +/* 228 */, +/* 229 */, +/* 230 */, +/* 231 */, +/* 232 */, +/* 233 */, +/* 234 */, +/* 235 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(216); +module.exports = __webpack_require__(236); /***/ }), -/* 216 */ +/* 236 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3616,45 +4054,43 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -var _prebidGlobal = __webpack_require__(26); +var _prebidGlobal = __webpack_require__(28); var _utils = __webpack_require__(0); -var _video = __webpack_require__(217); - -var _native = __webpack_require__(12); +var _video = __webpack_require__(237); -__webpack_require__(218); +var _native = __webpack_require__(13); -var _url = __webpack_require__(10); +__webpack_require__(238); -var _cpmBucketManager = __webpack_require__(24); +var _url = __webpack_require__(11); -var _secureCreatives = __webpack_require__(246); +var _secureCreatives = __webpack_require__(266); -var _cookie = __webpack_require__(27); +var _cookie = __webpack_require__(29); var _adloader = __webpack_require__(5); var _ajax = __webpack_require__(6); +var _config = __webpack_require__(10); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** @module pbjs */ var pbjs = (0, _prebidGlobal.getGlobal)(); + var CONSTANTS = __webpack_require__(4); var utils = __webpack_require__(0); var bidmanager = __webpack_require__(2); var adaptermanager = __webpack_require__(1); var bidfactory = __webpack_require__(3); var events = __webpack_require__(8); -var adserver = __webpack_require__(247); -var targeting = __webpack_require__(17); +var adserver = __webpack_require__(267); +var targeting = __webpack_require__(19); /* private variables */ -var objectType_function = 'function'; -var objectType_undefined = 'undefined'; -var objectType_object = 'object'; var BID_WON = CONSTANTS.EVENTS.BID_WON; var SET_TARGETING = CONSTANTS.EVENTS.SET_TARGETING; @@ -3673,12 +4109,11 @@ pbjs._bidsReceived = []; pbjs._adUnitCodes = []; pbjs._winningBids = []; pbjs._adsReceived = []; -pbjs._sendAllBids = false; pbjs.bidderSettings = pbjs.bidderSettings || {}; -// default timeout for all bids -pbjs.bidderTimeout = pbjs.bidderTimeout || 3000; +/** @deprecated - use pbjs.setConfig({ bidderTimeout: }) */ +pbjs.bidderTimeout = pbjs.bidderTimeout; // current timeout set in `requestBids` or to default `bidderTimeout` pbjs.cbTimeout = pbjs.cbTimeout || 200; @@ -3686,23 +4121,24 @@ pbjs.cbTimeout = pbjs.cbTimeout || 200; // timeout buffer to adjust for bidder CDN latency pbjs.timeoutBuffer = 200; -pbjs.logging = pbjs.logging || false; +/** @deprecated - use pbjs.setConfig({ debug: }) */ +pbjs.logging = pbjs.logging; -// domain where prebid is running for cross domain iframe communication -pbjs.publisherDomain = pbjs.publisherDomain || window.location.origin; +/** @deprecated - use pbjs.setConfig({ publisherDomain: ) */ +pbjs.publisherDomain = pbjs.publisherDomain; // let the world know we are loaded pbjs.libLoaded = true; // version auto generated from build -pbjs.version = 'v0.27.0-pre'; -utils.logInfo('Prebid.js v0.27.0-pre loaded'); +pbjs.version = 'v0.28.0-pre'; +utils.logInfo('Prebid.js v0.28.0-pre loaded'); // create adUnit array pbjs.adUnits = pbjs.adUnits || []; -// delay to request cookie sync to stay out of critical path -pbjs.cookieSyncDelay = pbjs.cookieSyncDelay || 100; +/** @deprecated - use pbjs.setConfig({ cookieSyncDelay: ) */ +pbjs.cookieSyncDelay = pbjs.cookieSyncDelay; function checkDefinedPlacement(id) { var placementCodes = pbjs._bidsRequested.map((function (bidSet) { @@ -3879,8 +4315,13 @@ pbjs.setTargetingForAst = function () { * Returns a bool if all the bids have returned or timed out * @alias module:pbjs.allBidsAvailable * @return {bool} all bids available + * + * @deprecated This function will be removed in Prebid 1.0 + * Alternative solution is in progress. + * See https://github.com/prebid/Prebid.js/issues/1087 for more details. */ pbjs.allBidsAvailable = function () { + utils.logWarn('pbjs.allBidsAvailable will be removed in Prebid 1.0. Alternative solution is in progress. See https://github.com/prebid/Prebid.js/issues/1087 for more details.'); utils.logInfo('Invoking pbjs.allBidsAvailable', arguments); return bidmanager.bidsBackAll(); }; @@ -3969,7 +4410,7 @@ pbjs.removeAdUnit = function (adUnitCode) { pbjs.clearAuction = function () { auctionRunning = false; - (0, _cookie.syncCookies)(pbjs.cookieSyncDelay); + (0, _cookie.syncCookies)(_config.config.getConfig('cookieSyncDelay')); utils.logMessage('Prebid auction cleared'); if (bidRequestQueue.length) { bidRequestQueue.shift()(); @@ -3991,7 +4432,7 @@ pbjs.requestBids = function () { adUnitCodes = _ref4.adUnitCodes; events.emit('requestBids'); - var cbTimeout = pbjs.cbTimeout = timeout || pbjs.bidderTimeout; + var cbTimeout = pbjs.cbTimeout = timeout || _config.config.getConfig('bidderTimeout'); adUnits = adUnits || pbjs.adUnits; utils.logInfo('Invoking pbjs.requestBids', arguments); @@ -4048,7 +4489,7 @@ pbjs.requestBids = function () { if (!adUnits || adUnits.length === 0) { utils.logMessage('No adUnits configured. No bids requested.'); - if ((typeof bidsBackHandler === 'undefined' ? 'undefined' : _typeof(bidsBackHandler)) === objectType_function) { + if (typeof bidsBackHandler === 'function') { bidmanager.addOneTimeCallback(bidsBackHandler, false); } bidmanager.executeCallback(); @@ -4060,7 +4501,7 @@ pbjs.requestBids = function () { var timeoutCallback = bidmanager.executeCallback.bind(bidmanager, timedOut); var timer = setTimeout(timeoutCallback, cbTimeout); (0, _ajax.setAjaxTimeout)(cbTimeout); - if ((typeof bidsBackHandler === 'undefined' ? 'undefined' : _typeof(bidsBackHandler)) === objectType_function) { + if (typeof bidsBackHandler === 'function') { bidmanager.addOneTimeCallback(bidsBackHandler, timer); } @@ -4085,7 +4526,7 @@ pbjs.addAdUnits = function (adUnitArr) { return adUnit.transactionId = utils.generateUUID(); })); pbjs.adUnits.push.apply(pbjs.adUnits, adUnitArr); - } else if ((typeof adUnitArr === 'undefined' ? 'undefined' : _typeof(adUnitArr)) === objectType_object) { + } else if ((typeof adUnitArr === 'undefined' ? 'undefined' : _typeof(adUnitArr)) === 'object') { // Generate the transaction id for the adunit adUnitArr.transactionId = utils.generateUUID(); pbjs.adUnits.push(adUnitArr); @@ -4142,11 +4583,15 @@ pbjs.offEvent = function (event, handler, id) { * @param {Function} func function to execute. Parameters passed into the function: (bidResObj), [adUnitCode]); * @alias module:pbjs.addCallback * @returns {String} id for callback + * + * @deprecated This function will be removed in Prebid 1.0 + * Please use onEvent instead. */ pbjs.addCallback = function (eventStr, func) { + utils.logWarn('pbjs.addCallback will be removed in Prebid 1.0. Please use onEvent instead'); utils.logInfo('Invoking pbjs.addCallback', arguments); var id = null; - if (!eventStr || !func || (typeof func === 'undefined' ? 'undefined' : _typeof(func)) !== objectType_function) { + if (!eventStr || !func || typeof func !== 'function') { utils.logError('error registering callback. Check method signature'); return id; } @@ -4161,9 +4606,13 @@ pbjs.addCallback = function (eventStr, func) { * //@param {string} cbId id of the callback to remove * @alias module:pbjs.removeCallback * @returns {String} id for callback + * + * @deprecated This function will be removed in Prebid 1.0 + * Please use offEvent instead. */ pbjs.removeCallback = function () /* cbId */{ // todo + utils.logWarn('pbjs.removeCallback will be removed in Prebid 1.0. Please use offEvent instead.'); return null; }; @@ -4224,8 +4673,13 @@ pbjs.createBid = function (statusCode) { * Wrapper to bidmanager.addBidResponse * @param {[type]} adUnitCode [description] * @param {[type]} bid [description] + * + * @deprecated This function will be removed in Prebid 1.0 + * Each bidder will be passed a reference to addBidResponse function in callBids as an argument. + * See https://github.com/prebid/Prebid.js/issues/1087 for more details. */ pbjs.addBidResponse = function (adUnitCode, bid) { + utils.logWarn('pbjs.addBidResponse will be removed in Prebid 1.0. Each bidder will be passed a reference to addBidResponse function in callBids as an argument. See https://github.com/prebid/Prebid.js/issues/1087 for more details.'); utils.logInfo('Invoking pbjs.addBidResponse', arguments); bidmanager.addBidResponse(adUnitCode, bid); }; @@ -4266,6 +4720,7 @@ pbjs.aliasBidder = function (bidderCode, alias) { /** * Sets a default price granularity scheme. * @param {String|Object} granularity - the granularity scheme. + * @deprecated - use pbjs.setConfig({ priceGranularity: }) * "low": $0.50 increments, capped at $5 CPM * "medium": $0.10 increments, capped at $20 CPM (the default) * "high": $0.01 increments, capped at $20 CPM @@ -4277,26 +4732,14 @@ pbjs.aliasBidder = function (bidderCode, alias) { * See http://prebid.org/dev-docs/publisher-api-reference.html#module_pbjs.setPriceGranularity for more details */ pbjs.setPriceGranularity = function (granularity) { + utils.logWarn('pbjs.setPriceGranularity will be removed in Prebid 1.0. Use pbjs.setConfig({ priceGranularity: }) instead.'); utils.logInfo('Invoking pbjs.setPriceGranularity', arguments); - if (!granularity) { - utils.logError('Prebid Error: no value passed to `setPriceGranularity()`'); - return; - } - if (typeof granularity === 'string') { - bidmanager.setPriceGranularity(granularity); - } else if ((typeof granularity === 'undefined' ? 'undefined' : _typeof(granularity)) === 'object') { - if (!(0, _cpmBucketManager.isValidePriceConfig)(granularity)) { - utils.logError('Invalid custom price value passed to `setPriceGranularity()`'); - return; - } - bidmanager.setCustomPriceBucket(granularity); - bidmanager.setPriceGranularity(CONSTANTS.GRANULARITY_OPTIONS.CUSTOM); - utils.logMessage('Using custom price granularity'); - } + _config.config.setConfig({ priceGranularity: granularity }); }; +/** @deprecated - use pbjs.setConfig({ enableSendAllBids: }) */ pbjs.enableSendAllBids = function () { - pbjs._sendAllBids = true; + _config.config.setConfig({ enableSendAllBids: true }); }; pbjs.getAllWinningBids = function () { @@ -4308,12 +4751,11 @@ pbjs.getAllWinningBids = function () { * @param {string} adserverTag default url * @param {object} options options for video tag * - * @deprecated Include the dfpVideoSupport module in your build, and use the - * pbjs.adserver.buildVideoAdUrl (if DFP is your only Ad Server) or - * pbjs.adservers.dfp.buildVideoAdUrl (if you use other Ad Servers too) - * function instead. This function will be removed in Prebid 1.0. + * @deprecated Include the dfpVideoSupport module in your build, and use the pbjs.adservers.dfp.buildVideoAdUrl function instead. + * This function will be removed in Prebid 1.0. */ pbjs.buildMasterVideoTagFromAdserverTag = function (adserverTag, options) { + utils.logWarn('pbjs.buildMasterVideoTagFromAdserverTag will be removed in Prebid 1.0. Include the dfpVideoSupport module in your build, and use the pbjs.adservers.dfp.buildVideoAdUrl function instead'); utils.logInfo('Invoking pbjs.buildMasterVideoTagFromAdserverTag', arguments); var urlComponents = (0, _url.parse)(adserverTag); @@ -4338,16 +4780,17 @@ pbjs.buildMasterVideoTagFromAdserverTag = function (adserverTag, options) { }; /** - * Set the order bidders are called in. If not set, the bidders are called in - * the order they are defined within the adUnit.bids array - * @param {string} order - Order to call bidders in. Currently the only possible value - * is 'random', which randomly shuffles the order + * Set the order bidders are called in. Valid values are: + * + * "fixed": Bidders will be called in the order in which they were defined within the adUnit.bids array. + * "random": Bidders will be called in random order. + * + * If never called, Prebid will use "random" as the default. + * + * @param {string} order One of the valid orders, described above. + * @deprecated - use pbjs.setConfig({ bidderSequence: }) */ -pbjs.setBidderSequence = function (order) { - if (order === CONSTANTS.ORDER.RANDOM) { - adaptermanager.setBidderSequence(CONSTANTS.ORDER.RANDOM); - } -}; +pbjs.setBidderSequence = adaptermanager.setBidderSequence; /** * Get array of highest cpm bids for all adUnits, or highest cpm bid @@ -4361,6 +4804,7 @@ pbjs.getHighestCpmBids = function (adUnitCode) { /** * Set config for server to server header bidding + * @deprecated - use pbjs.setConfig({ s2sConfig: }) * @typedef {Object} options - required * @property {boolean} enabled enables S2S bidding * @property {string[]} bidders bidders to request S2S @@ -4395,6 +4839,18 @@ pbjs.setS2SConfig = function (options) { adaptermanager.setS2SConfig(config); }; +/** + * Get Prebid config options + * @param {object} options + */ +pbjs.getConfig = _config.config.getConfig; + +/** + * Set Prebid config options + * @param {object} options + */ +pbjs.setConfig = _config.config.setConfig; + pbjs.que.push((function () { return (0, _secureCreatives.listenMessagesFromCreative)(); })); @@ -4419,7 +4875,7 @@ pbjs.que.push((function () { * @alias module:pbjs.cmd.push */ pbjs.cmd.push = function (cmd) { - if ((typeof cmd === 'undefined' ? 'undefined' : _typeof(cmd)) === objectType_function) { + if (typeof cmd === 'function') { try { cmd.call(); } catch (e) { @@ -4434,7 +4890,7 @@ pbjs.que.push = pbjs.cmd.push; function processQueue(queue) { queue.forEach((function (cmd) { - if (_typeof(cmd.called) === objectType_undefined) { + if (typeof cmd.called === 'undefined') { try { cmd.call(); cmd.called = true; @@ -4451,7 +4907,7 @@ pbjs.processQueue = function () { }; /***/ }), -/* 217 */ +/* 237 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4478,7 +4934,7 @@ var hasNonVideoBidder = exports.hasNonVideoBidder = function hasNonVideoBidder(a }; /***/ }), -/* 218 */ +/* 238 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4487,10 +4943,10 @@ var hasNonVideoBidder = exports.hasNonVideoBidder = function hasNonVideoBidder(a /** @module polyfill Misc polyfills */ -__webpack_require__(219); -__webpack_require__(232); -__webpack_require__(234); -__webpack_require__(237); +__webpack_require__(239); +__webpack_require__(252); +__webpack_require__(254); +__webpack_require__(257); // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger Number.isInteger = Number.isInteger || function (value) { @@ -4498,21 +4954,21 @@ Number.isInteger = Number.isInteger || function (value) { }; /***/ }), -/* 219 */ +/* 239 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(220); -module.exports = __webpack_require__(11).Array.find; +__webpack_require__(240); +module.exports = __webpack_require__(12).Array.find; /***/ }), -/* 220 */ +/* 240 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) -var $export = __webpack_require__(14) - , $find = __webpack_require__(30)(5) +var $export = __webpack_require__(15) + , $find = __webpack_require__(32)(5) , KEY = 'find' , forced = true; // Shouldn't skip holes @@ -4522,18 +4978,18 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(23)(KEY); +__webpack_require__(25)(KEY); /***/ }), -/* 221 */ +/* 241 */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(222) - , IE8_DOM_DEFINE = __webpack_require__(223) - , toPrimitive = __webpack_require__(225) +var anObject = __webpack_require__(242) + , IE8_DOM_DEFINE = __webpack_require__(243) + , toPrimitive = __webpack_require__(245) , dP = Object.defineProperty; -exports.f = __webpack_require__(19) ? Object.defineProperty : function defineProperty(O, P, Attributes){ +exports.f = __webpack_require__(21) ? Object.defineProperty : function defineProperty(O, P, Attributes){ anObject(O); P = toPrimitive(P, true); anObject(Attributes); @@ -4546,29 +5002,29 @@ exports.f = __webpack_require__(19) ? Object.defineProperty : function definePro }; /***/ }), -/* 222 */ +/* 242 */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(15); +var isObject = __webpack_require__(16); module.exports = function(it){ if(!isObject(it))throw TypeError(it + ' is not an object!'); return it; }; /***/ }), -/* 223 */ +/* 243 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = !__webpack_require__(19) && !__webpack_require__(20)((function(){ - return Object.defineProperty(__webpack_require__(224)('div'), 'a', {get: function(){ return 7; }}).a != 7; +module.exports = !__webpack_require__(21) && !__webpack_require__(22)((function(){ + return Object.defineProperty(__webpack_require__(244)('div'), 'a', {get: function(){ return 7; }}).a != 7; })); /***/ }), -/* 224 */ +/* 244 */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(15) - , document = __webpack_require__(13).document +var isObject = __webpack_require__(16) + , document = __webpack_require__(14).document // in old IE typeof document.createElement is 'object' , is = isObject(document) && isObject(document.createElement); module.exports = function(it){ @@ -4576,11 +5032,11 @@ module.exports = function(it){ }; /***/ }), -/* 225 */ +/* 245 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(15); +var isObject = __webpack_require__(16); // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function(it, S){ @@ -4593,7 +5049,7 @@ module.exports = function(it, S){ }; /***/ }), -/* 226 */ +/* 246 */ /***/ (function(module, exports) { module.exports = function(bitmap, value){ @@ -4606,18 +5062,18 @@ module.exports = function(bitmap, value){ }; /***/ }), -/* 227 */ +/* 247 */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(13) - , hide = __webpack_require__(18) - , has = __webpack_require__(28) - , SRC = __webpack_require__(21)('src') +var global = __webpack_require__(14) + , hide = __webpack_require__(20) + , has = __webpack_require__(30) + , SRC = __webpack_require__(23)('src') , TO_STRING = 'toString' , $toString = Function[TO_STRING] , TPL = ('' + $toString).split(TO_STRING); -__webpack_require__(11).inspectSource = function(it){ +__webpack_require__(12).inspectSource = function(it){ return $toString.call(it); }; @@ -4643,7 +5099,7 @@ __webpack_require__(11).inspectSource = function(it){ })); /***/ }), -/* 228 */ +/* 248 */ /***/ (function(module, exports) { module.exports = function(it){ @@ -4652,23 +5108,23 @@ module.exports = function(it){ }; /***/ }), -/* 229 */ +/* 249 */ /***/ (function(module, exports, __webpack_require__) { // 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var speciesConstructor = __webpack_require__(230); +var speciesConstructor = __webpack_require__(250); module.exports = function(original, length){ return new (speciesConstructor(original))(length); }; /***/ }), -/* 230 */ +/* 250 */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(15) - , isArray = __webpack_require__(231) - , SPECIES = __webpack_require__(36)('species'); +var isObject = __webpack_require__(16) + , isArray = __webpack_require__(251) + , SPECIES = __webpack_require__(38)('species'); module.exports = function(original){ var C; @@ -4684,31 +5140,31 @@ module.exports = function(original){ }; /***/ }), -/* 231 */ +/* 251 */ /***/ (function(module, exports, __webpack_require__) { // 7.2.2 IsArray(argument) -var cof = __webpack_require__(31); +var cof = __webpack_require__(33); module.exports = Array.isArray || function isArray(arg){ return cof(arg) == 'Array'; }; /***/ }), -/* 232 */ +/* 252 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(233); -module.exports = __webpack_require__(11).Array.findIndex; +__webpack_require__(253); +module.exports = __webpack_require__(12).Array.findIndex; /***/ }), -/* 233 */ +/* 253 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) -var $export = __webpack_require__(14) - , $find = __webpack_require__(30)(6) +var $export = __webpack_require__(15) + , $find = __webpack_require__(32)(6) , KEY = 'findIndex' , forced = true; // Shouldn't skip holes @@ -4718,24 +5174,24 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(23)(KEY); +__webpack_require__(25)(KEY); /***/ }), -/* 234 */ +/* 254 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(235); -module.exports = __webpack_require__(11).Array.includes; +__webpack_require__(255); +module.exports = __webpack_require__(12).Array.includes; /***/ }), -/* 235 */ +/* 255 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/tc39/Array.prototype.includes -var $export = __webpack_require__(14) - , $includes = __webpack_require__(38)(true); +var $export = __webpack_require__(15) + , $includes = __webpack_require__(40)(true); $export($export.P, 'Array', { includes: function includes(el /*, fromIndex = 0 */){ @@ -4743,13 +5199,13 @@ $export($export.P, 'Array', { } }); -__webpack_require__(23)('includes'); +__webpack_require__(25)('includes'); /***/ }), -/* 236 */ +/* 256 */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(35) +var toInteger = __webpack_require__(37) , max = Math.max , min = Math.min; module.exports = function(index, length){ @@ -4758,37 +5214,37 @@ module.exports = function(index, length){ }; /***/ }), -/* 237 */ +/* 257 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(238); -module.exports = __webpack_require__(11).Object.assign; +__webpack_require__(258); +module.exports = __webpack_require__(12).Object.assign; /***/ }), -/* 238 */ +/* 258 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.1 Object.assign(target, source) -var $export = __webpack_require__(14); +var $export = __webpack_require__(15); -$export($export.S + $export.F, 'Object', {assign: __webpack_require__(239)}); +$export($export.S + $export.F, 'Object', {assign: __webpack_require__(259)}); /***/ }), -/* 239 */ +/* 259 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 19.1.2.1 Object.assign(target, source, ...) -var getKeys = __webpack_require__(240) - , gOPS = __webpack_require__(244) - , pIE = __webpack_require__(245) - , toObject = __webpack_require__(32) - , IObject = __webpack_require__(22) +var getKeys = __webpack_require__(260) + , gOPS = __webpack_require__(264) + , pIE = __webpack_require__(265) + , toObject = __webpack_require__(34) + , IObject = __webpack_require__(24) , $assign = Object.assign; // should work with symbols and should have deterministic property order (V8 bug) -module.exports = !$assign || __webpack_require__(20)((function(){ +module.exports = !$assign || __webpack_require__(22)((function(){ var A = {} , B = {} , S = Symbol() @@ -4813,25 +5269,25 @@ module.exports = !$assign || __webpack_require__(20)((function(){ } : $assign; /***/ }), -/* 240 */ +/* 260 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.14 / 15.2.3.14 Object.keys(O) -var $keys = __webpack_require__(241) - , enumBugKeys = __webpack_require__(243); +var $keys = __webpack_require__(261) + , enumBugKeys = __webpack_require__(263); module.exports = Object.keys || function keys(O){ return $keys(O, enumBugKeys); }; /***/ }), -/* 241 */ +/* 261 */ /***/ (function(module, exports, __webpack_require__) { -var has = __webpack_require__(28) - , toIObject = __webpack_require__(39) - , arrayIndexOf = __webpack_require__(38)(false) - , IE_PROTO = __webpack_require__(242)('IE_PROTO'); +var has = __webpack_require__(30) + , toIObject = __webpack_require__(41) + , arrayIndexOf = __webpack_require__(40)(false) + , IE_PROTO = __webpack_require__(262)('IE_PROTO'); module.exports = function(object, names){ var O = toIObject(object) @@ -4847,17 +5303,17 @@ module.exports = function(object, names){ }; /***/ }), -/* 242 */ +/* 262 */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(37)('keys') - , uid = __webpack_require__(21); +var shared = __webpack_require__(39)('keys') + , uid = __webpack_require__(23); module.exports = function(key){ return shared[key] || (shared[key] = uid(key)); }; /***/ }), -/* 243 */ +/* 263 */ /***/ (function(module, exports) { // IE 8- don't enum bug keys @@ -4866,19 +5322,19 @@ module.exports = ( ).split(','); /***/ }), -/* 244 */ +/* 264 */ /***/ (function(module, exports) { exports.f = Object.getOwnPropertySymbols; /***/ }), -/* 245 */ +/* 265 */ /***/ (function(module, exports) { exports.f = {}.propertyIsEnumerable; /***/ }), -/* 246 */ +/* 266 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4893,7 +5349,7 @@ var _events = __webpack_require__(8); var _events2 = _interopRequireDefault(_events); -var _native = __webpack_require__(12); +var _native = __webpack_require__(13); var _constants = __webpack_require__(4); @@ -4979,15 +5435,15 @@ function resizeRemoteCreative(_ref) { } /***/ }), -/* 247 */ +/* 267 */ /***/ ((function(module, exports, __webpack_require__) { "use strict"; -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); -var _targeting = __webpack_require__(17); +var _targeting = __webpack_require__(19); // Adserver parent class var AdServer = function AdServer(attr) { diff --git a/build/dist/prebid.js b/build/dist/prebid.js index 950323c342e..aeda7267b53 100644 --- a/build/dist/prebid.js +++ b/build/dist/prebid.js @@ -1,5 +1,5 @@ -/* prebid.js v0.27.0-pre -Updated : 2017-07-28 */ +/* prebid.js v0.28.0-pre +Updated : 2017-08-24 */ /******/ (function(modules) { // webpackBootstrap /******/ // install a JSONP callback for chunk loading /******/ var parentJsonpFunction = window["pbjsChunk"]; @@ -36,7 +36,7 @@ Updated : 2017-07-28 */ /******/ /******/ // objects to store loaded and loading chunks /******/ var installedChunks = { -/******/ 86: 0 +/******/ 95: 0 /******/ }; /******/ /******/ // The require function @@ -108,7 +108,7 @@ Updated : 2017-07-28 */ /******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 215); +/******/ return __webpack_require__(__webpack_require__.s = 235); /******/ }) /************************************************************************/ /******/ ([ @@ -143,11 +143,11 @@ exports.isSafariBrowser = isSafariBrowser; exports.replaceAuctionPrice = replaceAuctionPrice; exports.getBidderRequestAllAdUnits = getBidderRequestAllAdUnits; exports.getBidderRequest = getBidderRequest; -var CONSTANTS = __webpack_require__(4); +exports.groupBy = groupBy; + +var _config = __webpack_require__(10); -var objectType_object = 'object'; -var objectType_string = 'string'; -var objectType_number = 'number'; +var CONSTANTS = __webpack_require__(4); var _loggingChecked = false; @@ -259,7 +259,7 @@ function parseSizesInput(sizeObj) { var parsedSizes = []; // if a string for now we can assume it is a single size, like "300x250" - if ((typeof sizeObj === 'undefined' ? 'undefined' : _typeof(sizeObj)) === objectType_string) { + if (typeof sizeObj === 'string') { // multiple sizes will be comma-separated var sizes = sizeObj.split(','); @@ -273,13 +273,13 @@ function parseSizesInput(sizeObj) { } } } - } else if ((typeof sizeObj === 'undefined' ? 'undefined' : _typeof(sizeObj)) === objectType_object) { + } else if ((typeof sizeObj === 'undefined' ? 'undefined' : _typeof(sizeObj)) === 'object') { var sizeArrayLength = sizeObj.length; // don't process empty array if (sizeArrayLength > 0) { // if we are a 2 item array of 2 numbers, we must be a SingleSize array - if (sizeArrayLength === 2 && _typeof(sizeObj[0]) === objectType_number && _typeof(sizeObj[1]) === objectType_number) { + if (sizeArrayLength === 2 && typeof sizeObj[0] === 'number' && typeof sizeObj[1] === 'number') { parsedSizes.push(parseGPTSingleSizeArray(sizeObj)); } else { // otherwise, we must be a MultiSize array @@ -360,12 +360,13 @@ var errLogFn = (function (hasLogger) { })(hasConsoleLogger()); var debugTurnedOn = function debugTurnedOn() { - if (pbjs.logging === false && _loggingChecked === false) { - pbjs.logging = getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; + if (_config.config.getConfig('debug') === false && _loggingChecked === false) { + var debug = getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; + _config.config.setConfig({ debug: debug }); _loggingChecked = true; } - return !!pbjs.logging; + return !!_config.config.getConfig('debug'); }; exports.debugTurnedOn = debugTurnedOn; @@ -410,6 +411,8 @@ var getParameterByName = function getParameterByName(name) { return decodeURIComponent(results[1].replace(/\+/g, ' ')); }; +exports.getParameterByName = getParameterByName; + /** * This function validates paramaters. * @param {object[string]} paramObj [description] @@ -825,6 +828,21 @@ function getBidderRequest(bidder, adUnitCode) { })) || { start: null, requestId: null }; } +/** + * + * https://stackoverflow.com/a/34890276/428704 + * @export + * @param {array} xs + * @param {string} key + * @returns {${key_value}: ${groupByArray}, key_value: {groupByArray}} + */ +function groupBy(xs, key) { + return xs.reduce((function (rv, x) { + (rv[x[key]] = rv[x[key]] || []).push(x); + return rv; + }), {}); +} + /***/ })), /* 1 */ /***/ (function(module, exports, __webpack_require__) { @@ -832,15 +850,15 @@ function getBidderRequest(bidder, adUnitCode) { "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** @module adaptermanger */ var _utils = __webpack_require__(0); -var _sizeMapping = __webpack_require__(43); +var _sizeMapping = __webpack_require__(45); -var _native = __webpack_require__(12); +var _native = __webpack_require__(13); + +var _storagemanager = __webpack_require__(18); var utils = __webpack_require__(0); var CONSTANTS = __webpack_require__(4); @@ -855,8 +873,16 @@ var _s2sConfig = { adapter: CONSTANTS.S2S.ADAPTER, syncEndpoint: CONSTANTS.S2S.SYNC_ENDPOINT }; + +var RANDOM = 'random'; +var FIXED = 'fixed'; + +var VALID_ORDERS = {}; +VALID_ORDERS[RANDOM] = true; +VALID_ORDERS[FIXED] = true; + var _analyticsRegistry = {}; -var _bidderSequence = null; +var _bidderSequence = RANDOM; function getBids(_ref) { var bidderCode = _ref.bidderCode, @@ -914,7 +940,8 @@ exports.callBids = function (_ref2) { events.emit(CONSTANTS.EVENTS.AUCTION_INIT, auctionInit); var bidderCodes = (0, _utils.getBidderCodes)(adUnits); - if (_bidderSequence === CONSTANTS.ORDER.RANDOM) { + var syncedBidders = _storagemanager.StorageManager.get(_storagemanager.pbjsSyncsKey); + if (_bidderSequence === RANDOM) { bidderCodes = (0, _utils.shuffle)(bidderCodes); } @@ -926,7 +953,9 @@ exports.callBids = function (_ref2) { if (_s2sConfig.enabled) { // these are called on the s2s adapter - var adaptersServerSide = _s2sConfig.bidders; + var adaptersServerSide = _s2sConfig.bidders.filter((function (bidder) { + return syncedBidders.includes(bidder); + })); // don't call these client side bidderCodes = bidderCodes.filter((function (elm) { @@ -975,7 +1004,9 @@ exports.callBids = function (_ref2) { var s2sBidRequest = { tid: tid, 'ad_units': adUnitsCopy }; utils.logMessage('CALLING S2S HEADER BIDDERS ==== ' + adaptersServerSide.join(',')); - s2sAdapter.callBids(s2sBidRequest); + if (s2sBidRequest.ad_units.length) { + s2sAdapter.callBids(s2sBidRequest); + } } bidderCodes.forEach((function (bidderCode) { @@ -1025,7 +1056,7 @@ exports.registerBidAdapter = function (bidAdaptor, bidderCode) { supportedMediaTypes = _ref3$supportedMediaT === undefined ? [] : _ref3$supportedMediaT; if (bidAdaptor && bidderCode) { - if (_typeof(bidAdaptor.callBids) === CONSTANTS.objectType_function) { + if (typeof bidAdaptor.callBids === 'function') { _bidderRegistry[bidderCode] = bidAdaptor; if (supportedMediaTypes.includes('video')) { @@ -1045,15 +1076,14 @@ exports.registerBidAdapter = function (bidAdaptor, bidderCode) { exports.aliasBidAdapter = function (bidderCode, alias) { var existingAlias = _bidderRegistry[alias]; - if ((typeof existingAlias === 'undefined' ? 'undefined' : _typeof(existingAlias)) === CONSTANTS.objectType_undefined) { + if (typeof existingAlias === 'undefined') { var bidAdaptor = _bidderRegistry[bidderCode]; - if ((typeof bidAdaptor === 'undefined' ? 'undefined' : _typeof(bidAdaptor)) === CONSTANTS.objectType_undefined) { + if (typeof bidAdaptor === 'undefined') { utils.logError('bidderCode "' + bidderCode + '" is not an existing bidder.', 'adaptermanager.aliasBidAdapter'); } else { try { - var newAdapter = null; - newAdapter = bidAdaptor.createNew(); + var newAdapter = new bidAdaptor.constructor(); newAdapter.setBidderCode(alias); this.registerBidAdapter(newAdapter, alias); } catch (e) { @@ -1070,7 +1100,7 @@ exports.registerAnalyticsAdapter = function (_ref4) { code = _ref4.code; if (adapter && code) { - if (_typeof(adapter.enableAnalytics) === CONSTANTS.objectType_function) { + if (typeof adapter.enableAnalytics === 'function') { adapter.code = code; _analyticsRegistry[code] = adapter; } else { @@ -1097,7 +1127,11 @@ exports.enableAnalytics = function (config) { }; exports.setBidderSequence = function (order) { - _bidderSequence = order; + if (VALID_ORDERS[order]) { + _bidderSequence = order; + } else { + utils.logWarn('Invalid order: ' + order + '. Bidder Sequence was not set.'); + } }; exports.setS2SConfig = function (config) { @@ -1111,36 +1145,30 @@ exports.setS2SConfig = function (config) { "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; +var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); + var _utils = __webpack_require__(0); -var _cpmBucketManager = __webpack_require__(24); +var _cpmBucketManager = __webpack_require__(26); -var _native = __webpack_require__(12); +var _native = __webpack_require__(13); -var _videoCache = __webpack_require__(42); +var _videoCache = __webpack_require__(44); -var _Renderer = __webpack_require__(16); +var _Renderer = __webpack_require__(17); + +var _config = __webpack_require__(10); var CONSTANTS = __webpack_require__(4); var AUCTION_END = CONSTANTS.EVENTS.AUCTION_END; var utils = __webpack_require__(0); var events = __webpack_require__(8); -var objectType_function = 'function'; - var externalCallbacks = { byAdUnit: [], all: [], oneTime: null, timer: false }; -var _granularity = CONSTANTS.GRANULARITY_OPTIONS.MEDIUM; -var _customPriceBucket = void 0; var defaultBidderSettingsMap = {}; -exports.setCustomPriceBucket = function (customConfig) { - _customPriceBucket = customConfig; -}; - /** * Returns a list of bidders that we haven't received a response yet * @return {array} [description] @@ -1232,25 +1260,56 @@ exports.addBidResponse = function (adUnitCode, bid) { return 'Invalid bid from ' + bid.bidderCode + '. Ignoring bid: ' + msg; } - if (!adUnitCode) { - utils.logWarn('No adUnitCode was supplied to addBidResponse.'); + if (!bid) { + utils.logError('Some adapter tried to add an undefined bid for ' + adUnitCode + '.'); return false; } - if (!bid) { - utils.logWarn('Some adapter tried to add an undefined bid for ' + adUnitCode + '.'); + if (!adUnitCode) { + utils.logError(errorMessage('No adUnitCode was supplied to addBidResponse.')); return false; } if (bid.mediaType === 'native' && !(0, _native.nativeBidIsValid)(bid)) { utils.logError(errorMessage('Native bid missing some required properties.')); return false; } - if (bid.mediaType === 'video' && !bid.vastUrl) { - utils.logError(errorMessage('Video bid does not have required vastUrl property.')); + if (bid.mediaType === 'video' && !(bid.vastUrl || bid.vastPayload)) { + utils.logError(errorMessage('Video bid has no vastUrl or vastPayload property.')); return false; } + if (bid.mediaType === 'banner' && !validBidSize(bid)) { + utils.logError(errorMessage('Banner bids require a width and height')); + return false; + } + return true; } + // check that the bid has a width and height set + function validBidSize(bid) { + if ((bid.width || bid.width === 0) && (bid.height || bid.height === 0)) { + return true; + } + + var adUnit = (0, _utils.getBidderRequest)(bid.bidderCode, adUnitCode); + var sizes = adUnit && adUnit.bids && adUnit.bids[0] && adUnit.bids[0].sizes; + var parsedSizes = utils.parseSizesInput(sizes); + + // if a banner impression has one valid size, we assign that size to any bid + // response that does not explicitly set width or height + if (parsedSizes.length === 1) { + var _parsedSizes$0$split = parsedSizes[0].split('x'), + _parsedSizes$0$split2 = _slicedToArray(_parsedSizes$0$split, 2), + width = _parsedSizes$0$split2[0], + height = _parsedSizes$0$split2[1]; + + bid.width = width; + bid.height = height; + return true; + } + + return false; + } + // Postprocess the bids so that all the universal properties exist, no matter which bidder they came from. // This should be called before addBidToAuction(). function prepareBidForAuction() { @@ -1287,7 +1346,7 @@ exports.addBidResponse = function (adUnitCode, bid) { bid.renderer.setRender(adUnitRenderer.render); } - var priceStringsObj = (0, _cpmBucketManager.getPriceBucketString)(bid.cpm, _customPriceBucket); + var priceStringsObj = (0, _cpmBucketManager.getPriceBucketString)(bid.cpm, _config.config.getConfig('customPriceBucket')); bid.pbLg = priceStringsObj.low; bid.pbMg = priceStringsObj.med; bid.pbHg = priceStringsObj.high; @@ -1328,15 +1387,23 @@ exports.addBidResponse = function (adUnitCode, bid) { // Video bids may fail if the cache is down, or there's trouble on the network. function tryAddVideoBid(bid) { - (0, _videoCache.store)([bid], (function (error, cacheIds) { - if (error) { - utils.logWarn('Failed to save to the video cache: ' + error + '. Video bid must be discarded.'); - } else { - bid.videoCacheKey = cacheIds[0].uuid; - addBidToAuction(bid); - } + if (_config.config.getConfig('usePrebidCache')) { + (0, _videoCache.store)([bid], (function (error, cacheIds) { + if (error) { + utils.logWarn('Failed to save to the video cache: ' + error + '. Video bid must be discarded.'); + } else { + bid.videoCacheKey = cacheIds[0].uuid; + if (!bid.vastUrl) { + bid.vastUrl = (0, _videoCache.getCacheUrl)(bid.videoCacheKey); + } + addBidToAuction(bid); + } + doCallbacksIfNeeded(); + })); + } else { + addBidToAuction(bid); doCallbacksIfNeeded(); - })); + } } }; @@ -1351,20 +1418,18 @@ function getKeyValueTargetingPairs(bidderCode, custBidObj) { setKeys(keyValues, standardSettings, custBidObj); } - // 2) set keys from specific bidder setting override if they exist if (bidderCode && custBidObj && bidder_settings && bidder_settings[bidderCode] && bidder_settings[bidderCode][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { + // 2) set keys from specific bidder setting override if they exist setKeys(keyValues, bidder_settings[bidderCode], custBidObj); custBidObj.alwaysUseBid = bidder_settings[bidderCode].alwaysUseBid; custBidObj.sendStandardTargeting = bidder_settings[bidderCode].sendStandardTargeting; + } else if (defaultBidderSettingsMap[bidderCode]) { + // 2) set keys from standard setting. NOTE: this API doesn't seem to be in use by any Adapter + setKeys(keyValues, defaultBidderSettingsMap[bidderCode], custBidObj); + custBidObj.alwaysUseBid = defaultBidderSettingsMap[bidderCode].alwaysUseBid; + custBidObj.sendStandardTargeting = defaultBidderSettingsMap[bidderCode].sendStandardTargeting; } - // 2) set keys from standard setting. NOTE: this API doesn't seem to be in use by any Adapter - else if (defaultBidderSettingsMap[bidderCode]) { - setKeys(keyValues, defaultBidderSettingsMap[bidderCode], custBidObj); - custBidObj.alwaysUseBid = defaultBidderSettingsMap[bidderCode].alwaysUseBid; - custBidObj.sendStandardTargeting = defaultBidderSettingsMap[bidderCode].sendStandardTargeting; - } - // set native key value targeting if (custBidObj.native) { Object.keys(custBidObj.native).forEach((function (asset) { @@ -1414,18 +1479,6 @@ function setKeys(keyValues, bidderSettings, custBidObj) { return keyValues; } -exports.setPriceGranularity = function setPriceGranularity(granularity) { - var granularityOptions = CONSTANTS.GRANULARITY_OPTIONS; - if (Object.keys(granularityOptions).filter((function (option) { - return granularity === granularityOptions[option]; - }))) { - _granularity = granularity; - } else { - utils.logWarn('Prebid Warning: setPriceGranularity was called with invalid setting, using' + ' `medium` as default.'); - _granularity = CONSTANTS.GRANULARITY_OPTIONS.MEDIUM; - } -}; - exports.registerDefaultBidderSetting = function (bidderCode, defaultSetting) { defaultBidderSettingsMap[bidderCode] = defaultSetting; }; @@ -1531,7 +1584,7 @@ function adjustBids(bid) { var code = bid.bidderCode; var bidPriceAdjusted = bid.cpm; if (code && pbjs.bidderSettings && pbjs.bidderSettings[code]) { - if (_typeof(pbjs.bidderSettings[code].bidCpmAdjustment) === objectType_function) { + if (typeof pbjs.bidderSettings[code].bidCpmAdjustment === 'function') { try { bidPriceAdjusted = pbjs.bidderSettings[code].bidCpmAdjustment.call(null, bid.cpm, _extends({}, bid)); } catch (e) { @@ -1550,6 +1603,7 @@ exports.adjustBids = function () { }; function getStandardBidderSettings() { + var granularity = _config.config.getConfig('priceGranularity'); var bidder_settings = pbjs.bidderSettings; if (!bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]) { bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD] = { @@ -1566,17 +1620,17 @@ function getStandardBidderSettings() { }, { key: 'hb_pb', val: function val(bidResponse) { - if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.AUTO) { + if (granularity === CONSTANTS.GRANULARITY_OPTIONS.AUTO) { return bidResponse.pbAg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.DENSE) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.DENSE) { return bidResponse.pbDg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.LOW) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.LOW) { return bidResponse.pbLg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.MEDIUM) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.MEDIUM) { return bidResponse.pbMg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.HIGH) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.HIGH) { return bidResponse.pbHg; - } else if (_granularity === CONSTANTS.GRANULARITY_OPTIONS.CUSTOM) { + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.CUSTOM) { return bidResponse.pbCg; } } @@ -1634,6 +1688,7 @@ function Bid(statusCode, bidRequest) { this.height = 0; this.statusMessage = _getStatus(); this.adId = _bidId; + this.mediaType = 'banner'; function _getStatus() { switch (_statusCode) { @@ -1678,7 +1733,7 @@ module.exports = { "ADSERVER_TARGETING": "adserverTargeting", "BD_SETTING_STANDARD": "standard" }, - "REPO_AND_VERSION": "prebid_prebid_0.27.0-pre", + "REPO_AND_VERSION": "prebid_prebid_0.28.0-pre", "DEBUG_MODE": "pbjs_debug", "STATUS": { "GOOD": 1, @@ -1692,11 +1747,6 @@ module.exports = { "REQUEST_BIDS": "requestBids" } }, - "objectType_function": "function", - "objectType_undefined": "undefined", - "objectType_object": "object", - "objectType_string": "string", - "objectType_number": "number", "EVENTS": { "AUCTION_INIT": "auctionInit", "AUCTION_END": "auctionEnd", @@ -1711,9 +1761,6 @@ module.exports = { "EVENT_ID_PATHS": { "bidWon": "adUnitCode" }, - "ORDER": { - "RANDOM": "random" - }, "GRANULARITY_OPTIONS": { "LOW": "low", "MEDIUM": "medium", @@ -1733,7 +1780,8 @@ module.exports = { "DEFAULT_ENDPOINT": "https://prebid.adnxs.com/pbs/v1/auction", "SRC": "s2s", "ADAPTER": "prebidServer", - "SYNC_ENDPOINT": "https://prebid.adnxs.com/pbs/v1/cookie_sync" + "SYNC_ENDPOINT": "https://prebid.adnxs.com/pbs/v1/cookie_sync", + "SYNCED_BIDDERS_KEY": "pbjsSyncs" } }; @@ -1788,12 +1836,10 @@ exports.loadScript = function (tagSrc, callback, cacheRequest) { } })); } + } else { + // trigger one time request + requestResource(tagSrc, callback); } - - // trigger one time request - else { - requestResource(tagSrc, callback); - } }; function requestResource(tagSrc, callback) { @@ -1846,7 +1892,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol exports.setAjaxTimeout = setAjaxTimeout; exports.ajax = ajax; -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); var utils = __webpack_require__(0); @@ -1960,6 +2006,10 @@ function ajax(url, callback, data) { "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = Adapter; function Adapter(code) { var bidderCode = code; @@ -1980,10 +2030,6 @@ function Adapter(code) { }; } -exports.createNew = function (bidderCode) { - return new Adapter(bidderCode); -}; - /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { @@ -2152,6 +2198,276 @@ module.exports = (function () { "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.config = undefined; + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* + * Module for getting and setting Prebid configuration. + * + * Prebid previously defined these properties directly on the global object: + * pbjs.logging = true; + * + * Defining and access properties in this way is now deprecated, but these will + * continue to work during a deprecation window. + */ + + +exports.newConfig = newConfig; + +var _cpmBucketManager = __webpack_require__(26); + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var utils = __webpack_require__(0); + +var DEFAULT_DEBUG = false; +var DEFAULT_BIDDER_TIMEOUT = 3000; +var DEFAULT_PUBLISHER_DOMAIN = window.location.origin; +var DEFAULT_COOKIESYNC_DELAY = 100; +var DEFAULT_ENABLE_SEND_ALL_BIDS = false; + +var GRANULARITY_OPTIONS = { + 'LOW': 'low', + 'MEDIUM': 'medium', + 'HIGH': 'high', + 'AUTO': 'auto', + 'DENSE': 'dense', + 'CUSTOM': 'custom' +}; + +var ALL_TOPICS = '*'; + +/** + * @typedef {object} PrebidConfig + * + * @property {bool} usePrebidCache True if we should use prebid-cache to store video bids before adding + * bids to the auction, and false otherwise. **NOTE** This must be true if you want to use the + * dfpAdServerVideo module. + */ + +function newConfig() { + var listeners = []; + + var config = { + // `debug` is equivalent to legacy `pbjs.logging` property + _debug: DEFAULT_DEBUG, + get debug() { + if (pbjs.logging || pbjs.logging === false) { + return pbjs.logging; + } + return this._debug; + }, + set debug(val) { + this._debug = val; + }, + + // default timeout for all bids + _bidderTimeout: DEFAULT_BIDDER_TIMEOUT, + get bidderTimeout() { + return pbjs.bidderTimeout || this._bidderTimeout; + }, + set bidderTimeout(val) { + this._bidderTimeout = val; + }, + + // domain where prebid is running for cross domain iframe communication + _publisherDomain: DEFAULT_PUBLISHER_DOMAIN, + get publisherDomain() { + return pbjs.publisherDomain || this._publisherDomain; + }, + set publisherDomain(val) { + this._publisherDomain = val; + }, + + // delay to request cookie sync to stay out of critical path + _cookieSyncDelay: DEFAULT_COOKIESYNC_DELAY, + get cookieSyncDelay() { + return pbjs.cookieSyncDelay || this._cookieSyncDelay; + }, + set cookieSyncDelay(val) { + this._cookieSyncDelay = val; + }, + + // calls existing function which may be moved after deprecation + _priceGranularity: GRANULARITY_OPTIONS.MEDIUM, + set priceGranularity(val) { + if (validatePriceGranularity(val)) { + if (typeof val === 'string') { + this._priceGranularity = hasGranularity(val) ? val : GRANULARITY_OPTIONS.MEDIUM; + } else if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') { + this._customPriceBucket = val; + this._priceGranularity = GRANULARITY_OPTIONS.MEDIUM; + utils.logMessage('Using custom price granularity'); + } + } + }, + get priceGranularity() { + return this._priceGranularity; + }, + + _customPriceBucket: {}, + get customPriceBucket() { + return this._customPriceBucket; + }, + + _sendAllBids: DEFAULT_ENABLE_SEND_ALL_BIDS, + get enableSendAllBids() { + return this._sendAllBids; + }, + set enableSendAllBids(val) { + this._sendAllBids = val; + }, + + // calls existing function which may be moved after deprecation + set bidderSequence(val) { + pbjs.setBidderSequence(val); + }, + + // calls existing function which may be moved after deprecation + set s2sConfig(val) { + pbjs.setS2SConfig(val); + } + + }; + + function hasGranularity(val) { + return Object.keys(GRANULARITY_OPTIONS).find((function (option) { + return val === GRANULARITY_OPTIONS[option]; + })); + } + + function validatePriceGranularity(val) { + if (!val) { + utils.logError('Prebid Error: no value passed to `setPriceGranularity()`'); + return false; + } + if (typeof val === 'string') { + if (!hasGranularity(val)) { + utils.logWarn('Prebid Warning: setPriceGranularity was called with invalid setting, using `medium` as default.'); + } + } else if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') { + if (!(0, _cpmBucketManager.isValidePriceConfig)(val)) { + utils.logError('Invalid custom price value passed to `setPriceGranularity()`'); + return false; + } + } + return true; + } + + /* + * Returns configuration object if called without parameters, + * or single configuration property if given a string matching a configuartion + * property name. + * + * If called with callback parameter, or a string and a callback parameter, + * subscribes to configuration updates. See `subscribe` function for usage. + */ + function getConfig() { + if (arguments.length <= 1 && typeof (arguments.length <= 0 ? undefined : arguments[0]) !== 'function') { + var option = arguments.length <= 0 ? undefined : arguments[0]; + return option ? config[option] : config; + } + + return subscribe.apply(undefined, arguments); + } + + /* + * Sets configuration given an object containing key-value pairs and calls + * listeners that were added by the `subscribe` function + */ + function setConfig(options) { + if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') { + utils.logError('setConfig options must be an object'); + } + + _extends(config, options); + callSubscribers(options); + } + + /* + * Adds a function to a set of listeners that are invoked whenever `setConfig` + * is called. The subscribed function will be passed the options object that + * was used in the `setConfig` call. Topics can be subscribed to to only get + * updates when specific properties are updated by passing a topic string as + * the first parameter. + * + * Returns an `unsubscribe` function for removing the subscriber from the + * set of listeners + * + * Example use: + * // subscribe to all configuration changes + * subscribe((config) => console.log('config set:', config)); + * + * // subscribe to only 'logging' changes + * subscribe('logging', (config) => console.log('logging set:', config)); + * + * // unsubscribe + * const unsubscribe = subscribe(...); + * unsubscribe(); // no longer listening + */ + function subscribe(topic, listener) { + var callback = listener; + + if (typeof topic !== 'string') { + // first param should be callback function in this case, + // meaning it gets called for any config change + callback = topic; + topic = ALL_TOPICS; + } + + if (typeof callback !== 'function') { + utils.logError('listener must be a function'); + return; + } + + listeners.push({ topic: topic, callback: callback }); + + // save and call this function to remove the listener + return function unsubscribe() { + listeners.splice(listeners.indexOf(listener), 1); + }; + } + + /* + * Calls listeners that were added by the `subscribe` function + */ + function callSubscribers(options) { + var TOPICS = Object.keys(options); + + // call subscribers of a specific topic, passing only that configuration + listeners.filter((function (listener) { + return TOPICS.includes(listener.topic); + })).forEach((function (listener) { + listener.callback(_defineProperty({}, listener.topic, options[listener.topic])); + })); + + // call subscribers that didn't give a topic, passing everything that was set + listeners.filter((function (listener) { + return listener.topic === ALL_TOPICS; + })).forEach((function (listener) { + return listener.callback(options); + })); + } + + return { + getConfig: getConfig, + setConfig: setConfig + }; +} + +var config = exports.config = newConfig(); + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + Object.defineProperty(exports, "__esModule", { value: true }); @@ -2207,14 +2523,14 @@ function format(obj) { } /***/ }), -/* 11 */ +/* 12 */ /***/ (function(module, exports) { var core = module.exports = {version: '2.4.0'}; if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef /***/ }), -/* 12 */ +/* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2238,7 +2554,8 @@ var NATIVE_KEYS = exports.NATIVE_KEYS = { sponsoredBy: 'hb_native_brand', image: 'hb_native_image', icon: 'hb_native_icon', - clickUrl: 'hb_native_linkurl' + clickUrl: 'hb_native_linkurl', + cta: 'hb_native_cta' }; var NATIVE_TARGETING_KEYS = exports.NATIVE_TARGETING_KEYS = Object.keys(NATIVE_KEYS).map((function (key) { @@ -2340,7 +2657,7 @@ function fireNativeImpressions(adObject) { } /***/ }), -/* 13 */ +/* 14 */ /***/ (function(module, exports) { // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 @@ -2349,14 +2666,14 @@ var global = module.exports = typeof window != 'undefined' && window.Math == Mat if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef /***/ }), -/* 14 */ +/* 15 */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(13) - , core = __webpack_require__(11) - , hide = __webpack_require__(18) - , redefine = __webpack_require__(227) - , ctx = __webpack_require__(29) +var global = __webpack_require__(14) + , core = __webpack_require__(12) + , hide = __webpack_require__(20) + , redefine = __webpack_require__(247) + , ctx = __webpack_require__(31) , PROTOTYPE = 'prototype'; var $export = function(type, name, source){ @@ -2397,7 +2714,7 @@ $export.R = 128; // real proto method for `library` module.exports = $export; /***/ }), -/* 15 */ +/* 16 */ /***/ (function(module, exports) { module.exports = function(it){ @@ -2405,7 +2722,7 @@ module.exports = function(it){ }; /***/ }), -/* 16 */ +/* 17 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2509,7 +2826,70 @@ Renderer.prototype.process = function () { }; /***/ }), -/* 17 */ +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.StorageManager = exports.pbjsSyncsKey = undefined; +exports.newStorageManager = newStorageManager; + +var _utils = __webpack_require__(0); + +var pbjsSyncsKey = exports.pbjsSyncsKey = 'pbjsSyncs'; /** + * Storage Manager aims to provide a consistent but concise API to persist data where conditions may require alternatives + * to localStorage (storing as cookie, in indexedDB, etc), or potentially a mechanism for x-domain storage + * + * Only html5 localStorage implemented currently. + * + */ + +function newStorageManager() { + function set(key, item) { + try { + localStorage.setItem(key, JSON.stringify(item)); + } catch (e) { + (0, _utils.logWarn)('could not set storage item: ', e); + } + } + + function get(key) { + try { + var item = JSON.parse(localStorage.getItem(key)); + return item && item.length ? item : []; + } catch (e) { + (0, _utils.logWarn)('could not get storage item: ', e); + return []; + } + } + + return { + get: get, + set: set, + + add: function add(key, element) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + set(key, get(key).concat([element]).filter((function (value, index, array) { + return unique ? array.indexOf(value) === index : true; + }))); + }, + remove: function remove(key, element) { + set(key, get(key).filter((function (value) { + return value !== element; + }))); + } + }; +} + +var StorageManager = exports.StorageManager = newStorageManager(); + +/***/ }), +/* 19 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2517,7 +2897,9 @@ Renderer.prototype.process = function () { var _utils = __webpack_require__(0); -var _native = __webpack_require__(12); +var _config = __webpack_require__(10); + +var _native = __webpack_require__(13); function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -2552,7 +2934,7 @@ targeting.getAllTargeting = function (adUnitCode) { // Get targeting for the winning bid. Add targeting for any bids that have // `alwaysUseBid=true`. If sending all bids is enabled, add targeting for losing bids. - var targeting = getWinningBidTargeting(adUnitCodes).concat(getAlwaysUseBidTargeting(adUnitCodes)).concat(pbjs._sendAllBids ? getBidLandscapeTargeting(adUnitCodes) : []); + var targeting = getWinningBidTargeting(adUnitCodes).concat(getAlwaysUseBidTargeting(adUnitCodes)).concat(_config.config.getConfig('enableSendAllBids') ? getBidLandscapeTargeting(adUnitCodes) : []); // store a reference of the targeting keys targeting.map((function (adUnitCode) { @@ -2615,12 +2997,7 @@ targeting.getWinningBids = function (adUnitCode) { })).filter(_utils.uniques).map((function (adUnitCode) { return pbjs._bidsReceived.filter((function (bid) { return bid.adUnitCode === adUnitCode ? bid : null; - })).reduce(_utils.getHighestCpm, { - adUnitCode: adUnitCode, - cpm: 0, - adserverTargeting: {}, - timeToRespond: 0 - }); + })).reduce(_utils.getHighestCpm, getEmptyBid(adUnitCode)); })); }; @@ -2689,14 +3066,22 @@ function getAlwaysUseBidTargeting(adUnitCodes) { function getBidLandscapeTargeting(adUnitCodes) { var standardKeys = CONSTANTS.TARGETING_KEYS.concat(_native.NATIVE_TARGETING_KEYS); - - return pbjs._bidsReceived.filter(_utils.adUnitsFilter.bind(this, adUnitCodes)).map((function (bid) { + var bids = []; + // bucket by adUnitcode + var buckets = (0, _utils.groupBy)(pbjs._bidsReceived, 'adUnitCode'); + // filter top bid for each bucket by bidder + Object.keys(buckets).forEach((function (bucketKey) { + var bidsByBidder = (0, _utils.groupBy)(buckets[bucketKey], 'bidderCode'); + Object.keys(bidsByBidder).forEach((function (key) { + return bids.push(bidsByBidder[key].reduce(_utils.getHighestCpm, getEmptyBid())); + })); + })); + // populate targeting keys for the remaining bids + return bids.map((function (bid) { if (bid.adserverTargeting) { return _defineProperty({}, bid.adUnitCode, getTargetingMap(bid, standardKeys.filter((function (key) { return typeof bid.adserverTargeting[key] !== 'undefined'; - })) // mainly for possibly - // unset hb_deal - )); + })))); } })).filter((function (bid) { return bid; @@ -2715,13 +3100,22 @@ targeting.isApntagDefined = function () { } }; +function getEmptyBid(adUnitCode) { + return { + adUnitCode: adUnitCode, + cpm: 0, + adserverTargeting: {}, + timeToRespond: 0 + }; +} + /***/ }), -/* 18 */ +/* 20 */ /***/ (function(module, exports, __webpack_require__) { -var dP = __webpack_require__(221) - , createDesc = __webpack_require__(226); -module.exports = __webpack_require__(19) ? function(object, key, value){ +var dP = __webpack_require__(241) + , createDesc = __webpack_require__(246); +module.exports = __webpack_require__(21) ? function(object, key, value){ return dP.f(object, key, createDesc(1, value)); } : function(object, key, value){ object[key] = value; @@ -2729,16 +3123,16 @@ module.exports = __webpack_require__(19) ? function(object, key, value){ }; /***/ }), -/* 19 */ +/* 21 */ /***/ (function(module, exports, __webpack_require__) { // Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(20)((function(){ +module.exports = !__webpack_require__(22)((function(){ return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; })); /***/ }), -/* 20 */ +/* 22 */ /***/ (function(module, exports) { module.exports = function(exec){ @@ -2750,7 +3144,7 @@ module.exports = function(exec){ }; /***/ }), -/* 21 */ +/* 23 */ /***/ (function(module, exports) { var id = 0 @@ -2760,29 +3154,29 @@ module.exports = function(key){ }; /***/ }), -/* 22 */ +/* 24 */ /***/ (function(module, exports, __webpack_require__) { // fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(31); +var cof = __webpack_require__(33); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ return cof(it) == 'String' ? it.split('') : Object(it); }; /***/ }), -/* 23 */ +/* 25 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = __webpack_require__(36)('unscopables') +var UNSCOPABLES = __webpack_require__(38)('unscopables') , ArrayProto = Array.prototype; -if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(18)(ArrayProto, UNSCOPABLES, {}); +if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(20)(ArrayProto, UNSCOPABLES, {}); module.exports = function(key){ ArrayProto[UNSCOPABLES][key] = true; }; /***/ }), -/* 24 */ +/* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2791,6 +3185,8 @@ module.exports = function(key){ Object.defineProperty(exports, "__esModule", { value: true }); +var utils = __webpack_require__(0); + var _defaultPrecision = 2; var _lgPriceConfig = { 'buckets': [{ @@ -2889,7 +3285,7 @@ function getCpmStringValue(cpm, config) { } function isValidePriceConfig(config) { - if (!config || !config.buckets || !Array.isArray(config.buckets)) { + if (utils.isEmpty(config) || !config.buckets || !Array.isArray(config.buckets)) { return false; } var isValid = true; @@ -2913,7 +3309,7 @@ exports.getPriceBucketString = getPriceBucketString; exports.isValidePriceConfig = isValidePriceConfig; /***/ }), -/* 25 */ +/* 27 */ /***/ (function(module, exports) { var g; @@ -2940,7 +3336,7 @@ module.exports = g; /***/ }), -/* 26 */ +/* 28 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2961,7 +3357,7 @@ function getGlobal() { } /***/ }), -/* 27 */ +/* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2975,13 +3371,13 @@ var _adloader = __webpack_require__(5); var _adloader2 = _interopRequireDefault(_adloader); +var _storagemanager = __webpack_require__(18); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } var cookie = exports; - - var queue = []; function fireSyncs() { @@ -2992,11 +3388,16 @@ function fireSyncs() { } else { utils.insertPixel(obj.url); } + setBidderSynced(obj.bidder); })); // empty queue. queue.length = 0; } +function setBidderSynced(bidder) { + _storagemanager.StorageManager.add(_storagemanager.pbjsSyncsKey, bidder, true); +} + /** * Add this bidder to the queue for sync * @param {String} bidder bidder code @@ -3030,7 +3431,7 @@ cookie.cookieSet = function (cookieSetUrl) { }; /***/ }), -/* 28 */ +/* 30 */ /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; @@ -3039,11 +3440,11 @@ module.exports = function(it, key){ }; /***/ }), -/* 29 */ +/* 31 */ /***/ (function(module, exports, __webpack_require__) { // optional / simple context binding -var aFunction = __webpack_require__(228); +var aFunction = __webpack_require__(248); module.exports = function(fn, that, length){ aFunction(fn); if(that === undefined)return fn; @@ -3064,7 +3465,7 @@ module.exports = function(fn, that, length){ }; /***/ }), -/* 30 */ +/* 32 */ /***/ (function(module, exports, __webpack_require__) { // 0 -> Array#forEach @@ -3074,11 +3475,11 @@ module.exports = function(fn, that, length){ // 4 -> Array#every // 5 -> Array#find // 6 -> Array#findIndex -var ctx = __webpack_require__(29) - , IObject = __webpack_require__(22) - , toObject = __webpack_require__(32) - , toLength = __webpack_require__(34) - , asc = __webpack_require__(229); +var ctx = __webpack_require__(31) + , IObject = __webpack_require__(24) + , toObject = __webpack_require__(34) + , toLength = __webpack_require__(36) + , asc = __webpack_require__(249); module.exports = function(TYPE, $create){ var IS_MAP = TYPE == 1 , IS_FILTER = TYPE == 2 @@ -3113,7 +3514,7 @@ module.exports = function(TYPE, $create){ }; /***/ }), -/* 31 */ +/* 33 */ /***/ (function(module, exports) { var toString = {}.toString; @@ -3123,17 +3524,17 @@ module.exports = function(it){ }; /***/ }), -/* 32 */ +/* 34 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.13 ToObject(argument) -var defined = __webpack_require__(33); +var defined = __webpack_require__(35); module.exports = function(it){ return Object(defined(it)); }; /***/ }), -/* 33 */ +/* 35 */ /***/ (function(module, exports) { // 7.2.1 RequireObjectCoercible(argument) @@ -3143,18 +3544,18 @@ module.exports = function(it){ }; /***/ }), -/* 34 */ +/* 36 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.15 ToLength -var toInteger = __webpack_require__(35) +var toInteger = __webpack_require__(37) , min = Math.min; module.exports = function(it){ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; /***/ }), -/* 35 */ +/* 37 */ /***/ (function(module, exports) { // 7.1.4 ToInteger @@ -3165,12 +3566,12 @@ module.exports = function(it){ }; /***/ }), -/* 36 */ +/* 38 */ /***/ (function(module, exports, __webpack_require__) { -var store = __webpack_require__(37)('wks') - , uid = __webpack_require__(21) - , Symbol = __webpack_require__(13).Symbol +var store = __webpack_require__(39)('wks') + , uid = __webpack_require__(23) + , Symbol = __webpack_require__(14).Symbol , USE_SYMBOL = typeof Symbol == 'function'; var $exports = module.exports = function(name){ @@ -3181,10 +3582,10 @@ var $exports = module.exports = function(name){ $exports.store = store; /***/ }), -/* 37 */ +/* 39 */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(13) +var global = __webpack_require__(14) , SHARED = '__core-js_shared__' , store = global[SHARED] || (global[SHARED] = {}); module.exports = function(key){ @@ -3192,14 +3593,14 @@ module.exports = function(key){ }; /***/ }), -/* 38 */ +/* 40 */ /***/ (function(module, exports, __webpack_require__) { // false -> Array#indexOf // true -> Array#includes -var toIObject = __webpack_require__(39) - , toLength = __webpack_require__(34) - , toIndex = __webpack_require__(236); +var toIObject = __webpack_require__(41) + , toLength = __webpack_require__(36) + , toIndex = __webpack_require__(256); module.exports = function(IS_INCLUDES){ return function($this, el, fromIndex){ var O = toIObject($this) @@ -3218,20 +3619,20 @@ module.exports = function(IS_INCLUDES){ }; /***/ }), -/* 39 */ +/* 41 */ /***/ (function(module, exports, __webpack_require__) { // to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(22) - , defined = __webpack_require__(33); +var IObject = __webpack_require__(24) + , defined = __webpack_require__(35); module.exports = function(it){ return IObject(defined(it)); }; /***/ }), -/* 40 */, -/* 41 */, -/* 42 */ +/* 42 */, +/* 43 */, +/* 44 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3241,18 +3642,28 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.store = store; +exports.getCacheUrl = getCacheUrl; var _ajax = __webpack_require__(6); -var PUT_URL = 'https://prebid.adnxs.com/pbc/v1/cache'; +var BASE_URL = 'https://prebid.adnxs.com/pbc/v1/cache'; /** - * These are the properties required on a Bid in order to cache and retrieve it. - * - * @typedef {object} CacheableBid + * @typedef {object} CacheableUrlBid * @property {string} vastUrl A URL which loads some valid VAST XML. */ +/** + * @typedef {object} CacheablePayloadBid + * @property {string} vastPayload Some VAST XML which loads an ad in a video player. + */ + +/** + * A CacheableBid describes the types which the videoCache can store. + * + * @typedef {CacheableUrlBid|CacheablePayloadBid} CacheableBid + */ + /** * Function which wraps a URI that serves VAST XML, so that it can be loaded. * @@ -3284,9 +3695,10 @@ function wrapURI(uri) { * @param {CacheableBid} bid */ function toStorageRequest(bid) { + var vastValue = bid.vastPayload ? bid.vastPayload : wrapURI(bid.vastUrl); return { type: 'xml', - value: wrapURI(bid.vastUrl) + value: vastValue }; } @@ -3320,7 +3732,11 @@ function shimStorageCallback(done) { return; } - done(null, ids); + if (ids) { + done(null, ids); + } else { + done(new Error("The cache server didn't respond with a responses property."), []); + } }, error: function error(statusText, responseBody) { done(new Error('Error storing video ad in the cache: ' + statusText + ': ' + JSON.stringify(responseBody)), []); @@ -3340,14 +3756,18 @@ function store(bids, done) { puts: bids.map(toStorageRequest) }; - (0, _ajax.ajax)(PUT_URL, shimStorageCallback(done), JSON.stringify(requestData), { + (0, _ajax.ajax)(BASE_URL, shimStorageCallback(done), JSON.stringify(requestData), { contentType: 'text/plain', withCredentials: true }); } +function getCacheUrl(id) { + return BASE_URL + '?uuid=' + id; +} + /***/ }), -/* 43 */ +/* 45 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3386,7 +3806,7 @@ function mapSizes(adUnit) { } var sizes = ''; var mapping = adUnit.sizeMapping.find((function (sizeMapping) { - return width > sizeMapping.minWidth; + return width >= sizeMapping.minWidth; })); if (mapping && mapping.sizes && mapping.sizes.length) { sizes = mapping.sizes; @@ -3428,8 +3848,6 @@ exports.getScreenWidth = getScreenWidth; exports.setWindow = setWindow; /***/ }), -/* 44 */, -/* 45 */, /* 46 */, /* 47 */, /* 48 */, @@ -3599,14 +4017,34 @@ exports.setWindow = setWindow; /* 212 */, /* 213 */, /* 214 */, -/* 215 */ +/* 215 */, +/* 216 */, +/* 217 */, +/* 218 */, +/* 219 */, +/* 220 */, +/* 221 */, +/* 222 */, +/* 223 */, +/* 224 */, +/* 225 */, +/* 226 */, +/* 227 */, +/* 228 */, +/* 229 */, +/* 230 */, +/* 231 */, +/* 232 */, +/* 233 */, +/* 234 */, +/* 235 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(216); +module.exports = __webpack_require__(236); /***/ }), -/* 216 */ +/* 236 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3616,45 +4054,43 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -var _prebidGlobal = __webpack_require__(26); +var _prebidGlobal = __webpack_require__(28); var _utils = __webpack_require__(0); -var _video = __webpack_require__(217); - -var _native = __webpack_require__(12); +var _video = __webpack_require__(237); -__webpack_require__(218); +var _native = __webpack_require__(13); -var _url = __webpack_require__(10); +__webpack_require__(238); -var _cpmBucketManager = __webpack_require__(24); +var _url = __webpack_require__(11); -var _secureCreatives = __webpack_require__(246); +var _secureCreatives = __webpack_require__(266); -var _cookie = __webpack_require__(27); +var _cookie = __webpack_require__(29); var _adloader = __webpack_require__(5); var _ajax = __webpack_require__(6); +var _config = __webpack_require__(10); + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** @module pbjs */ var pbjs = (0, _prebidGlobal.getGlobal)(); + var CONSTANTS = __webpack_require__(4); var utils = __webpack_require__(0); var bidmanager = __webpack_require__(2); var adaptermanager = __webpack_require__(1); var bidfactory = __webpack_require__(3); var events = __webpack_require__(8); -var adserver = __webpack_require__(247); -var targeting = __webpack_require__(17); +var adserver = __webpack_require__(267); +var targeting = __webpack_require__(19); /* private variables */ -var objectType_function = 'function'; -var objectType_undefined = 'undefined'; -var objectType_object = 'object'; var BID_WON = CONSTANTS.EVENTS.BID_WON; var SET_TARGETING = CONSTANTS.EVENTS.SET_TARGETING; @@ -3673,12 +4109,11 @@ pbjs._bidsReceived = []; pbjs._adUnitCodes = []; pbjs._winningBids = []; pbjs._adsReceived = []; -pbjs._sendAllBids = false; pbjs.bidderSettings = pbjs.bidderSettings || {}; -// default timeout for all bids -pbjs.bidderTimeout = pbjs.bidderTimeout || 3000; +/** @deprecated - use pbjs.setConfig({ bidderTimeout: }) */ +pbjs.bidderTimeout = pbjs.bidderTimeout; // current timeout set in `requestBids` or to default `bidderTimeout` pbjs.cbTimeout = pbjs.cbTimeout || 200; @@ -3686,23 +4121,24 @@ pbjs.cbTimeout = pbjs.cbTimeout || 200; // timeout buffer to adjust for bidder CDN latency pbjs.timeoutBuffer = 200; -pbjs.logging = pbjs.logging || false; +/** @deprecated - use pbjs.setConfig({ debug: }) */ +pbjs.logging = pbjs.logging; -// domain where prebid is running for cross domain iframe communication -pbjs.publisherDomain = pbjs.publisherDomain || window.location.origin; +/** @deprecated - use pbjs.setConfig({ publisherDomain: ) */ +pbjs.publisherDomain = pbjs.publisherDomain; // let the world know we are loaded pbjs.libLoaded = true; // version auto generated from build -pbjs.version = 'v0.27.0-pre'; -utils.logInfo('Prebid.js v0.27.0-pre loaded'); +pbjs.version = 'v0.28.0-pre'; +utils.logInfo('Prebid.js v0.28.0-pre loaded'); // create adUnit array pbjs.adUnits = pbjs.adUnits || []; -// delay to request cookie sync to stay out of critical path -pbjs.cookieSyncDelay = pbjs.cookieSyncDelay || 100; +/** @deprecated - use pbjs.setConfig({ cookieSyncDelay: ) */ +pbjs.cookieSyncDelay = pbjs.cookieSyncDelay; function checkDefinedPlacement(id) { var placementCodes = pbjs._bidsRequested.map((function (bidSet) { @@ -3879,8 +4315,13 @@ pbjs.setTargetingForAst = function () { * Returns a bool if all the bids have returned or timed out * @alias module:pbjs.allBidsAvailable * @return {bool} all bids available + * + * @deprecated This function will be removed in Prebid 1.0 + * Alternative solution is in progress. + * See https://github.com/prebid/Prebid.js/issues/1087 for more details. */ pbjs.allBidsAvailable = function () { + utils.logWarn('pbjs.allBidsAvailable will be removed in Prebid 1.0. Alternative solution is in progress. See https://github.com/prebid/Prebid.js/issues/1087 for more details.'); utils.logInfo('Invoking pbjs.allBidsAvailable', arguments); return bidmanager.bidsBackAll(); }; @@ -3969,7 +4410,7 @@ pbjs.removeAdUnit = function (adUnitCode) { pbjs.clearAuction = function () { auctionRunning = false; - (0, _cookie.syncCookies)(pbjs.cookieSyncDelay); + (0, _cookie.syncCookies)(_config.config.getConfig('cookieSyncDelay')); utils.logMessage('Prebid auction cleared'); if (bidRequestQueue.length) { bidRequestQueue.shift()(); @@ -3991,7 +4432,7 @@ pbjs.requestBids = function () { adUnitCodes = _ref4.adUnitCodes; events.emit('requestBids'); - var cbTimeout = pbjs.cbTimeout = timeout || pbjs.bidderTimeout; + var cbTimeout = pbjs.cbTimeout = timeout || _config.config.getConfig('bidderTimeout'); adUnits = adUnits || pbjs.adUnits; utils.logInfo('Invoking pbjs.requestBids', arguments); @@ -4048,7 +4489,7 @@ pbjs.requestBids = function () { if (!adUnits || adUnits.length === 0) { utils.logMessage('No adUnits configured. No bids requested.'); - if ((typeof bidsBackHandler === 'undefined' ? 'undefined' : _typeof(bidsBackHandler)) === objectType_function) { + if (typeof bidsBackHandler === 'function') { bidmanager.addOneTimeCallback(bidsBackHandler, false); } bidmanager.executeCallback(); @@ -4060,7 +4501,7 @@ pbjs.requestBids = function () { var timeoutCallback = bidmanager.executeCallback.bind(bidmanager, timedOut); var timer = setTimeout(timeoutCallback, cbTimeout); (0, _ajax.setAjaxTimeout)(cbTimeout); - if ((typeof bidsBackHandler === 'undefined' ? 'undefined' : _typeof(bidsBackHandler)) === objectType_function) { + if (typeof bidsBackHandler === 'function') { bidmanager.addOneTimeCallback(bidsBackHandler, timer); } @@ -4085,7 +4526,7 @@ pbjs.addAdUnits = function (adUnitArr) { return adUnit.transactionId = utils.generateUUID(); })); pbjs.adUnits.push.apply(pbjs.adUnits, adUnitArr); - } else if ((typeof adUnitArr === 'undefined' ? 'undefined' : _typeof(adUnitArr)) === objectType_object) { + } else if ((typeof adUnitArr === 'undefined' ? 'undefined' : _typeof(adUnitArr)) === 'object') { // Generate the transaction id for the adunit adUnitArr.transactionId = utils.generateUUID(); pbjs.adUnits.push(adUnitArr); @@ -4142,11 +4583,15 @@ pbjs.offEvent = function (event, handler, id) { * @param {Function} func function to execute. Parameters passed into the function: (bidResObj), [adUnitCode]); * @alias module:pbjs.addCallback * @returns {String} id for callback + * + * @deprecated This function will be removed in Prebid 1.0 + * Please use onEvent instead. */ pbjs.addCallback = function (eventStr, func) { + utils.logWarn('pbjs.addCallback will be removed in Prebid 1.0. Please use onEvent instead'); utils.logInfo('Invoking pbjs.addCallback', arguments); var id = null; - if (!eventStr || !func || (typeof func === 'undefined' ? 'undefined' : _typeof(func)) !== objectType_function) { + if (!eventStr || !func || typeof func !== 'function') { utils.logError('error registering callback. Check method signature'); return id; } @@ -4161,9 +4606,13 @@ pbjs.addCallback = function (eventStr, func) { * //@param {string} cbId id of the callback to remove * @alias module:pbjs.removeCallback * @returns {String} id for callback + * + * @deprecated This function will be removed in Prebid 1.0 + * Please use offEvent instead. */ pbjs.removeCallback = function () /* cbId */{ // todo + utils.logWarn('pbjs.removeCallback will be removed in Prebid 1.0. Please use offEvent instead.'); return null; }; @@ -4224,8 +4673,13 @@ pbjs.createBid = function (statusCode) { * Wrapper to bidmanager.addBidResponse * @param {[type]} adUnitCode [description] * @param {[type]} bid [description] + * + * @deprecated This function will be removed in Prebid 1.0 + * Each bidder will be passed a reference to addBidResponse function in callBids as an argument. + * See https://github.com/prebid/Prebid.js/issues/1087 for more details. */ pbjs.addBidResponse = function (adUnitCode, bid) { + utils.logWarn('pbjs.addBidResponse will be removed in Prebid 1.0. Each bidder will be passed a reference to addBidResponse function in callBids as an argument. See https://github.com/prebid/Prebid.js/issues/1087 for more details.'); utils.logInfo('Invoking pbjs.addBidResponse', arguments); bidmanager.addBidResponse(adUnitCode, bid); }; @@ -4266,6 +4720,7 @@ pbjs.aliasBidder = function (bidderCode, alias) { /** * Sets a default price granularity scheme. * @param {String|Object} granularity - the granularity scheme. + * @deprecated - use pbjs.setConfig({ priceGranularity: }) * "low": $0.50 increments, capped at $5 CPM * "medium": $0.10 increments, capped at $20 CPM (the default) * "high": $0.01 increments, capped at $20 CPM @@ -4277,26 +4732,14 @@ pbjs.aliasBidder = function (bidderCode, alias) { * See http://prebid.org/dev-docs/publisher-api-reference.html#module_pbjs.setPriceGranularity for more details */ pbjs.setPriceGranularity = function (granularity) { + utils.logWarn('pbjs.setPriceGranularity will be removed in Prebid 1.0. Use pbjs.setConfig({ priceGranularity: }) instead.'); utils.logInfo('Invoking pbjs.setPriceGranularity', arguments); - if (!granularity) { - utils.logError('Prebid Error: no value passed to `setPriceGranularity()`'); - return; - } - if (typeof granularity === 'string') { - bidmanager.setPriceGranularity(granularity); - } else if ((typeof granularity === 'undefined' ? 'undefined' : _typeof(granularity)) === 'object') { - if (!(0, _cpmBucketManager.isValidePriceConfig)(granularity)) { - utils.logError('Invalid custom price value passed to `setPriceGranularity()`'); - return; - } - bidmanager.setCustomPriceBucket(granularity); - bidmanager.setPriceGranularity(CONSTANTS.GRANULARITY_OPTIONS.CUSTOM); - utils.logMessage('Using custom price granularity'); - } + _config.config.setConfig({ priceGranularity: granularity }); }; +/** @deprecated - use pbjs.setConfig({ enableSendAllBids: }) */ pbjs.enableSendAllBids = function () { - pbjs._sendAllBids = true; + _config.config.setConfig({ enableSendAllBids: true }); }; pbjs.getAllWinningBids = function () { @@ -4308,12 +4751,11 @@ pbjs.getAllWinningBids = function () { * @param {string} adserverTag default url * @param {object} options options for video tag * - * @deprecated Include the dfpVideoSupport module in your build, and use the - * pbjs.adserver.buildVideoAdUrl (if DFP is your only Ad Server) or - * pbjs.adservers.dfp.buildVideoAdUrl (if you use other Ad Servers too) - * function instead. This function will be removed in Prebid 1.0. + * @deprecated Include the dfpVideoSupport module in your build, and use the pbjs.adservers.dfp.buildVideoAdUrl function instead. + * This function will be removed in Prebid 1.0. */ pbjs.buildMasterVideoTagFromAdserverTag = function (adserverTag, options) { + utils.logWarn('pbjs.buildMasterVideoTagFromAdserverTag will be removed in Prebid 1.0. Include the dfpVideoSupport module in your build, and use the pbjs.adservers.dfp.buildVideoAdUrl function instead'); utils.logInfo('Invoking pbjs.buildMasterVideoTagFromAdserverTag', arguments); var urlComponents = (0, _url.parse)(adserverTag); @@ -4338,16 +4780,17 @@ pbjs.buildMasterVideoTagFromAdserverTag = function (adserverTag, options) { }; /** - * Set the order bidders are called in. If not set, the bidders are called in - * the order they are defined within the adUnit.bids array - * @param {string} order - Order to call bidders in. Currently the only possible value - * is 'random', which randomly shuffles the order + * Set the order bidders are called in. Valid values are: + * + * "fixed": Bidders will be called in the order in which they were defined within the adUnit.bids array. + * "random": Bidders will be called in random order. + * + * If never called, Prebid will use "random" as the default. + * + * @param {string} order One of the valid orders, described above. + * @deprecated - use pbjs.setConfig({ bidderSequence: }) */ -pbjs.setBidderSequence = function (order) { - if (order === CONSTANTS.ORDER.RANDOM) { - adaptermanager.setBidderSequence(CONSTANTS.ORDER.RANDOM); - } -}; +pbjs.setBidderSequence = adaptermanager.setBidderSequence; /** * Get array of highest cpm bids for all adUnits, or highest cpm bid @@ -4361,6 +4804,7 @@ pbjs.getHighestCpmBids = function (adUnitCode) { /** * Set config for server to server header bidding + * @deprecated - use pbjs.setConfig({ s2sConfig: }) * @typedef {Object} options - required * @property {boolean} enabled enables S2S bidding * @property {string[]} bidders bidders to request S2S @@ -4395,6 +4839,18 @@ pbjs.setS2SConfig = function (options) { adaptermanager.setS2SConfig(config); }; +/** + * Get Prebid config options + * @param {object} options + */ +pbjs.getConfig = _config.config.getConfig; + +/** + * Set Prebid config options + * @param {object} options + */ +pbjs.setConfig = _config.config.setConfig; + pbjs.que.push((function () { return (0, _secureCreatives.listenMessagesFromCreative)(); })); @@ -4419,7 +4875,7 @@ pbjs.que.push((function () { * @alias module:pbjs.cmd.push */ pbjs.cmd.push = function (cmd) { - if ((typeof cmd === 'undefined' ? 'undefined' : _typeof(cmd)) === objectType_function) { + if (typeof cmd === 'function') { try { cmd.call(); } catch (e) { @@ -4434,7 +4890,7 @@ pbjs.que.push = pbjs.cmd.push; function processQueue(queue) { queue.forEach((function (cmd) { - if (_typeof(cmd.called) === objectType_undefined) { + if (typeof cmd.called === 'undefined') { try { cmd.call(); cmd.called = true; @@ -4451,7 +4907,7 @@ pbjs.processQueue = function () { }; /***/ }), -/* 217 */ +/* 237 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4478,7 +4934,7 @@ var hasNonVideoBidder = exports.hasNonVideoBidder = function hasNonVideoBidder(a }; /***/ }), -/* 218 */ +/* 238 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4487,10 +4943,10 @@ var hasNonVideoBidder = exports.hasNonVideoBidder = function hasNonVideoBidder(a /** @module polyfill Misc polyfills */ -__webpack_require__(219); -__webpack_require__(232); -__webpack_require__(234); -__webpack_require__(237); +__webpack_require__(239); +__webpack_require__(252); +__webpack_require__(254); +__webpack_require__(257); // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger Number.isInteger = Number.isInteger || function (value) { @@ -4498,21 +4954,21 @@ Number.isInteger = Number.isInteger || function (value) { }; /***/ }), -/* 219 */ +/* 239 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(220); -module.exports = __webpack_require__(11).Array.find; +__webpack_require__(240); +module.exports = __webpack_require__(12).Array.find; /***/ }), -/* 220 */ +/* 240 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) -var $export = __webpack_require__(14) - , $find = __webpack_require__(30)(5) +var $export = __webpack_require__(15) + , $find = __webpack_require__(32)(5) , KEY = 'find' , forced = true; // Shouldn't skip holes @@ -4522,18 +4978,18 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(23)(KEY); +__webpack_require__(25)(KEY); /***/ }), -/* 221 */ +/* 241 */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(222) - , IE8_DOM_DEFINE = __webpack_require__(223) - , toPrimitive = __webpack_require__(225) +var anObject = __webpack_require__(242) + , IE8_DOM_DEFINE = __webpack_require__(243) + , toPrimitive = __webpack_require__(245) , dP = Object.defineProperty; -exports.f = __webpack_require__(19) ? Object.defineProperty : function defineProperty(O, P, Attributes){ +exports.f = __webpack_require__(21) ? Object.defineProperty : function defineProperty(O, P, Attributes){ anObject(O); P = toPrimitive(P, true); anObject(Attributes); @@ -4546,29 +5002,29 @@ exports.f = __webpack_require__(19) ? Object.defineProperty : function definePro }; /***/ }), -/* 222 */ +/* 242 */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(15); +var isObject = __webpack_require__(16); module.exports = function(it){ if(!isObject(it))throw TypeError(it + ' is not an object!'); return it; }; /***/ }), -/* 223 */ +/* 243 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = !__webpack_require__(19) && !__webpack_require__(20)((function(){ - return Object.defineProperty(__webpack_require__(224)('div'), 'a', {get: function(){ return 7; }}).a != 7; +module.exports = !__webpack_require__(21) && !__webpack_require__(22)((function(){ + return Object.defineProperty(__webpack_require__(244)('div'), 'a', {get: function(){ return 7; }}).a != 7; })); /***/ }), -/* 224 */ +/* 244 */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(15) - , document = __webpack_require__(13).document +var isObject = __webpack_require__(16) + , document = __webpack_require__(14).document // in old IE typeof document.createElement is 'object' , is = isObject(document) && isObject(document.createElement); module.exports = function(it){ @@ -4576,11 +5032,11 @@ module.exports = function(it){ }; /***/ }), -/* 225 */ +/* 245 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(15); +var isObject = __webpack_require__(16); // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function(it, S){ @@ -4593,7 +5049,7 @@ module.exports = function(it, S){ }; /***/ }), -/* 226 */ +/* 246 */ /***/ (function(module, exports) { module.exports = function(bitmap, value){ @@ -4606,18 +5062,18 @@ module.exports = function(bitmap, value){ }; /***/ }), -/* 227 */ +/* 247 */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(13) - , hide = __webpack_require__(18) - , has = __webpack_require__(28) - , SRC = __webpack_require__(21)('src') +var global = __webpack_require__(14) + , hide = __webpack_require__(20) + , has = __webpack_require__(30) + , SRC = __webpack_require__(23)('src') , TO_STRING = 'toString' , $toString = Function[TO_STRING] , TPL = ('' + $toString).split(TO_STRING); -__webpack_require__(11).inspectSource = function(it){ +__webpack_require__(12).inspectSource = function(it){ return $toString.call(it); }; @@ -4643,7 +5099,7 @@ __webpack_require__(11).inspectSource = function(it){ })); /***/ }), -/* 228 */ +/* 248 */ /***/ (function(module, exports) { module.exports = function(it){ @@ -4652,23 +5108,23 @@ module.exports = function(it){ }; /***/ }), -/* 229 */ +/* 249 */ /***/ (function(module, exports, __webpack_require__) { // 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var speciesConstructor = __webpack_require__(230); +var speciesConstructor = __webpack_require__(250); module.exports = function(original, length){ return new (speciesConstructor(original))(length); }; /***/ }), -/* 230 */ +/* 250 */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(15) - , isArray = __webpack_require__(231) - , SPECIES = __webpack_require__(36)('species'); +var isObject = __webpack_require__(16) + , isArray = __webpack_require__(251) + , SPECIES = __webpack_require__(38)('species'); module.exports = function(original){ var C; @@ -4684,31 +5140,31 @@ module.exports = function(original){ }; /***/ }), -/* 231 */ +/* 251 */ /***/ (function(module, exports, __webpack_require__) { // 7.2.2 IsArray(argument) -var cof = __webpack_require__(31); +var cof = __webpack_require__(33); module.exports = Array.isArray || function isArray(arg){ return cof(arg) == 'Array'; }; /***/ }), -/* 232 */ +/* 252 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(233); -module.exports = __webpack_require__(11).Array.findIndex; +__webpack_require__(253); +module.exports = __webpack_require__(12).Array.findIndex; /***/ }), -/* 233 */ +/* 253 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) -var $export = __webpack_require__(14) - , $find = __webpack_require__(30)(6) +var $export = __webpack_require__(15) + , $find = __webpack_require__(32)(6) , KEY = 'findIndex' , forced = true; // Shouldn't skip holes @@ -4718,24 +5174,24 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(23)(KEY); +__webpack_require__(25)(KEY); /***/ }), -/* 234 */ +/* 254 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(235); -module.exports = __webpack_require__(11).Array.includes; +__webpack_require__(255); +module.exports = __webpack_require__(12).Array.includes; /***/ }), -/* 235 */ +/* 255 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/tc39/Array.prototype.includes -var $export = __webpack_require__(14) - , $includes = __webpack_require__(38)(true); +var $export = __webpack_require__(15) + , $includes = __webpack_require__(40)(true); $export($export.P, 'Array', { includes: function includes(el /*, fromIndex = 0 */){ @@ -4743,13 +5199,13 @@ $export($export.P, 'Array', { } }); -__webpack_require__(23)('includes'); +__webpack_require__(25)('includes'); /***/ }), -/* 236 */ +/* 256 */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(35) +var toInteger = __webpack_require__(37) , max = Math.max , min = Math.min; module.exports = function(index, length){ @@ -4758,37 +5214,37 @@ module.exports = function(index, length){ }; /***/ }), -/* 237 */ +/* 257 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(238); -module.exports = __webpack_require__(11).Object.assign; +__webpack_require__(258); +module.exports = __webpack_require__(12).Object.assign; /***/ }), -/* 238 */ +/* 258 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.1 Object.assign(target, source) -var $export = __webpack_require__(14); +var $export = __webpack_require__(15); -$export($export.S + $export.F, 'Object', {assign: __webpack_require__(239)}); +$export($export.S + $export.F, 'Object', {assign: __webpack_require__(259)}); /***/ }), -/* 239 */ +/* 259 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 19.1.2.1 Object.assign(target, source, ...) -var getKeys = __webpack_require__(240) - , gOPS = __webpack_require__(244) - , pIE = __webpack_require__(245) - , toObject = __webpack_require__(32) - , IObject = __webpack_require__(22) +var getKeys = __webpack_require__(260) + , gOPS = __webpack_require__(264) + , pIE = __webpack_require__(265) + , toObject = __webpack_require__(34) + , IObject = __webpack_require__(24) , $assign = Object.assign; // should work with symbols and should have deterministic property order (V8 bug) -module.exports = !$assign || __webpack_require__(20)((function(){ +module.exports = !$assign || __webpack_require__(22)((function(){ var A = {} , B = {} , S = Symbol() @@ -4813,25 +5269,25 @@ module.exports = !$assign || __webpack_require__(20)((function(){ } : $assign; /***/ }), -/* 240 */ +/* 260 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.14 / 15.2.3.14 Object.keys(O) -var $keys = __webpack_require__(241) - , enumBugKeys = __webpack_require__(243); +var $keys = __webpack_require__(261) + , enumBugKeys = __webpack_require__(263); module.exports = Object.keys || function keys(O){ return $keys(O, enumBugKeys); }; /***/ }), -/* 241 */ +/* 261 */ /***/ (function(module, exports, __webpack_require__) { -var has = __webpack_require__(28) - , toIObject = __webpack_require__(39) - , arrayIndexOf = __webpack_require__(38)(false) - , IE_PROTO = __webpack_require__(242)('IE_PROTO'); +var has = __webpack_require__(30) + , toIObject = __webpack_require__(41) + , arrayIndexOf = __webpack_require__(40)(false) + , IE_PROTO = __webpack_require__(262)('IE_PROTO'); module.exports = function(object, names){ var O = toIObject(object) @@ -4847,17 +5303,17 @@ module.exports = function(object, names){ }; /***/ }), -/* 242 */ +/* 262 */ /***/ (function(module, exports, __webpack_require__) { -var shared = __webpack_require__(37)('keys') - , uid = __webpack_require__(21); +var shared = __webpack_require__(39)('keys') + , uid = __webpack_require__(23); module.exports = function(key){ return shared[key] || (shared[key] = uid(key)); }; /***/ }), -/* 243 */ +/* 263 */ /***/ (function(module, exports) { // IE 8- don't enum bug keys @@ -4866,19 +5322,19 @@ module.exports = ( ).split(','); /***/ }), -/* 244 */ +/* 264 */ /***/ (function(module, exports) { exports.f = Object.getOwnPropertySymbols; /***/ }), -/* 245 */ +/* 265 */ /***/ (function(module, exports) { exports.f = {}.propertyIsEnumerable; /***/ }), -/* 246 */ +/* 266 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4893,7 +5349,7 @@ var _events = __webpack_require__(8); var _events2 = _interopRequireDefault(_events); -var _native = __webpack_require__(12); +var _native = __webpack_require__(13); var _constants = __webpack_require__(4); @@ -4979,15 +5435,15 @@ function resizeRemoteCreative(_ref) { } /***/ }), -/* 247 */ +/* 267 */ /***/ ((function(module, exports, __webpack_require__) { "use strict"; -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); -var _targeting = __webpack_require__(17); +var _targeting = __webpack_require__(19); // Adserver parent class var AdServer = function AdServer(attr) { @@ -5044,7 +5500,7 @@ exports.dfpAdserver = function (options, urlComponents) { /***/ })) /******/ ]); -pbjsChunk([74],{ +pbjsChunk([84],{ /***/ 64: /***/ (function(module, exports, __webpack_require__) { @@ -5060,6 +5516,253 @@ module.exports = __webpack_require__(65); "use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _adapter = __webpack_require__(7); + +var _adapter2 = _interopRequireDefault(_adapter); + +var _bidfactory = __webpack_require__(3); + +var _bidfactory2 = _interopRequireDefault(_bidfactory); + +var _bidmanager = __webpack_require__(2); + +var _bidmanager2 = _interopRequireDefault(_bidmanager); + +var _utils = __webpack_require__(0); + +var utils = _interopRequireWildcard(_utils); + +var _url = __webpack_require__(11); + +var _ajax = __webpack_require__(6); + +var _constants = __webpack_require__(4); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var AdyoulikeAdapter = function AdyoulikeAdapter() { + var _VERSION = '0.1'; + + var baseAdapter = new _adapter2['default']('adyoulike'); + + baseAdapter.callBids = function (bidRequest) { + var bidRequests = {}; + var bids = bidRequest.bids || []; + + var validBids = bids.filter(valid); + validBids.forEach((function (bid) { + bidRequests[bid.params.placement] = bid; + })); + + var placements = validBids.map((function (bid) { + return bid.params.placement; + })); + if (!utils.isEmpty(placements)) { + var body = createBody(placements); + var endpoint = createEndpoint(); + (0, _ajax.ajax)(endpoint, (function (response) { + handleResponse(bidRequests, response); + }), body, { + contentType: 'text/json', + withCredentials: true + }); + } + }; + + /* Create endpoint url */ + function createEndpoint() { + return (0, _url.format)({ + protocol: document.location.protocol === 'https:' ? 'https' : 'http', + host: 'hb-api.omnitagjs.com', + pathname: '/hb-api/prebid', + search: createEndpointQS() + }); + } + + /* Create endpoint query string */ + function createEndpointQS() { + var qs = {}; + + var ref = getReferrerUrl(); + if (ref) { + qs.RefererUrl = encodeURIComponent(ref); + } + + var can = getCanonicalUrl(); + if (can) { + qs.CanonicalUrl = encodeURIComponent(can); + } + + return qs; + } + + /* Create request body */ + function createBody(placements) { + var body = { + Version: _VERSION, + Placements: placements + }; + + // performance isn't supported by mobile safari iOS7. window.performance works, but + // evaluates to true on a unit test which expects false. + // + // try/catch was added to un-block the Prebid 0.25 release, but the adyoulike adapter + // maintainers should revisit this and see if it's really what they want. + try { + if (performance && performance.navigation) { + body.PageRefreshed = performance.navigation.type === performance.navigation.TYPE_RELOAD; + } + } catch (e) { + body.PageRefreshed = false; + } + + return JSON.stringify(body); + } + + /* Response handler */ + function handleResponse(bidRequests, response) { + var responses = []; + try { + responses = JSON.parse(response); + } catch (error) { + utils.logError(error); + } + + var bidResponses = {}; + responses.forEach((function (response) { + bidResponses[response.Placement] = response; + })); + + Object.keys(bidRequests).forEach((function (placement) { + addResponse(placement, bidRequests[placement], bidResponses[placement]); + })); + } + + /* Check that a bid has required parameters */ + function valid(bid) { + var sizes = getSize(bid.sizes); + if (!bid.params.placement || !sizes.width || !sizes.height) { + return false; + } + return true; + } + + /* Get current page referrer url */ + function getReferrerUrl() { + var referer = ''; + if (window.self !== window.top) { + try { + referer = window.top.document.referrer; + } catch (e) {} + } else { + referer = document.referrer; + } + return referer; + } + + /* Get current page canonical url */ + function getCanonicalUrl() { + var link = void 0; + if (window.self !== window.top) { + try { + link = window.top.document.head.querySelector('link[rel="canonical"][href]'); + } catch (e) {} + } else { + link = document.head.querySelector('link[rel="canonical"][href]'); + } + + if (link) { + return link.href; + } + return ''; + } + + /* Get parsed size from request size */ + function getSize(requestSizes) { + var parsed = {}; + var size = utils.parseSizesInput(requestSizes)[0]; + + if (typeof size !== 'string') { + return parsed; + } + + var parsedSize = size.toUpperCase().split('X'); + var width = parseInt(parsedSize[0], 10); + if (width) { + parsed.width = width; + } + + var height = parseInt(parsedSize[1], 10); + if (height) { + parsed.height = height; + } + + return parsed; + } + + /* Create bid from response */ + function createBid(placementId, bidRequest, response) { + var bid = void 0; + if (!response || !response.Banner) { + bid = _bidfactory2['default'].createBid(_constants.STATUS.NO_BID, bidRequest); + } else { + bid = _bidfactory2['default'].createBid(_constants.STATUS.GOOD, bidRequest); + var size = getSize(bidRequest.sizes); + bid.width = size.width; + bid.height = size.height; + bid.cpm = response.Price; + bid.ad = response.Banner; + } + + bid.bidderCode = baseAdapter.getBidderCode(); + + return bid; + } + + /* Add response to bidmanager */ + function addResponse(placementId, bidRequest, response) { + var bid = createBid(placementId, bidRequest, response); + var placement = bidRequest.placementCode; + _bidmanager2['default'].addBidResponse(placement, bid); + } + + return _extends(this, { + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode + }); +}; + +_adaptermanager2['default'].registerBidAdapter(new AdyoulikeAdapter(), 'adyoulike'); + +module.exports = AdyoulikeAdapter; + +/***/ }) + +},[64]); +pbjsChunk([83],{ + +/***/ 66: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(67); + + +/***/ }), + +/***/ 67: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _templateObject = _taggedTemplateLiteral(['', '://', '/pubapi/3.0/', '/', '/', '/', '/ADTECH;v=2;cmd=bid;cors=yes;alias=', '', ';misc=', ''], ['', '://', '/pubapi/3.0/', '/', '/', '/', '/ADTECH;v=2;cmd=bid;cors=yes;alias=', '', ';misc=', '']), @@ -5074,7 +5777,7 @@ var bidfactory = __webpack_require__(3); var bidmanager = __webpack_require__(2); var constants = __webpack_require__(4); var adaptermanager = __webpack_require__(1); -var BaseAdapter = __webpack_require__(7); +var BaseAdapter = __webpack_require__(7)['default']; var AOL_BIDDERS_CODES = { aol: 'aol', @@ -5395,11 +6098,8 @@ var AolAdapter = function AolAdapter() { })); } - return _extends(BaseAdapter.createNew(AOL_BIDDERS_CODES.aol), { - callBids: _callBids, - createNew: function createNew() { - return new AolAdapter(); - } + return _extends(this, new BaseAdapter(AOL_BIDDERS_CODES.aol), { + callBids: _callBids }); }; @@ -5411,8 +6111,8 @@ module.exports = AolAdapter; /***/ }) -},[64]); -pbjsChunk([72],{ +},[66]); +pbjsChunk([82],{ /***/ 70: /***/ (function(module, exports, __webpack_require__) { @@ -5428,34 +6128,475 @@ module.exports = __webpack_require__(71); "use strict"; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -var _utils = __webpack_require__(0); +var _adapter = __webpack_require__(7); -var _adaptermanager = __webpack_require__(1); +var _adapter2 = _interopRequireDefault(_adapter); -var _adaptermanager2 = _interopRequireDefault(_adaptermanager); +var _Renderer = __webpack_require__(17); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } +var _bidfactory = __webpack_require__(3); -var CONSTANTS = __webpack_require__(4); -var utils = __webpack_require__(0); -var adloader = __webpack_require__(5); -var bidmanager = __webpack_require__(2); -var bidfactory = __webpack_require__(3); -var Adapter = __webpack_require__(7); +var _bidfactory2 = _interopRequireDefault(_bidfactory); -var AppNexusAdapter; -AppNexusAdapter = function AppNexusAdapter() { - var baseAdapter = Adapter.createNew('appnexus'); - var usersync = false; +var _bidmanager = __webpack_require__(2); - baseAdapter.callBids = function (params) { - // var bidCode = baseAdapter.getBidderCode(); +var _bidmanager2 = _interopRequireDefault(_bidmanager); - var anArr = params.bids; +var _utils = __webpack_require__(0); - // var bidsCount = anArr.length; +var utils = _interopRequireWildcard(_utils); + +var _ajax = __webpack_require__(6); + +var _constants = __webpack_require__(4); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var ENDPOINT = '//ib.adnxs.com/ut/v3/prebid'; +var SUPPORTED_AD_TYPES = ['banner', 'video', 'video-outstream', 'native']; +var VIDEO_TARGETING = ['id', 'mimes', 'minduration', 'maxduration', 'startdelay', 'skippable', 'playback_method', 'frameworks']; +var USER_PARAMS = ['age', 'external_uid', 'segments', 'gender', 'dnt', 'language']; +var NATIVE_MAPPING = { + body: 'description', + cta: 'ctatext', + image: { + serverName: 'main_image', + serverParams: { required: true, sizes: [{}] } + }, + icon: { + serverName: 'icon', + serverParams: { required: true, sizes: [{}] } + }, + sponsoredBy: 'sponsored_by' +}; + +/** + * Bidder adapter for /ut endpoint. Given the list of all ad unit tag IDs, + * sends out a bid request. When a bid response is back, registers the bid + * to Prebid.js. This adapter supports alias bidding. + */ +function AppnexusAstAdapter() { + var baseAdapter = new _adapter2['default']('appnexusAst'); + var bidRequests = {}; + var usersync = false; + + /* Prebid executes this function when the page asks to send out bid requests */ + baseAdapter.callBids = function (bidRequest) { + bidRequests = {}; + + var bids = bidRequest.bids || []; + var member = 0; + var userObj = void 0; + var tags = bids.filter((function (bid) { + return valid(bid); + })).map((function (bid) { + // map request id to bid object to retrieve adUnit code in callback + bidRequests[bid.bidId] = bid; + + var tag = {}; + tag.sizes = getSizes(bid.sizes); + tag.primary_size = tag.sizes[0]; + tag.uuid = bid.bidId; + if (bid.params.placementId) { + tag.id = parseInt(bid.params.placementId, 10); + } else { + tag.code = bid.params.invCode; + } + tag.allow_smaller_sizes = bid.params.allowSmallerSizes || false; + tag.prebid = true; + tag.disable_psa = true; + member = parseInt(bid.params.member, 10); + if (bid.params.reserve) { + tag.reserve = bid.params.reserve; + } + if (bid.params.position) { + tag.position = { 'above': 1, 'below': 2 }[bid.params.position] || 0; + } + if (bid.params.trafficSourceCode) { + tag.traffic_source_code = bid.params.trafficSourceCode; + } + if (bid.params.privateSizes) { + tag.private_sizes = getSizes(bid.params.privateSizes); + } + if (bid.params.supplyType) { + tag.supply_type = bid.params.supplyType; + } + if (bid.params.pubClick) { + tag.pubclick = bid.params.pubClick; + } + if (bid.params.extInvCode) { + tag.ext_inv_code = bid.params.extInvCode; + } + if (bid.params.externalImpId) { + tag.external_imp_id = bid.params.externalImpId; + } + if (!utils.isEmpty(bid.params.keywords)) { + tag.keywords = getKeywords(bid.params.keywords); + } + + if (bid.mediaType === 'native') { + tag.ad_types = ['native']; + + if (bid.nativeParams) { + var nativeRequest = {}; + + // map standard prebid native asset identifier to /ut parameters + // e.g., tag specifies `body` but /ut only knows `description` + // mapping may be in form {tag: ''} or + // {tag: {serverName: '', serverParams: {...}}} + Object.keys(bid.nativeParams).forEach((function (key) { + // check if one of the forms is used, otherwise + // a mapping wasn't specified so pass the key straight through + var requestKey = NATIVE_MAPPING[key] && NATIVE_MAPPING[key].serverName || NATIVE_MAPPING[key] || key; + + // if the mapping for this identifier specifies required server + // params via the `serverParams` object, merge that in + var params = _extends({}, NATIVE_MAPPING[key] && NATIVE_MAPPING[key].serverParams, bid.nativeParams[key]); + + nativeRequest[requestKey] = params; + })); + + tag.native = { layouts: [nativeRequest] }; + } + } + + if (bid.mediaType === 'video') { + tag.require_asset_url = true; + } + if (bid.params.video) { + tag.video = {}; + // place any valid video params on the tag + Object.keys(bid.params.video).filter((function (param) { + return VIDEO_TARGETING.includes(param); + })).forEach((function (param) { + return tag.video[param] = bid.params.video[param]; + })); + } + + if (bid.params.user) { + userObj = {}; + Object.keys(bid.params.user).filter((function (param) { + return USER_PARAMS.includes(param); + })).forEach((function (param) { + return userObj[param] = bid.params.user[param]; + })); + } + + return tag; + })); + + if (!utils.isEmpty(tags)) { + var payloadJson = { tags: [].concat(_toConsumableArray(tags)), user: userObj }; + if (member > 0) { + payloadJson.member_id = member; + } + var payload = JSON.stringify(payloadJson); + (0, _ajax.ajax)(ENDPOINT, handleResponse, payload, { + contentType: 'text/plain', + withCredentials: true + }); + } + }; + + /* Notify Prebid of bid responses so bids can get in the auction */ + function handleResponse(response) { + var parsed = void 0; + + try { + parsed = JSON.parse(response); + } catch (error) { + utils.logError(error); + } + + if (!parsed || parsed.error) { + var errorMessage = 'in response for ' + baseAdapter.getBidderCode() + ' adapter'; + if (parsed && parsed.error) { + errorMessage += ': ' + parsed.error; + } + utils.logError(errorMessage); + + // signal this response is complete + Object.keys(bidRequests).map((function (bidId) { + return bidRequests[bidId].placementCode; + })).forEach((function (placementCode) { + _bidmanager2['default'].addBidResponse(placementCode, createBid(_constants.STATUS.NO_BID)); + })); + return; + } + + parsed.tags.forEach((function (tag) { + var ad = getRtbBid(tag); + var cpm = ad && ad.cpm; + var type = ad && ad.ad_type; + + var status = void 0; + if (cpm !== 0 && SUPPORTED_AD_TYPES.includes(type)) { + status = _constants.STATUS.GOOD; + } else { + status = _constants.STATUS.NO_BID; + } + + if (type && !SUPPORTED_AD_TYPES.includes(type)) { + utils.logError(type + ' ad type not supported'); + } + + tag.bidId = tag.uuid; // bidfactory looks for bidId on requested bid + var bid = createBid(status, tag); + if (type === 'native') bid.mediaType = 'native'; + if (type === 'video') bid.mediaType = 'video'; + if (ad && ad.renderer_url) bid.mediaType = 'video-outstream'; + + if (bid.adId in bidRequests) { + var placement = bidRequests[bid.adId].placementCode; + _bidmanager2['default'].addBidResponse(placement, bid); + } + })); + + if (!usersync) { + var iframe = utils.createInvisibleIframe(); + iframe.src = '//acdn.adnxs.com/ib/static/usersync/v3/async_usersync.html'; + try { + document.body.appendChild(iframe); + } catch (error) { + utils.logError(error); + } + usersync = true; + } + } + + /* Check that a bid has required paramters */ + function valid(bid) { + if (bid.params.placementId || bid.params.member && bid.params.invCode) { + return bid; + } else { + utils.logError('bid requires placementId or (member and invCode) params'); + } + } + + /* Turn keywords parameter into ut-compatible format */ + function getKeywords(keywords) { + var arrs = []; + + utils._each(keywords, (function (v, k) { + if (utils.isArray(v)) { + var values = []; + utils._each(v, (function (val) { + val = utils.getValueString('keywords.' + k, val); + if (val) { + values.push(val); + } + })); + v = values; + } else { + v = utils.getValueString('keywords.' + k, v); + if (utils.isStr(v)) { + v = [v]; + } else { + return; + } // unsuported types - don't send a key + } + arrs.push({ key: k, value: v }); + })); + + return arrs; + } + + /* Turn bid request sizes into ut-compatible format */ + function getSizes(requestSizes) { + var sizes = []; + var sizeObj = {}; + + if (utils.isArray(requestSizes) && requestSizes.length === 2 && !utils.isArray(requestSizes[0])) { + sizeObj.width = parseInt(requestSizes[0], 10); + sizeObj.height = parseInt(requestSizes[1], 10); + sizes.push(sizeObj); + } else if ((typeof requestSizes === 'undefined' ? 'undefined' : _typeof(requestSizes)) === 'object') { + for (var i = 0; i < requestSizes.length; i++) { + var size = requestSizes[i]; + sizeObj = {}; + sizeObj.width = parseInt(size[0], 10); + sizeObj.height = parseInt(size[1], 10); + sizes.push(sizeObj); + } + } + + return sizes; + } + + function getRtbBid(tag) { + return tag && tag.ads && tag.ads.length && tag.ads.find((function (ad) { + return ad.rtb; + })); + } + + function outstreamRender(bid) { + // push to render queue because ANOutstreamVideo may not be loaded yet + bid.renderer.push((function () { + window.ANOutstreamVideo.renderAd({ + tagId: bid.adResponse.tag_id, + sizes: [bid.getSize().split('x')], + targetId: bid.adUnitCode, // target div id to render video + uuid: bid.adResponse.uuid, + adResponse: bid.adResponse, + rendererOptions: bid.renderer.getConfig() + }, handleOutstreamRendererEvents.bind(bid)); + })); + } + + function handleOutstreamRendererEvents(id, eventName) { + var bid = this; + bid.renderer.handleVideoEvent({ id: id, eventName: eventName }); + } + + /* Create and return a bid object based on status and tag */ + function createBid(status, tag) { + var ad = getRtbBid(tag); + var bid = _bidfactory2['default'].createBid(status, tag); + bid.code = baseAdapter.getBidderCode(); + bid.bidderCode = baseAdapter.getBidderCode(); + + if (ad && status === _constants.STATUS.GOOD) { + bid.cpm = ad.cpm; + bid.creative_id = ad.creative_id; + bid.dealId = ad.deal_id; + + if (ad.rtb.video) { + bid.width = ad.rtb.video.player_width; + bid.height = ad.rtb.video.player_height; + bid.vastUrl = ad.rtb.video.asset_url; + bid.descriptionUrl = ad.rtb.video.asset_url; + if (ad.renderer_url) { + // outstream video + + bid.adResponse = tag; + bid.renderer = _Renderer.Renderer.install({ + id: ad.renderer_id, + url: ad.renderer_url, + config: { adText: 'AppNexus Outstream Video Ad via Prebid.js' }, + loaded: false + }); + try { + bid.renderer.setRender(outstreamRender); + } catch (err) { + utils.logWarning('Prebid Error calling setRender on renderer', err); + } + + bid.renderer.setEventHandlers({ + impression: function impression() { + return utils.logMessage('AppNexus outstream video impression event'); + }, + loaded: function loaded() { + return utils.logMessage('AppNexus outstream video loaded event'); + }, + ended: function ended() { + utils.logMessage('AppNexus outstream renderer video event'); + document.querySelector('#' + bid.adUnitCode).style.display = 'none'; + } + }); + + bid.adResponse.ad = bid.adResponse.ads[0]; + bid.adResponse.ad.video = bid.adResponse.ad.rtb.video; + } + } else if (ad.rtb.native) { + var native = ad.rtb.native; + bid.native = { + title: native.title, + body: native.desc, + cta: native.ctatext, + sponsoredBy: native.sponsored, + image: native.main_img && native.main_img.url, + icon: native.icon && native.icon.url, + clickUrl: native.link.url, + impressionTrackers: native.impression_trackers + }; + } else { + bid.width = ad.rtb.banner.width; + bid.height = ad.rtb.banner.height; + bid.ad = ad.rtb.banner.content; + try { + var url = ad.rtb.trackers[0].impression_urls[0]; + var tracker = utils.createTrackPixelHtml(url); + bid.ad += tracker; + } catch (error) { + utils.logError('Error appending tracking pixel', error); + } + } + } + + return bid; + } + + return _extends(this, { + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode + }); +} + +_adaptermanager2['default'].registerBidAdapter(new AppnexusAstAdapter(), 'appnexusAst', { + supportedMediaTypes: ['video', 'native'] +}); + +module.exports = AppnexusAstAdapter; + +/***/ }) + +},[70]); +pbjsChunk([81],{ + +/***/ 72: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(73); + + +/***/ }), + +/***/ 73: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _utils = __webpack_require__(0); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var CONSTANTS = __webpack_require__(4); +var utils = __webpack_require__(0); +var adloader = __webpack_require__(5); +var bidmanager = __webpack_require__(2); +var bidfactory = __webpack_require__(3); +var Adapter = __webpack_require__(7)['default']; + +var AppNexusAdapter; +AppNexusAdapter = function AppNexusAdapter() { + var baseAdapter = new Adapter('appnexus'); + var usersync = false; + + baseAdapter.callBids = function (params) { + // var bidCode = baseAdapter.getBidderCode(); + + var anArr = params.bids; + + // var bidsCount = anArr.length; // set expected bids count for callback execution // bidmanager.setExpectedBidsCount(bidCode, bidsCount); @@ -5651,16 +6792,11 @@ AppNexusAdapter = function AppNexusAdapter() { } }; - return { + return _extends(this, { callBids: baseAdapter.callBids, setBidderCode: baseAdapter.setBidderCode, - createNew: AppNexusAdapter.createNew, buildJPTCall: buildJPTCall - }; -}; - -AppNexusAdapter.createNew = function () { - return new AppNexusAdapter(); + }); }; _adaptermanager2['default'].registerBidAdapter(new AppNexusAdapter(), 'appnexus'); @@ -5676,23 +6812,25 @@ module.exports = AppNexusAdapter; /***/ }) -},[70]); -pbjsChunk([70],{ +},[72]); +pbjsChunk([79],{ -/***/ 74: +/***/ 76: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(75); +module.exports = __webpack_require__(77); /***/ }), -/***/ 75: +/***/ 77: /***/ (function(module, exports, __webpack_require__) { "use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** @@ -5708,21 +6846,23 @@ var _bidmanager = __webpack_require__(2); var _constants = __webpack_require__(4); -var _url = __webpack_require__(10); +var _url = __webpack_require__(11); var _utils = __webpack_require__(0); var _adapter = __webpack_require__(7); +var _adapter2 = _interopRequireDefault(_adapter); + var _adaptermanager = __webpack_require__(1); var _adaptermanager2 = _interopRequireDefault(_adaptermanager); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } -var _createNew = (0, _adapter.createNew)('audienceNetwork'), - setBidderCode = _createNew.setBidderCode, - getBidderCode = _createNew.getBidderCode; +var _ref = new _adapter2['default']('audienceNetwork'), + setBidderCode = _ref.setBidderCode, + getBidderCode = _ref.getBidderCode; /** * Does this bid request contain valid parameters? @@ -5846,7 +6986,7 @@ var createSuccessBidResponse = function createSuccessBidResponse(placementId, si bid.fb_placementid = placementId; // Video attributes if (isVideo(format)) { - var vast = 'https://an.facebook.com/v1/instream/vast.xml?placementid=' + placementId + '&pageurl=' + encodeURIComponent(pageurl) + '&playerwidth=' + bid.width + '&playerheight=' + bid.height + '&bidid=' + bidId; + var vast = 'https://an.facebook.com/v1/instream/vast.xml?placementid=' + placementId + '&pageurl=' + pageurl + '&playerwidth=' + bid.width + '&playerheight=' + bid.height + '&bidid=' + bidId; bid.mediaType = 'video'; bid.vastUrl = vast; bid.descriptionUrl = vast; @@ -5899,7 +7039,7 @@ var callBids = function callBids(bidRequest) { if (placementids.length) { // Build URL var testmode = isTestmode(); - var pageurl = location.href; + var pageurl = encodeURIComponent(location.href); var search = { placementids: placementids, adformats: adformats, @@ -5962,9 +7102,13 @@ var callBids = function callBids(bidRequest) { * @property {Function} setBidderCode - used for bidder aliasing * @property {Function} getBidderCode - unique 'audienceNetwork' identifier */ -var AudienceNetwork = function AudienceNetwork() { - return { callBids: callBids, setBidderCode: setBidderCode, getBidderCode: getBidderCode }; -}; +function AudienceNetwork() { + return _extends(this, { + callBids: callBids, + setBidderCode: setBidderCode, + getBidderCode: getBidderCode + }); +} _adaptermanager2['default'].registerBidAdapter(new AudienceNetwork(), 'audienceNetwork', { supportedMediaTypes: ['video'] @@ -5974,18 +7118,10 @@ module.exports = AudienceNetwork; /***/ }) -},[74]); -pbjsChunk([61],{ - -/***/ 95: -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(96); +},[76]); +pbjsChunk([69],{ - -/***/ }), - -/***/ 96: +/***/ 100: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6050,33 +7186,72 @@ adaptermanager.registerBidAdapter(new DistrictmAdaptor(), 'districtmDMX'); module.exports = DistrictmAdaptor; +/***/ }), + +/***/ 99: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(100); + + /***/ }) -},[95]); -pbjsChunk([52],{ +},[99]); +pbjsChunk([57],{ -/***/ 113: +/***/ 123: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(114); +module.exports = __webpack_require__(124); /***/ }), -/***/ 114: +/***/ 124: /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -// Factory for creating the bidderAdaptor -var utils = __webpack_require__(0); -var bidfactory = __webpack_require__(3); -var bidmanager = __webpack_require__(2); -var adloader = __webpack_require__(5); -var adaptermanager = __webpack_require__(1); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // Factory for creating the bidderAdaptor +// jshint ignore:start + + +var _adapter = __webpack_require__(7); + +var _adapter2 = _interopRequireDefault(_adapter); + +var _bidfactory = __webpack_require__(3); + +var _bidfactory2 = _interopRequireDefault(_bidfactory); + +var _bidmanager = __webpack_require__(2); + +var _bidmanager2 = _interopRequireDefault(_bidmanager); + +var _utils = __webpack_require__(0); + +var utils = _interopRequireWildcard(_utils); + +var _constants = __webpack_require__(4); + +var _url = __webpack_require__(11); + +var url = _interopRequireWildcard(_url); + +var _adloader = __webpack_require__(5); + +var _adloader2 = _interopRequireDefault(_adloader); + +var _adaptermanager = __webpack_require__(1); + +var _adaptermanager2 = _interopRequireDefault(_adaptermanager); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var ADAPTER_NAME = 'INDEXEXCHANGE'; var ADAPTER_CODE = 'indexExchange'; @@ -6097,6 +7272,58 @@ var CONSTANTS = { var OPEN_MARKET = 'IOM'; var PRIVATE_MARKET = 'IPM'; +var VIDEO_REQUIRED_PARAMS_MAP = { + siteID: true, + playerType: true, + protocols: true, + maxduration: true +}; +var VIDEO_OPTIONAL_PARAMS_MAP = { + minduration: 0, + startdelay: 'preroll', + linearity: 'linear', + mimes: [], + allowVPAID: true, + apiList: [] +}; +var SUPPORTED_PLAYER_TYPES_MAP = { + HTML5: true, + FLASH: true +}; +var SUPPORTED_PROTOCOLS_MAP = { + 'VAST2': [2, 5], + 'VAST3': [3, 6] +}; +var SUPPORTED_API_MAP = { + FLASH: [1, 2], + HTML5: [2] +}; +var LINEARITY_MAP = { + linear: 1, + nonlinear: 2 +}; +var START_DELAY_MAP = { + preroll: 0, + midroll: -1, + postroll: -2 +}; +var SLOT_ID_PREFIX_MAP = { + preroll: 'pr', + midroll: 'm', + postroll: 'po' +}; +var DEFAULT_MIMES_MAP = { + FLASH: ['video/mp4', 'video/x-flv'], + HTML5: ['video/mp4', 'video/webm'] +}; +var DEFAULT_VPAID_MIMES_MAP = { + FLASH: ['application/x-shockwave-flash'], + HTML5: ['application/javascript'] +}; + +var BASE_CYGNUS_VIDEO_URL_INSECURE = 'http://as.casalemedia.com/cygnus?v=8&fn=pbjs.handleCygnusResponse'; +var BASE_CYGNUS_VIDEO_URL_SECURE = 'https://as-sec.casalemedia.com/cygnus?v=8&fn=pbjs.handleCygnusResponse'; + window.cygnus_index_parse_res = function (response) { try { if (response) { @@ -6191,7 +7418,7 @@ window.index_render = function (doc, targetID) { if (ad != null) { doc.write(ad); } else { - var url = window.location.protocol === 'https:' ? 'https://as-sec.casalemedia.com' : 'http://as.casalemedia.com'; + var url = utils.getTopWindowLocation().protocol === 'http:' ? 'http://as.casalemedia.com' : 'https://as-sec.casalemedia.com'; url += '/headerstats?type=RT&s=' + cygnus_index_args.siteID + '&u=' + encodeURIComponent(location.href) + '&r=' + _IndexRequestData.lastRequestID; var px_call = new Image(); px_call.src = url + '&blank=' + targetID; @@ -6419,12 +7646,12 @@ var cygnus_index_start = function cygnus_index_start() { var scriptSrc; if (getIndexDebugMode() == CONSTANTS.INDEX_DEBUG_MODE.mode.sandbox.queryValue.toUpperCase()) { this.siteID = CONSTANTS.INDEX_DEBUG_MODE.mode.sandbox.siteID; - scriptSrc = window.location.protocol === 'https:' ? 'https://sandbox.ht.indexexchange.com' : 'http://sandbox.ht.indexexchange.com'; + scriptSrc = utils.getTopWindowLocation().protocol === 'http:' ? 'http://sandbox.ht.indexexchange.com' : 'https://sandbox.ht.indexexchange.com'; utils.logMessage('IX DEBUG: Sandbox mode activated'); } else { - scriptSrc = window.location.protocol === 'https:' ? 'https://as-sec.casalemedia.com' : 'http://as.casalemedia.com'; + scriptSrc = utils.getTopWindowLocation().protocol === 'http:' ? 'http://as.casalemedia.com' : 'https://as-sec.casalemedia.com'; } - var prebidVersion = encodeURIComponent('0.27.0-pre'); + var prebidVersion = encodeURIComponent('0.28.0-pre'); scriptSrc += '/cygnus?v=7&fn=cygnus_index_parse_res&s=' + this.siteID + '&r=' + jsonURI + '&pid=pb' + prebidVersion; if (typeof this.timeoutDelay === 'number' && this.timeoutDelay % 1 === 0 && this.timeoutDelay >= 0) { scriptSrc += '&t=' + this.timeoutDelay; @@ -6471,6 +7698,8 @@ var cygnus_index_start = function cygnus_index_start() { }; var IndexExchangeAdapter = function IndexExchangeAdapter() { + var baseAdapter = new _adapter2['default']('indexExchange'); + var slotIdMap = {}; var requiredParams = [ /* 0 */ @@ -6478,10 +7707,22 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { /* 1 */ 'siteID']; var firstAdUnitCode = ''; + var bidRequests = {}; + + function passOnBid(adUnitCode) { + var bid = _bidfactory2['default'].createBid(2); + bid.bidderCode = ADAPTER_CODE; + _bidmanager2['default'].addBidResponse(adUnitCode, bid); + return bid; + } + + function _callBids(request) { + if (typeof request === 'undefined' || utils.isEmpty(request)) { + return; + } + + var bidArr = request.bids; - function _callBids(request) { - var bidArr = request.bids; - if (typeof window._IndexRequestData === 'undefined') { window._IndexRequestData = {}; window._IndexRequestData.impIDToSlotID = {}; @@ -6490,128 +7731,35 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { // clear custom targets at the beginning of every request _IndexRequestData.targetAggregate = { 'open': {}, 'private': {} }; - if (!utils.hasValidBidRequest(bidArr[0].params, requiredParams, ADAPTER_NAME)) { - return; - } - // Our standard is to always bid for all known slots. cygnus_index_args.slots = []; - var expectedBids = 0; + var videoImpressions = []; // Grab the slot level data for cygnus_index_args - for (var i = 0; i < bidArr.length; i++) { - var bid = bidArr[i]; - var sizeID = 0; - - expectedBids++; - - // Expecting nested arrays for sizes - if (!(bid.sizes[0] instanceof Array)) { - bid.sizes = [bid.sizes]; - } - - // Create index slots for all bids and sizes - for (var j = 0; j < bid.sizes.length; j++) { - var validSize = false; - for (var k = 0; k < cygnus_index_adunits.length; k++) { - if (bid.sizes[j][0] == cygnus_index_adunits[k][0] && bid.sizes[j][1] == cygnus_index_adunits[k][1]) { - bid.sizes[j][0] = Number(bid.sizes[j][0]); - bid.sizes[j][1] = Number(bid.sizes[j][1]); - validSize = true; - break; - } - } - - if (!validSize) { - utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to no valid sizes'); - continue; - } - - var usingSizeSpecificSiteID = false; - // Check for size defined in bidder params - if (bid.params.size && bid.params.size instanceof Array) { - if (!(bid.sizes[j][0] == bid.params.size[0] && bid.sizes[j][1] == bid.params.size[1])) { - continue; - } - usingSizeSpecificSiteID = true; - } - - if (bid.params.timeout && typeof cygnus_index_args.timeout === 'undefined') { - cygnus_index_args.timeout = bid.params.timeout; - } - - var siteID = Number(bid.params.siteID); - if (typeof siteID !== 'number' || siteID % 1 != 0 || siteID <= 0) { - utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to invalid siteID'); - continue; - } - if (siteID && typeof cygnus_index_args.siteID === 'undefined') { - cygnus_index_args.siteID = siteID; - } - - if (utils.hasValidBidRequest(bid.params, requiredParams, ADAPTER_NAME)) { - firstAdUnitCode = bid.placementCode; - var slotID = bid.params[requiredParams[0]]; - if (typeof slotID !== 'string' && typeof slotID !== 'number') { - utils.logError(ADAPTER_NAME + ' bid contains invalid slot ID from ' + bid.placementCode + '. Discarding slot'); - continue; - } - - sizeID++; - var size = { - width: bid.sizes[j][0], - height: bid.sizes[j][1] - }; - - var slotName = usingSizeSpecificSiteID ? String(slotID) : slotID + '_' + sizeID; - slotIdMap[slotName] = bid; - - // Doesn't need the if(primary_request) conditional since we are using the mergeSlotInto function which is safe - cygnus_index_args.slots = mergeSlotInto({ - id: slotName, - width: size.width, - height: size.height, - siteID: siteID || cygnus_index_args.siteID - }, cygnus_index_args.slots); - - if (bid.params.tier2SiteID) { - var tier2SiteID = Number(bid.params.tier2SiteID); - if (typeof tier2SiteID !== 'undefined' && !tier2SiteID) { - continue; - } - - cygnus_index_args.slots = mergeSlotInto({ - id: 'T1_' + slotName, - width: size.width, - height: size.height, - siteID: tier2SiteID - }, cygnus_index_args.slots); - } - - if (bid.params.tier3SiteID) { - var tier3SiteID = Number(bid.params.tier3SiteID); - if (typeof tier3SiteID !== 'undefined' && !tier3SiteID) { - continue; - } - - cygnus_index_args.slots = mergeSlotInto({ - id: 'T2_' + slotName, - width: size.width, - height: size.height, - siteID: tier3SiteID - }, cygnus_index_args.slots); - } + bidArr.forEach((function (bid) { + if (bid.mediaType === 'video') { + var impression = buildVideoImpressions(bid, bidRequests); + if (typeof impression !== 'undefined') { + videoImpressions.push(impression); } + } else { + cygnus_index_init(bid); } + })); + + if (videoImpressions.length > 0) { + sendVideoRequest(request.bidderRequestId, videoImpressions); } if (cygnus_index_args.slots.length > 20) { utils.logError('Too many unique sizes on slots, will use the first 20.', ADAPTER_NAME); } - // bidmanager.setExpectedBidsCount(ADAPTER_CODE, expectedBids); - adloader.loadScript(cygnus_index_start()); + if (cygnus_index_args.slots.length > 0) { + // bidmanager.setExpectedBidsCount(ADAPTER_CODE, expectedBids); + _adloader2['default'].loadScript(cygnus_index_start()); + } var responded = false; @@ -6624,7 +7772,6 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { try { var indexObj = _IndexRequestData.targetIDToBid; - var lookupObj = cygnus_index_args; // Grab all the bids for each slot for (var adSlotId in slotIdMap) { @@ -6648,7 +7795,7 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { var slotObj = getSlotObj(cygnus_index_args, tier + slotID); // Bid is for the current slot if (slotID === adSlotId) { - var bid = bidfactory.createBid(1); + var bid = _bidfactory2['default'].createBid(1); bid.cpm = currentCPM / 100; bid.ad = indexObj[cpmAndSlotId][0]; bid.bidderCode = ADAPTER_CODE; @@ -6671,19 +7818,14 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { } } - var currentBid; - if (bids.length > 0) { // Add all bid responses for (var i = 0; i < bids.length; i++) { - bidmanager.addBidResponse(adUnitCode, bids[i]); + _bidmanager2['default'].addBidResponse(adUnitCode, bids[i]); } // No bids for expected bid, pass bid } else { - var bid = bidfactory.createBid(2); - bid.bidderCode = ADAPTER_CODE; - currentBid = bid; - bidmanager.addBidResponse(adUnitCode, currentBid); + passOnBid(adUnitCode); } } } catch (e) { @@ -6700,6 +7842,190 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { }; } + function cygnus_index_init(bid) { + if (!utils.hasValidBidRequest(bid.params, requiredParams, ADAPTER_NAME)) { + passOnBid(bid.placementCode); + return; + } + + var sizeID = 0; + + // Expecting nested arrays for sizes + if (!utils.isArray(bid.sizes[0])) { + bid.sizes = [bid.sizes]; + } + + // Create index slots for all bids and sizes + for (var j = 0; j < bid.sizes.length; j++) { + var validSize = false; + for (var k = 0; k < cygnus_index_adunits.length; k++) { + if (bid.sizes[j][0] == cygnus_index_adunits[k][0] && bid.sizes[j][1] == cygnus_index_adunits[k][1]) { + bid.sizes[j][0] = Number(bid.sizes[j][0]); + bid.sizes[j][1] = Number(bid.sizes[j][1]); + validSize = true; + break; + } + } + + if (!validSize) { + utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to no valid sizes'); + passOnBid(bid.placementCode); + continue; + } + + var usingSizeSpecificSiteID = false; + // Check for size defined in bidder params + if (bid.params.size && utils.isArray(bid.params.size)) { + if (!(bid.sizes[j][0] == bid.params.size[0] && bid.sizes[j][1] == bid.params.size[1])) { + passOnBid(bid.placementCode); + continue; + } + usingSizeSpecificSiteID = true; + } + + if (bid.params.timeout && typeof cygnus_index_args.timeout === 'undefined') { + cygnus_index_args.timeout = bid.params.timeout; + } + + var siteID = Number(bid.params.siteID); + if (typeof siteID !== 'number' || siteID % 1 != 0 || siteID <= 0) { + utils.logMessage(ADAPTER_NAME + ' slot excluded from request due to invalid siteID'); + passOnBid(bid.placementCode); + continue; + } + if (siteID && typeof cygnus_index_args.siteID === 'undefined') { + cygnus_index_args.siteID = siteID; + } + + if (utils.hasValidBidRequest(bid.params, requiredParams, ADAPTER_NAME)) { + firstAdUnitCode = bid.placementCode; + var slotID = bid.params[requiredParams[0]]; + if (typeof slotID !== 'string' && typeof slotID !== 'number') { + utils.logError(ADAPTER_NAME + ' bid contains invalid slot ID from ' + bid.placementCode + '. Discarding slot'); + passOnBid(bid.placementCode); + continue; + } + + sizeID++; + var size = { + width: bid.sizes[j][0], + height: bid.sizes[j][1] + }; + + var slotName = usingSizeSpecificSiteID ? String(slotID) : slotID + '_' + sizeID; + slotIdMap[slotName] = bid; + + // Doesn't need the if(primary_request) conditional since we are using the mergeSlotInto function which is safe + cygnus_index_args.slots = mergeSlotInto({ + id: slotName, + width: size.width, + height: size.height, + siteID: siteID || cygnus_index_args.siteID + }, cygnus_index_args.slots); + + if (bid.params.tier2SiteID) { + var tier2SiteID = Number(bid.params.tier2SiteID); + if (typeof tier2SiteID !== 'undefined' && !tier2SiteID) { + continue; + } + + cygnus_index_args.slots = mergeSlotInto({ + id: 'T1_' + slotName, + width: size.width, + height: size.height, + siteID: tier2SiteID + }, cygnus_index_args.slots); + } + + if (bid.params.tier3SiteID) { + var tier3SiteID = Number(bid.params.tier3SiteID); + if (typeof tier3SiteID !== 'undefined' && !tier3SiteID) { + continue; + } + + cygnus_index_args.slots = mergeSlotInto({ + id: 'T2_' + slotName, + width: size.width, + height: size.height, + siteID: tier3SiteID + }, cygnus_index_args.slots); + } + } + } + } + + function sendVideoRequest(requestID, videoImpressions) { + var cygnusRequest = { + 'id': requestID, + 'imp': videoImpressions, + 'site': { + 'page': utils.getTopWindowUrl() + } + }; + + if (!utils.isEmpty(cygnusRequest.imp)) { + var cygnusRequestUrl = createCygnusRequest(cygnusRequest.imp[0].ext.siteID, cygnusRequest); + + _adloader2['default'].loadScript(cygnusRequestUrl); + } + } + + function buildVideoImpressions(bid) { + if (!validateBid(bid)) { + return; + } + + bid = transformBid(bid); + + // map request id to bid object to retrieve adUnit code in callback + bidRequests[bid.bidId] = {}; + bidRequests[bid.bidId].prebid = bid; + + var cygnusImpression = {}; + cygnusImpression.id = bid.bidId; + + cygnusImpression.ext = {}; + cygnusImpression.ext.siteID = bid.params.video.siteID; + delete bid.params.video.siteID; + + var podType = bid.params.video.startdelay; + if (bid.params.video.startdelay === 0) { + podType = 'preroll'; + } else if (typeof START_DELAY_MAP[bid.params.video.startdelay] === 'undefined') { + podType = 'midroll'; + } + cygnusImpression.ext.sid = [SLOT_ID_PREFIX_MAP[podType], 1, 1, 's'].join('_'); + + cygnusImpression.video = {}; + + if (bid.params.video) { + Object.keys(bid.params.video).filter((function (param) { + return typeof VIDEO_REQUIRED_PARAMS_MAP[param] !== 'undefined' || typeof VIDEO_OPTIONAL_PARAMS_MAP[param] !== 'undefined'; + })).forEach((function (param) { + if (param === 'startdelay' && typeof START_DELAY_MAP[bid.params.video[param]] !== 'undefined') { + bid.params.video[param] = START_DELAY_MAP[bid.params.video[param]]; + } + if (param === 'linearity' && typeof LINEARITY_MAP[bid.params.video[param]] !== 'undefined') { + bid.params.video[param] = LINEARITY_MAP[bid.params.video[param]]; + } + cygnusImpression.video[param] = bid.params.video[param]; + })); + } else { + return; + } + + var bidSize = getSizes(bid.sizes).shift(); + if (!bidSize || !bidSize.width || !bidSize.height) { + return; + } + cygnusImpression.video.w = bidSize.width; + cygnusImpression.video.h = bidSize.height; + + bidRequests[bid.bidId].cygnus = cygnusImpression; + + return cygnusImpression; + } + /* Function in order to add a slot into the list if it hasn't been created yet, else it returns the same list. */ @@ -6727,36 +8053,528 @@ var IndexExchangeAdapter = function IndexExchangeAdapter() { function logErrorBidResponse() { // no bid response - var bid = bidfactory.createBid(2); + var bid = _bidfactory2['default'].createBid(2); bid.bidderCode = ADAPTER_CODE; // log error to first add unit - bidmanager.addBidResponse(firstAdUnitCode, bid); + _bidmanager2['default'].addBidResponse(firstAdUnitCode, bid); } - return { - callBids: _callBids + function createCygnusRequest(siteID, cygnusRequest) { + var cygnusUrl = window.location.protocol === 'https:' ? url.parse(BASE_CYGNUS_VIDEO_URL_SECURE) : url.parse(BASE_CYGNUS_VIDEO_URL_INSECURE); + cygnusUrl.search.s = siteID; + cygnusUrl.search.r = encodeURIComponent(JSON.stringify(cygnusRequest)); + var formattedCygnusUrl = url.format(cygnusUrl); + return formattedCygnusUrl; + } + + /* Notify Prebid of bid responses so bids can get in the auction */ + pbjs.handleCygnusResponse = function (response) { + if (!response || !response.seatbid || utils.isEmpty(response.seatbid)) { + utils.logInfo('Cygnus returned no bids'); + + // signal this response is complete + Object.keys(bidRequests).forEach((function (bidId) { + var prebidRequest = bidRequests[bidId].prebid; + var bid = createBidObj(_constants.STATUS.NO_BID, prebidRequest); + utils.logInfo(JSON.stringify(bid)); + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, bid); + })); + + return; + } + + response.seatbid.forEach((function (seat) { + seat.bid.forEach((function (cygnusBid) { + var validBid = true; + + if (typeof bidRequests[cygnusBid.impid] === 'undefined') { + utils.logInfo('Cygnus returned mismatched id'); + + // signal this response is complete + Object.keys(bidRequests).forEach((function (bidId) { + var prebidRequest = bidRequests[bidId].prebid; + var bid = createBidObj(_constants.STATUS.NO_BID, prebidRequest); + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, bid); + })); + return; + } + + if (!cygnusBid.ext.vasturl) { + utils.logInfo('Cygnus returned no vast url'); + validBid = false; + } + + if (url.parse(cygnusBid.ext.vasturl).host === window.location.host) { + utils.logInfo('Cygnus returned no vast url'); + validBid = false; + } + + var cpm = void 0; + if (typeof cygnusBid.ext.pricelevel === 'string') { + var priceLevel = cygnusBid.ext.pricelevel; + if (priceLevel.charAt(0) === '_') priceLevel = priceLevel.slice(1); + cpm = priceLevel / 100; + if (!utils.isNumber(cpm) || isNaN(cpm)) { + utils.logInfo('Cygnus returned invalid price'); + validBid = false; + } + } else { + validBid = false; + } + + var prebidRequest = bidRequests[cygnusBid.impid].prebid; + var cygnusRequest = bidRequests[cygnusBid.impid].cygnus; + + if (!validBid) { + var _bid = createBidObj(_constants.STATUS.NO_BID, prebidRequest); + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, _bid); + return; + } + + var bid = createBidObj(_constants.STATUS.GOOD, prebidRequest); + bid.cpm = cpm; + bid.width = cygnusRequest.video.w; + bid.height = cygnusRequest.video.h; + bid.vastUrl = cygnusBid.ext.vasturl; + bid.descriptionUrl = cygnusBid.ext.vasturl; + bid.mediaType = 'video'; + + _bidmanager2['default'].addBidResponse(prebidRequest.placementCode, bid); + })); + })); + + bidRequests = {}; }; + + function createBidObj(status, request) { + var bid = _bidfactory2['default'].createBid(status, request); + bid.code = baseAdapter.getBidderCode(); + bid.bidderCode = baseAdapter.getBidderCode(); + + return bid; + } + + /* Check that a bid has required paramters */ + function validateBid(bid) { + if (bid.mediaType === 'video' && utils.hasValidBidRequest(bid.params.video, Object.keys(VIDEO_REQUIRED_PARAMS_MAP), ADAPTER_NAME) && isValidSite(bid.params.video.siteID) && isValidPlayerType(bid.params.video.playerType) && isValidProtocolArray(bid.params.video.protocols) && isValidDuration(bid.params.video.maxduration) && bid.params.video.maxduration > 0) { + return bid; + } + } + + function isValidSite(siteID) { + var intSiteID = +siteID; + if (isNaN(intSiteID) || !utils.isNumber(intSiteID) || intSiteID < 0 || utils.isArray(siteID)) { + utils.logError('Site ID is invalid, must be a number > 0. Got: ' + siteID); + return false; + } + return true; + } + + function isValidPlayerType(playerType) { + if (typeof playerType === 'undefined' || !utils.isStr(playerType)) { + utils.logError('Player type is invalid, must be one of: ' + Object.keys(SUPPORTED_PLAYER_TYPES_MAP)); + return false; + } + playerType = playerType.toUpperCase(); + if (!SUPPORTED_PLAYER_TYPES_MAP[playerType]) { + utils.logError('Player type is invalid, must be one of: ' + Object.keys(SUPPORTED_PLAYER_TYPES_MAP)); + return false; + } + return true; + } + + function isValidProtocolArray(protocolArray) { + if (!utils.isArray(protocolArray) || utils.isEmpty(protocolArray)) { + utils.logError('Protocol array is not an array. Got: ' + protocolArray); + return false; + } else { + for (var i = 0; i < protocolArray.length; i++) { + var protocol = protocolArray[i]; + if (!SUPPORTED_PROTOCOLS_MAP[protocol]) { + utils.logError('Protocol array contains an invalid protocol, must be one of: ' + SUPPORTED_PROTOCOLS_MAP + '. Got: ' + protocol); + return false; + } + } + } + return true; + } + + function isValidDuration(duration) { + var intDuration = +duration; + if (isNaN(intDuration) || !utils.isNumber(intDuration) || utils.isArray(duration)) { + utils.logError('Duration is invalid, must be a number. Got: ' + duration); + return false; + } + return true; + } + + function isValidMimeArray(mimeArray) { + if (!utils.isArray(mimeArray) || utils.isEmpty(mimeArray)) { + utils.logError('MIMEs array is not an array. Got: ' + mimeArray); + return false; + } else { + for (var i = 0; i < mimeArray.length; i++) { + var mimeType = mimeArray[i]; + if (!utils.isStr(mimeType) || utils.isEmptyStr(mimeType) || !/^\w+\/[\w-]+$/.test(mimeType)) { + utils.logError('MIMEs array contains an invalid MIME type. Got: ' + mimeType); + return false; + } + } + } + return true; + } + + function isValidLinearity(linearity) { + if (!LINEARITY_MAP[linearity]) { + utils.logInfo('Linearity is invalid, must be one of: ' + Object.keys(LINEARITY_MAP) + '. Got: ' + linearity); + return false; + } + return true; + } + + function isValidStartDelay(startdelay) { + if (typeof START_DELAY_MAP[startdelay] === 'undefined') { + var intStartdelay = +startdelay; + if (isNaN(intStartdelay) || !utils.isNumber(intStartdelay) || intStartdelay < -2 || utils.isArray(startdelay)) { + utils.logInfo('Start delay is invalid, must be a number >= -2. Got: ' + startdelay); + return false; + } + } + return true; + } + + function isValidApiArray(apiArray, playerType) { + if (!utils.isArray(apiArray) || utils.isEmpty(apiArray)) { + utils.logInfo('API array is not an array. Got: ' + apiArray); + return false; + } else { + for (var i = 0; i < apiArray.length; i++) { + var api = +apiArray[i]; + if (isNaN(api) || !SUPPORTED_API_MAP[playerType].includes(api)) { + utils.logInfo('API array contains an invalid API version. Got: ' + api); + return false; + } + } + } + return true; + } + + function transformBid(bid) { + bid.params.video.siteID = +bid.params.video.siteID; + bid.params.video.maxduration = +bid.params.video.maxduration; + + bid.params.video.protocols = bid.params.video.protocols.reduce((function (arr, protocol) { + return arr.concat(SUPPORTED_PROTOCOLS_MAP[protocol]); + }), []); + + var minduration = bid.params.video.minduration; + if (typeof minduration === 'undefined' || !isValidDuration(minduration)) { + utils.logInfo('Using default value for \'minduration\', default: ' + VIDEO_OPTIONAL_PARAMS_MAP.minduration); + bid.params.video.minduration = VIDEO_OPTIONAL_PARAMS_MAP.minduration; + } + + var startdelay = bid.params.video.startdelay; + if (typeof startdelay === 'undefined' || !isValidStartDelay(startdelay)) { + utils.logInfo('Using default value for \'startdelay\', default: ' + VIDEO_OPTIONAL_PARAMS_MAP.startdelay); + bid.params.video.startdelay = VIDEO_OPTIONAL_PARAMS_MAP.startdelay; + } + + var linearity = bid.params.video.linearity; + if (typeof linearity === 'undefined' || !isValidLinearity(linearity)) { + utils.logInfo('Using default value for \'linearity\', default: ' + VIDEO_OPTIONAL_PARAMS_MAP.linearity); + bid.params.video.linearity = VIDEO_OPTIONAL_PARAMS_MAP.linearity; + } + + var mimes = bid.params.video.mimes; + var playerType = bid.params.video.playerType.toUpperCase(); + if (typeof mimes === 'undefined' || !isValidMimeArray(mimes)) { + utils.logInfo('Using default value for \'mimes\', player type: \'' + playerType + '\', default: ' + DEFAULT_MIMES_MAP[playerType]); + bid.params.video.mimes = DEFAULT_MIMES_MAP[playerType]; + } + + var apiList = bid.params.video.apiList; + if (typeof apiList !== 'undefined' && !isValidApiArray(apiList, playerType)) { + utils.logInfo('Removing invalid api versions from api list.'); + if (utils.isArray(apiList)) { + bid.params.video.apiList = apiList.filter((function (api) { + return SUPPORTED_API_MAP[playerType].includes(api); + })); + } else { + bid.params.video.apiList = []; + } + } + + if (typeof apiList === 'undefined' && bid.params.video.allowVPAID && utils.isA(bid.params.video.allowVPAID, 'Boolean')) { + bid.params.video.mimes = bid.params.video.mimes.concat(DEFAULT_VPAID_MIMES_MAP[playerType]); + bid.params.video.apiList = SUPPORTED_API_MAP[playerType]; + } + + if (utils.isEmpty(bid.params.video.apiList)) { + utils.logInfo('API list is empty, VPAID ads will not be requested.'); + delete bid.params.video.apiList; + } + + delete bid.params.video.playerType; + delete bid.params.video.allowVPAID; + + return bid; + } + + /* Turn bid request sizes into ut-compatible format */ + function getSizes(requestSizes) { + var sizes = []; + var sizeObj = {}; + + if (utils.isArray(requestSizes) && requestSizes.length === 2 && !utils.isArray(requestSizes[0])) { + if (!utils.isNumber(requestSizes[0]) || !utils.isNumber(requestSizes[1])) { + return sizes; + } + sizeObj.width = requestSizes[0]; + sizeObj.height = requestSizes[1]; + sizes.push(sizeObj); + } else if ((typeof requestSizes === 'undefined' ? 'undefined' : _typeof(requestSizes)) === 'object') { + for (var i = 0; i < requestSizes.length; i++) { + var size = requestSizes[i]; + sizeObj = {}; + sizeObj.width = parseInt(size[0], 10); + sizeObj.height = parseInt(size[1], 10); + sizes.push(sizeObj); + } + } + + return sizes; + } + + return _extends(this, { + callBids: _callBids + }); }; -adaptermanager.registerBidAdapter(new IndexExchangeAdapter(), 'indexExchange'); +_adaptermanager2['default'].registerBidAdapter(new IndexExchangeAdapter(), 'indexExchange', { + supportedMediaTypes: ['video'] +}); module.exports = IndexExchangeAdapter; /***/ }) -},[113]); -pbjsChunk([30],{ +},[123]); +pbjsChunk([45],{ + +/***/ 149: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(150); + + +/***/ }), + +/***/ 150: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var bidfactory = __webpack_require__(3); +var bidmanager = __webpack_require__(2); +var ajax = __webpack_require__(6); +var CONSTANTS = __webpack_require__(4); +var utils = __webpack_require__(0); +var adaptermanager = __webpack_require__(1); + +function MobfoxAdapter() { + var BIDDER_CODE = 'mobfox'; + var BID_REQUEST_BASE_URL = 'https://my.mobfox.com/request.php'; + + // request + function buildQueryStringFromParams(params) { + for (var key in params) { + if (params.hasOwnProperty(key)) { + if (params[key] === undefined) { + delete params[key]; + } else { + params[key] = encodeURIComponent(params[key]); + } + } + } + + return utils._map(Object.keys(params), (function (key) { + return key + '=' + params[key]; + })).join('&'); + } + + function buildBidRequest(bid) { + var bidParams = bid.params; + + var requestParams = { + // -------------------- Mandatory Parameters ------------------ + rt: bidParams.rt || 'api-fetchip', + r_type: bidParams.r_type || 'banner', + r_resp: bidParams.r_resp || 'json', // string | vast20 + // i: bidParams.i || undefined , // string | 69.197.148.18 + s: bidParams.s, // string | 80187188f458cfde788d961b6882fd53 + u: bidParams.u || window.navigator.userAgent, // string + + // ------------------- Global Parameters ---------------------- + adspace_width: bidParams.adspace_width || bid.sizes[0][0], // integer | 320 + adspace_height: bidParams.adspace_height || bid.sizes[0][1], // integer | 48 + r_floor: bidParams.r_floor || undefined, // 0.8 + + o_andadvid: bidParams.o_andadvid || undefined, // 'c6292267-56ad-4326-965d-deef6fcd5er9' + longitude: bidParams.longitude || undefined, // 12.12 + latitude: bidParams.latitude || undefined, // 280.12 + demo_age: bidParams.demo_age || undefined, // 1978 + + // ------------------- banner / interstitial ---------------------- + adspace_strict: bidParams.adspace_strict || undefined, + + // ------------------- interstitial / video ---------------------- + imp_instl: bidParams.imp_instl || undefined, // integer | 1 + + // ------------------- mraid ---------------------- + c_mraid: bidParams.c_mraid || undefined, // integer | 1 + + // ------------------- video ---------------------- + v_dur_min: bidParams.v_dur_min || undefined, // integer | 0 + v_dur_max: bidParams.v_dur_max || undefined, // integer | 999 + v_autoplay: bidParams.v_autoplay || undefined, // integer | 1 + v_startmute: bidParams.v_startmute || undefined, // integer | 0 + v_rewarded: bidParams.v_rewarded || undefined, // integer | 0 + v_api: bidParams.v_api || undefined, // string | vpaid20 + n_ver: bidParams.n_ver || undefined, // + n_adunit: bidParams.n_adunit || undefined, // + n_layout: bidParams.n_layout || undefined, // + n_context: bidParams.n_context || undefined, // + n_plcmttype: bidParams.n_plcmttype || undefined, // + n_img_icon_req: bidParams.n_img_icon_req || undefined, // boolean0 + n_img_icon_size: bidParams.n_img_icon_size || undefined, // string80 + n_img_large_req: bidParams.n_img_large_req || undefined, // boolean0 + n_img_large_w: bidParams.n_img_large_w || undefined, // integer1200 + n_img_large_h: bidParams.n_img_large_h || undefined, // integer627 + n_title_req: bidParams.n_title_req || undefined, // boolean0 + n_title_len: bidParams.n_title_len || undefined, // string25 + n_desc_req: bidParams.n_desc_req || undefined, // boolean0 + n_desc_len: bidParams.n_desc_len || undefined, // string140 + n_rating_req: bidParams.n_rating_req || undefined + }; + + return requestParams; + } + + function sendBidRequest(bid) { + var requestParams = buildBidRequest(bid); + var queryString = buildQueryStringFromParams(requestParams); + + ajax.ajax(BID_REQUEST_BASE_URL + '?' + queryString, { + success: function success(resp, xhr) { + if (xhr.getResponseHeader('Content-Type') == 'application/json') { + try { + resp = JSON.parse(resp); + } catch (e) { + resp = { error: resp }; + } + } + onBidResponse({ + data: resp, + xhr: xhr + }, bid); + }, + error: function error(err) { + if (xhr.getResponseHeader('Content-Type') == 'application/json') { + try { + err = JSON.parse(err); + } catch (e) {} + ; + } + onBidResponseError(bid, [err]); + } + }); + } + + // response + function onBidResponseError(bid, err) { + utils.logError.apply(utils, ['Bid Response Error', bid].concat(_toConsumableArray(err))); + var bidResponse = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bid); + bidResponse.bidderCode = BIDDER_CODE; + bidmanager.addBidResponse(bid.placementCode, bidResponse); + } + + function onBidResponse(bidderResponse, bid) { + // transform the response to a valid prebid response + try { + var bidResponse = transformResponse(bidderResponse, bid); + bidmanager.addBidResponse(bid.placementCode, bidResponse); + } catch (e) { + onBidResponseError(bid, [e]); + } + } + + function transformResponse(bidderResponse, bid) { + var responseBody = bidderResponse.data; + + // Validate Request + var err = responseBody.error; + if (err) { + throw err; + } + + var htmlString = responseBody.request && responseBody.request.htmlString; + if (!htmlString) { + throw ['htmlString is missing', responseBody]; + } + + var cpm = void 0; + var cpmHeader = bidderResponse.xhr.getResponseHeader('X-Pricing-CPM'); + try { + cpm = Number(cpmHeader); + } catch (e) { + throw ['Invalid CPM value:', cpmHeader]; + } + + // Validations passed - Got bid + var bidResponse = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bid); + bidResponse.bidderCode = BIDDER_CODE; + + bidResponse.ad = htmlString; + bidResponse.cpm = cpm; + + bidResponse.width = bid.sizes[0][0]; + bidResponse.height = bid.sizes[0][1]; + + return bidResponse; + } + + // prebid api + function callBids(params) { + var bids = params.bids || []; + bids.forEach(sendBidRequest); + } + + return { + callBids: callBids + }; +} + +adaptermanager.registerBidAdapter(new MobfoxAdapter(), 'mobfox'); +module.exports = MobfoxAdapter; + +/***/ }) + +},[149]); +pbjsChunk([31],{ -/***/ 163: +/***/ 183: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(164); +module.exports = __webpack_require__(184); /***/ }), -/***/ 164: +/***/ 184: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6770,7 +8588,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol var _adapter = __webpack_require__(7); -var Adapter = _interopRequireWildcard(_adapter); +var _adapter2 = _interopRequireDefault(_adapter); var _bidfactory = __webpack_require__(3); @@ -6792,10 +8610,10 @@ var _ajax = __webpack_require__(6); var _constants = __webpack_require__(4); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var RUBICON_BIDDER_CODE = 'rubicon'; // use deferred function call since version isn't defined yet at this point @@ -6819,6 +8637,7 @@ var sizeMap = { 8: '120x600', 9: '160x600', 10: '300x600', + 13: '200x200', 14: '250x250', 15: '300x250', 16: '336x280', @@ -6856,13 +8675,17 @@ var sizeMap = { 113: '1000x300', 117: '320x100', 125: '800x250', - 126: '200x600' + 126: '200x600', + 195: '600x300' }; utils._each(sizeMap, (function (item, key) { return sizeMap[item] = key; })); function RubiconAdapter() { + var baseAdapter = new _adapter2['default'](RUBICON_BIDDER_CODE); + var hasUserSyncFired = false; + function _callBids(bidderRequest) { var bids = bidderRequest.bids || []; @@ -6910,7 +8733,7 @@ function RubiconAdapter() { function addErrorBid() { var badBid = _bidfactory2['default'].createBid(_constants.STATUS.NO_BID, bid); - badBid.bidderCode = bid.bidder; + badBid.bidderCode = baseAdapter.getBidderCode(); _bidmanager2['default'].addBidResponse(bid.placementCode, badBid); } })); @@ -6922,7 +8745,7 @@ function RubiconAdapter() { function _getDigiTrustQueryParams() { function getDigiTrustId() { - var digiTrustUser = window.DigiTrust && window.DigiTrust.getUser({ member: 'T9QSFKPDN9' }); + var digiTrustUser = window.DigiTrust && (pbjs.getConfig('digiTrustId') || window.DigiTrust.getUser({ member: 'T9QSFKPDN9' })); return digiTrustUser && digiTrustUser.success && digiTrustUser.identity || null; } var digiTrustId = getDigiTrustId(); @@ -7061,10 +8884,9 @@ function RubiconAdapter() { }; function handleRpCB(responseText, bidRequest) { - var responseObj = JSON.parse(responseText), - // can throw - ads = responseObj.ads, - adResponseKey = bidRequest.placementCode; + var responseObj = JSON.parse(responseText); // can throw + var ads = responseObj.ads; + var adResponseKey = bidRequest.placementCode; // check overall response if ((typeof responseObj === 'undefined' ? 'undefined' : _typeof(responseObj)) !== 'object' || responseObj.status !== 'ok') { @@ -7092,8 +8914,9 @@ function RubiconAdapter() { // store bid response // bid status is good (indicating 1) var bid = _bidfactory2['default'].createBid(_constants.STATUS.GOOD, bidRequest); - bid.creative_id = ad.ad_id; - bid.bidderCode = bidRequest.bidder; + bid.currency = 'USD'; + bid.creative_id = ad.creative_id; + bid.bidderCode = baseAdapter.getBidderCode(); bid.cpm = ad.cpm || 0; bid.dealId = ad.deal; if (bidRequest.mediaType === 'video') { @@ -7127,15 +8950,16 @@ function RubiconAdapter() { utils.logError('Error from addBidResponse', null, err); } })); + // Run the Emily user sync + hasUserSyncFired = syncEmily(hasUserSyncFired); } function _adCpmSort(adA, adB) { return (adB.cpm || 0.0) - (adA.cpm || 0.0); } - return _extends(Adapter.createNew(RUBICON_BIDDER_CODE), { - callBids: _callBids, - createNew: RubiconAdapter.createNew + return _extends(this, baseAdapter, { + callBids: _callBids }); } @@ -7152,8 +8976,8 @@ RubiconAdapter.masSizeOrdering = function (sizes) { return result; }), []).sort((function (first, second) { // sort by MAS_SIZE_PRIORITY priority order - var firstPriority = MAS_SIZE_PRIORITY.indexOf(first), - secondPriority = MAS_SIZE_PRIORITY.indexOf(second); + var firstPriority = MAS_SIZE_PRIORITY.indexOf(first); + var secondPriority = MAS_SIZE_PRIORITY.indexOf(second); if (firstPriority > -1 || secondPriority > -1) { if (firstPriority === -1) { @@ -7170,9 +8994,50 @@ RubiconAdapter.masSizeOrdering = function (sizes) { })); }; -RubiconAdapter.createNew = function () { - return new RubiconAdapter(); -}; +/** + * syncEmily + * @summary A user sync dependency for the Rubicon Project adapter + * When enabled, creates an user sync iframe after a delay once the first auction is complete. + * Only fires once except that with each winning creative there will be additional, similar calls to the same service. + * @example + * // Config example for Rubicon user sync + * pbjs.setConfig({ rubicon: { + * userSync: { + * enabled: true, + * delay: 1000 + * } + * }}); + * @return {boolean} Whether or not Emily synced + */ +function syncEmily(hasSynced) { + // Check that it has not already been triggered - only meant to fire once + if (hasSynced) { + return true; + } + + var defaultUserSyncConfig = { + enabled: true, + delay: 5000 + }; + var iframeUrl = 'https://tap-secure.rubiconproject.com/partner/scripts/rubicon/emily.html?rtb_ext=1'; + + var rubiConfig = pbjs.getConfig('rubicon'); + var publisherUserSyncConfig = rubiConfig && rubiConfig.userSync; + + // Merge publisher user sync config with the defaults + var userSyncConfig = _extends(defaultUserSyncConfig, publisherUserSyncConfig); + + // Check that user sync is enabled + if (!userSyncConfig.enabled) { + return false; + } + + // Delay inserting the Emily iframe + setTimeout((function () { + return utils.insertCookieSyncIframe(iframeUrl); + }), Number(userSyncConfig.delay)); + return true; +} _adaptermanager2['default'].registerBidAdapter(new RubiconAdapter(), RUBICON_BIDDER_CODE, { supportedMediaTypes: ['video'] @@ -7183,18 +9048,192 @@ module.exports = RubiconAdapter; /***/ }) -},[163]); -pbjsChunk([16],{ +},[183]); +pbjsChunk([24],{ -/***/ 193: +/***/ 199: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(194); +module.exports = __webpack_require__(200); /***/ }), -/***/ 194: +/***/ 200: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CONSTANTS = __webpack_require__(4); +var utils = __webpack_require__(0); +var bidfactory = __webpack_require__(3); +var bidmanager = __webpack_require__(2); +var adloader = __webpack_require__(5); +var adaptermanager = __webpack_require__(1); + +/** + * Adapter for requesting bids from Sovrn + */ +var SovrnAdapter = function SovrnAdapter() { + var sovrnUrl = 'ap.lijit.com/rtb/bid'; + + function _callBids(params) { + var sovrnBids = params.bids || []; + + _requestBids(sovrnBids); + } + + function _requestBids(bidReqs) { + // build bid request object + var domain = window.location.host; + var page = window.location.pathname + location.search + location.hash; + + var sovrnImps = []; + + // build impression array for sovrn + utils._each(bidReqs, (function (bid) { + var tagId = utils.getBidIdParameter('tagid', bid.params); + var bidFloor = utils.getBidIdParameter('bidfloor', bid.params); + var adW = 0; + var adH = 0; + + // sovrn supports only one size per tagid, so we just take the first size if there are more + // if we are a 2 item array of 2 numbers, we must be a SingleSize array + var bidSizes = Array.isArray(bid.params.sizes) ? bid.params.sizes : bid.sizes; + var sizeArrayLength = bidSizes.length; + if (sizeArrayLength === 2 && typeof bidSizes[0] === 'number' && typeof bidSizes[1] === 'number') { + adW = bidSizes[0]; + adH = bidSizes[1]; + } else { + adW = bidSizes[0][0]; + adH = bidSizes[0][1]; + } + + var imp = { + id: bid.bidId, + banner: { + w: adW, + h: adH + }, + tagid: tagId, + bidfloor: bidFloor + }; + sovrnImps.push(imp); + })); + + // build bid request with impressions + var sovrnBidReq = { + id: utils.getUniqueIdentifierStr(), + imp: sovrnImps, + site: { + domain: domain, + page: page + } + }; + + var scriptUrl = '//' + sovrnUrl + '?callback=window.pbjs.sovrnResponse' + '&src=' + CONSTANTS.REPO_AND_VERSION + '&br=' + encodeURIComponent(JSON.stringify(sovrnBidReq)); + adloader.loadScript(scriptUrl); + } + + function addBlankBidResponses(impidsWithBidBack) { + var missing = utils.getBidderRequestAllAdUnits('sovrn'); + if (missing) { + missing = missing.bids.filter((function (bid) { + return impidsWithBidBack.indexOf(bid.bidId) < 0; + })); + } else { + missing = []; + } + + missing.forEach((function (bidRequest) { + // Add a no-bid response for this bid request. + var bid = {}; + bid = bidfactory.createBid(2, bidRequest); + bid.bidderCode = 'sovrn'; + bidmanager.addBidResponse(bidRequest.placementCode, bid); + })); + } + + // expose the callback to the global object: + pbjs.sovrnResponse = function (sovrnResponseObj) { + var impidsWithBidBack = []; + + // valid response object from sovrn + if (sovrnResponseObj && sovrnResponseObj.id && sovrnResponseObj.seatbid && sovrnResponseObj.seatbid.length !== 0 && sovrnResponseObj.seatbid[0].bid && sovrnResponseObj.seatbid[0].bid.length !== 0) { + sovrnResponseObj.seatbid[0].bid.forEach((function (sovrnBid) { + var responseCPM; + var placementCode = ''; + var id = sovrnBid.impid; + var bid = {}; + + var bidObj = utils.getBidRequest(id); + + if (bidObj) { + placementCode = bidObj.placementCode; + bidObj.status = CONSTANTS.STATUS.GOOD; + + responseCPM = parseFloat(sovrnBid.price); + + if (responseCPM !== 0) { + sovrnBid.placementCode = placementCode; + sovrnBid.size = bidObj.sizes; + var responseAd = sovrnBid.adm; + + // build impression url from response + var responseNurl = ''; + + // store bid response + // bid status is good (indicating 1) + bid = bidfactory.createBid(1, bidObj); + bid.creative_id = sovrnBid.id; + bid.bidderCode = 'sovrn'; + bid.cpm = responseCPM; + + // set ad content + impression url + // sovrn returns \n \n '; + bid.ad = '
\n
\n \n '; + if (!(window.STR && window.STR.Tag) && !(window.top.STR && window.top.STR.Tag)) { + var sfpScriptTag = '\n '; + bid.ad += sfpScriptTag; + } bidmanager.addBidResponse(bidObj.placementCode, bid); } catch (e) { _handleInvalidBid(bidObj); @@ -91,7 +95,7 @@ var SharethroughAdapter = function SharethroughAdapter() { } function appendEnvFields(url) { - url = utils.tryAppendQueryString(url, 'hbVersion', '0.27.0-pre'); + url = utils.tryAppendQueryString(url, 'hbVersion', '0.28.0-pre'); url = utils.tryAppendQueryString(url, 'strVersion', STR_VERSION); url = utils.tryAppendQueryString(url, 'hbSource', 'prebid'); @@ -110,4 +114,4 @@ module.exports = SharethroughAdapter; /***/ }) -},[171]); \ No newline at end of file +},[191]); \ No newline at end of file diff --git a/build/dist/smartadserverBidAdapter.js b/build/dist/smartadserverBidAdapter.js index a77b403477d..bef55ff0599 100644 --- a/build/dist/smartadserverBidAdapter.js +++ b/build/dist/smartadserverBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([26],{ +pbjsChunk([27],{ -/***/ 173: +/***/ 193: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(174); +module.exports = __webpack_require__(194); /***/ }), -/***/ 174: +/***/ 194: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18,7 +18,7 @@ var utils = __webpack_require__(0); var bidfactory = __webpack_require__(3); var bidmanager = __webpack_require__(2); var adloader = __webpack_require__(5); -var url = __webpack_require__(10); +var url = __webpack_require__(11); var adaptermanager = __webpack_require__(1); var SmartAdServer = function SmartAdServer() { @@ -79,4 +79,4 @@ module.exports = SmartAdServer; /***/ }) -},[173]); \ No newline at end of file +},[193]); \ No newline at end of file diff --git a/build/dist/smartyadsBidAdapter.js b/build/dist/smartyadsBidAdapter.js index ebf41e32f39..b36fd42a4b0 100644 --- a/build/dist/smartyadsBidAdapter.js +++ b/build/dist/smartyadsBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([25],{ +pbjsChunk([26],{ -/***/ 175: +/***/ 195: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(176); +module.exports = __webpack_require__(196); /***/ }), -/***/ 176: +/***/ 196: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -18,7 +18,7 @@ var _extends = Object.assign || function (target) { for (var i = 1; i < argument var _adapter = __webpack_require__(7); -var Adapter = _interopRequireWildcard(_adapter); +var _adapter2 = _interopRequireDefault(_adapter); var _bidfactory = __webpack_require__(3); @@ -40,10 +40,10 @@ var _adaptermanager = __webpack_require__(1); var _adaptermanager2 = _interopRequireDefault(_adaptermanager); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var SMARTYADS_BIDDER_CODE = 'smartyads'; var sizeMap = { @@ -135,11 +135,11 @@ function SmartyadsAdapter() { secure = 0; } - var host = window.location.host, - page = window.location.pathname, - language = navigator.language, - deviceWidth = window.screen.width, - deviceHeight = window.screen.height; + var host = window.location.host; + var page = window.location.pathname; + var language = navigator.language; + var deviceWidth = window.screen.width; + var deviceHeight = window.screen.height; var queryString = ['banner_id', bid.params.banner_id, 'size_ad', parsedSizes[0], 'alt_size_ad', parsedSizes.slice(1).join(',') || undefined, 'host', host, 'page', page, 'language', language, 'deviceWidth', deviceWidth, 'deviceHeight', deviceHeight, 'secure', secure, 'bidId', bid.bidId, 'checkOn', 'rf']; @@ -163,9 +163,8 @@ function SmartyadsAdapter() { _bidmanager2['default'].addBidResponse(bidRequest.placementCode, bid); } - return _extends(Adapter.createNew(SMARTYADS_BIDDER_CODE), { // SMARTYADS_BIDDER_CODE smartyads - callBids: _callBids, - createNew: SmartyadsAdapter.createNew + return _extends(new _adapter2['default'](SMARTYADS_BIDDER_CODE), { // SMARTYADS_BIDDER_CODE smartyads + callBids: _callBids }); } @@ -182,8 +181,8 @@ SmartyadsAdapter.masSizeOrdering = function (sizes) { return result; }), []).sort((function (first, second) { // sort by MAS_SIZE_PRIORITY priority order - var firstPriority = MAS_SIZE_PRIORITY.indexOf(first), - secondPriority = MAS_SIZE_PRIORITY.indexOf(second); + var firstPriority = MAS_SIZE_PRIORITY.indexOf(first); + var secondPriority = MAS_SIZE_PRIORITY.indexOf(second); if (firstPriority > -1 || secondPriority > -1) { if (firstPriority === -1) { @@ -199,14 +198,10 @@ SmartyadsAdapter.masSizeOrdering = function (sizes) { })); }; -SmartyadsAdapter.createNew = function () { - return new SmartyadsAdapter(); -}; - _adaptermanager2['default'].registerBidAdapter(new SmartyadsAdapter(), 'smartyads'); module.exports = SmartyadsAdapter; /***/ }) -},[175]); \ No newline at end of file +},[195]); \ No newline at end of file diff --git a/build/dist/sonobiBidAdapter.js b/build/dist/sonobiBidAdapter.js index 925fd075c95..08dff20b67a 100644 --- a/build/dist/sonobiBidAdapter.js +++ b/build/dist/sonobiBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([24],{ +pbjsChunk([25],{ -/***/ 177: +/***/ 197: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(178); +module.exports = __webpack_require__(198); /***/ }), -/***/ 178: +/***/ 198: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -135,4 +135,4 @@ module.exports = SonobiAdapter; /***/ }) -},[177]); \ No newline at end of file +},[197]); \ No newline at end of file diff --git a/build/dist/sovrnBidAdapter.js b/build/dist/sovrnBidAdapter.js index 6e89e7daf48..cdc312bb55c 100644 --- a/build/dist/sovrnBidAdapter.js +++ b/build/dist/sovrnBidAdapter.js @@ -1,14 +1,14 @@ -pbjsChunk([23],{ +pbjsChunk([24],{ -/***/ 179: +/***/ 199: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(180); +module.exports = __webpack_require__(200); /***/ }), -/***/ 180: +/***/ 200: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86,9 +86,7 @@ var SovrnAdapter = function SovrnAdapter() { } function addBlankBidResponses(impidsWithBidBack) { - var missing = pbjs._bidsRequested.find((function (bidSet) { - return bidSet.bidderCode === 'sovrn'; - })); + var missing = utils.getBidderRequestAllAdUnits('sovrn'); if (missing) { missing = missing.bids.filter((function (bid) { return impidsWithBidBack.indexOf(bid.bidId) < 0; @@ -108,70 +106,59 @@ var SovrnAdapter = function SovrnAdapter() { // expose the callback to the global object: pbjs.sovrnResponse = function (sovrnResponseObj) { - // valid object? - if (sovrnResponseObj && sovrnResponseObj.id) { - // valid object w/ bid responses? - if (sovrnResponseObj.seatbid && sovrnResponseObj.seatbid.length !== 0 && sovrnResponseObj.seatbid[0].bid && sovrnResponseObj.seatbid[0].bid.length !== 0) { - var impidsWithBidBack = []; - sovrnResponseObj.seatbid[0].bid.forEach((function (sovrnBid) { - var responseCPM; - var placementCode = ''; - var id = sovrnBid.impid; - var bid = {}; - - // try to fetch the bid request we sent Sovrn - var bidObj = pbjs._bidsRequested.find((function (bidSet) { - return bidSet.bidderCode === 'sovrn'; - })).bids.find((function (bid) { - return bid.bidId === id; - })); - - if (bidObj) { - placementCode = bidObj.placementCode; - bidObj.status = CONSTANTS.STATUS.GOOD; - - // place ad response on bidmanager._adResponsesByBidderId - responseCPM = parseFloat(sovrnBid.price); - - if (responseCPM !== 0) { - sovrnBid.placementCode = placementCode; - sovrnBid.size = bidObj.sizes; - var responseAd = sovrnBid.adm; - - // build impression url from response - var responseNurl = ''; - - // store bid response - // bid status is good (indicating 1) - bid = bidfactory.createBid(1, bidObj); - bid.creative_id = sovrnBid.id; - bid.bidderCode = 'sovrn'; - bid.cpm = responseCPM; - - // set ad content + impression url - // sovrn returns