Created
January 21, 2019 02:38
-
-
Save pganti/d299886b9d3bcc33c56d0473e8048952 to your computer and use it in GitHub Desktop.
realvu
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /******/ (function(modules) { // webpackBootstrap | |
| /******/ // install a JSONP callback for chunk loading | |
| /******/ var parentJsonpFunction = window["pbjsChunk"]; | |
| /******/ window["pbjsChunk"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) { | |
| /******/ // add "moreModules" to the modules object, | |
| /******/ // then flag all "chunkIds" as loaded and fire callback | |
| /******/ var moduleId, chunkId, i = 0, resolves = [], result; | |
| /******/ for(;i < chunkIds.length; i++) { | |
| /******/ chunkId = chunkIds[i]; | |
| /******/ if(installedChunks[chunkId]) { | |
| /******/ resolves.push(installedChunks[chunkId][0]); | |
| /******/ } | |
| /******/ installedChunks[chunkId] = 0; | |
| /******/ } | |
| /******/ for(moduleId in moreModules) { | |
| /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { | |
| /******/ modules[moduleId] = moreModules[moduleId]; | |
| /******/ } | |
| /******/ } | |
| /******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules); | |
| /******/ while(resolves.length) { | |
| /******/ resolves.shift()(); | |
| /******/ } | |
| /******/ if(executeModules) { | |
| /******/ for(i=0; i < executeModules.length; i++) { | |
| /******/ result = __webpack_require__(__webpack_require__.s = executeModules[i]); | |
| /******/ } | |
| /******/ } | |
| /******/ return result; | |
| /******/ }; | |
| /******/ | |
| /******/ // The module cache | |
| /******/ var installedModules = {}; | |
| /******/ | |
| /******/ // objects to store loaded and loading chunks | |
| /******/ var installedChunks = { | |
| /******/ 112: 0 | |
| /******/ }; | |
| /******/ | |
| /******/ // The require function | |
| /******/ function __webpack_require__(moduleId) { | |
| /******/ | |
| /******/ // Check if module is in cache | |
| /******/ if(installedModules[moduleId]) { | |
| /******/ return installedModules[moduleId].exports; | |
| /******/ } | |
| /******/ // Create a new module (and put it into the cache) | |
| /******/ var module = installedModules[moduleId] = { | |
| /******/ i: moduleId, | |
| /******/ l: false, | |
| /******/ exports: {} | |
| /******/ }; | |
| /******/ | |
| /******/ // Execute the module function | |
| /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | |
| /******/ | |
| /******/ // Flag the module as loaded | |
| /******/ module.l = true; | |
| /******/ | |
| /******/ // Return the exports of the module | |
| /******/ return module.exports; | |
| /******/ } | |
| /******/ | |
| /******/ | |
| /******/ // expose the modules object (__webpack_modules__) | |
| /******/ __webpack_require__.m = modules; | |
| /******/ | |
| /******/ // expose the module cache | |
| /******/ __webpack_require__.c = installedModules; | |
| /******/ | |
| /******/ // define getter function for harmony exports | |
| /******/ __webpack_require__.d = function(exports, name, getter) { | |
| /******/ if(!__webpack_require__.o(exports, name)) { | |
| /******/ Object.defineProperty(exports, name, { | |
| /******/ configurable: false, | |
| /******/ enumerable: true, | |
| /******/ get: getter | |
| /******/ }); | |
| /******/ } | |
| /******/ }; | |
| /******/ | |
| /******/ // getDefaultExport function for compatibility with non-harmony modules | |
| /******/ __webpack_require__.n = function(module) { | |
| /******/ var getter = module && module.__esModule ? | |
| /******/ function getDefault() { return module['default']; } : | |
| /******/ function getModuleExports() { return module; }; | |
| /******/ __webpack_require__.d(getter, 'a', getter); | |
| /******/ return getter; | |
| /******/ }; | |
| /******/ | |
| /******/ // Object.prototype.hasOwnProperty.call | |
| /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; | |
| /******/ | |
| /******/ // __webpack_public_path__ | |
| /******/ __webpack_require__.p = ""; | |
| /******/ | |
| /******/ // on error function for async loading | |
| /******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; | |
| /******/ | |
| /******/ // Load entry module and return exports | |
| /******/ return __webpack_require__(__webpack_require__.s = 386); | |
| /******/ }) | |
| /************************************************************************/ | |
| /******/ ({ | |
| /***/ 0: | |
| /***/ (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 _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.parseSizesInput = parseSizesInput; | |
| exports.parseGPTSingleSizeArray = parseGPTSingleSizeArray; | |
| exports.uniques = uniques; | |
| exports.flatten = flatten; | |
| exports.getBidRequest = getBidRequest; | |
| exports.getKeys = getKeys; | |
| exports.getValue = getValue; | |
| exports.getBidderCodes = getBidderCodes; | |
| exports.isGptPubadsDefined = isGptPubadsDefined; | |
| exports.getHighestCpm = getHighestCpm; | |
| exports.shuffle = shuffle; | |
| exports.adUnitsFilter = adUnitsFilter; | |
| exports.isSrcdocSupported = isSrcdocSupported; | |
| exports.deepClone = deepClone; | |
| exports.inIframe = inIframe; | |
| exports.isSafariBrowser = isSafariBrowser; | |
| exports.replaceAuctionPrice = replaceAuctionPrice; | |
| exports.timestamp = timestamp; | |
| exports.checkCookieSupport = checkCookieSupport; | |
| exports.cookiesAreEnabled = cookiesAreEnabled; | |
| exports.delayExecution = delayExecution; | |
| exports.groupBy = groupBy; | |
| exports.deepAccess = deepAccess; | |
| exports.createContentToExecuteExtScriptInFriendlyFrame = createContentToExecuteExtScriptInFriendlyFrame; | |
| exports.getDefinedParams = getDefinedParams; | |
| exports.isValidMediaTypes = isValidMediaTypes; | |
| exports.getBidderRequest = getBidderRequest; | |
| exports.getOrigin = getOrigin; | |
| exports.getDNT = getDNT; | |
| exports.isAdUnitCodeMatchingSlot = isAdUnitCodeMatchingSlot; | |
| exports.isSlotMatchingAdUnitCode = isSlotMatchingAdUnitCode; | |
| exports.unsupportedBidderMessage = unsupportedBidderMessage; | |
| exports.deletePropertyFromObject = deletePropertyFromObject; | |
| exports.removeRequestId = removeRequestId; | |
| exports.isInteger = isInteger; | |
| var _config = __webpack_require__(2); | |
| var _justClone = __webpack_require__(61); | |
| var _justClone2 = _interopRequireDefault(_justClone); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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 CONSTANTS = __webpack_require__(3); | |
| var _loggingChecked = false; | |
| var t_Arr = 'Array'; | |
| var t_Str = 'String'; | |
| var t_Fn = 'Function'; | |
| var t_Numb = 'Number'; | |
| var toString = Object.prototype.toString; | |
| var infoLogger = null; | |
| try { | |
| infoLogger = console.info.bind(window.console); | |
| } catch (e) {} | |
| /* | |
| * Substitutes into a string from a given map using the token | |
| * Usage | |
| * var str = 'text %%REPLACE%% this text with %%SOMETHING%%'; | |
| * var map = {}; | |
| * map['replace'] = 'it was subbed'; | |
| * map['something'] = 'something else'; | |
| * console.log(replaceTokenInString(str, map, '%%')); => "text it was subbed this text with something else" | |
| */ | |
| exports.replaceTokenInString = function (str, map, token) { | |
| this._each(map, function (value, key) { | |
| value = value === undefined ? '' : value; | |
| var keyString = token + key.toUpperCase() + token; | |
| var re = new RegExp(keyString, 'g'); | |
| str = str.replace(re, value); | |
| }); | |
| return str; | |
| }; | |
| /* utility method to get incremental integer starting from 1 */ | |
| var getIncrementalInteger = function () { | |
| var count = 0; | |
| return function () { | |
| count++; | |
| return count; | |
| }; | |
| }(); | |
| function _getUniqueIdentifierStr() { | |
| return getIncrementalInteger() + Math.random().toString(16).substr(2); | |
| } | |
| // generate a random string (to be used as a dynamic JSONP callback) | |
| exports.getUniqueIdentifierStr = _getUniqueIdentifierStr; | |
| /** | |
| * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, | |
| * where each x is replaced with a random hexadecimal digit from 0 to f, | |
| * and y is replaced with a random hexadecimal digit from 8 to b. | |
| * https://gist.github.com/jed/982883 via node-uuid | |
| */ | |
| exports.generateUUID = function generateUUID(placeholder) { | |
| return placeholder ? (placeholder ^ Math.random() * 16 >> placeholder / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, generateUUID); | |
| }; | |
| exports.getBidIdParameter = function (key, paramsObj) { | |
| if (paramsObj && paramsObj[key]) { | |
| return paramsObj[key]; | |
| } | |
| return ''; | |
| }; | |
| exports.tryAppendQueryString = function (existingUrl, key, value) { | |
| if (value) { | |
| return existingUrl += key + '=' + encodeURIComponent(value) + '&'; | |
| } | |
| return existingUrl; | |
| }; | |
| // parse a query string object passed in bid params | |
| // bid params should be an object such as {key: "value", key1 : "value1"} | |
| exports.parseQueryStringParameters = function (queryObj) { | |
| var result = ''; | |
| for (var k in queryObj) { | |
| if (queryObj.hasOwnProperty(k)) { | |
| result += k + '=' + encodeURIComponent(queryObj[k]) + '&'; | |
| } | |
| } | |
| return result; | |
| }; | |
| // transform an AdServer targeting bids into a query string to send to the adserver | |
| exports.transformAdServerTargetingObj = function (targeting) { | |
| // we expect to receive targeting for a single slot at a time | |
| if (targeting && Object.getOwnPropertyNames(targeting).length > 0) { | |
| return getKeys(targeting).map(function (key) { | |
| return key + '=' + encodeURIComponent(getValue(targeting, key)); | |
| }).join('&'); | |
| } else { | |
| return ''; | |
| } | |
| }; | |
| /** | |
| * Parse a GPT-Style general size Array like `[[300, 250]]` or `"300x250,970x90"` into an array of sizes `["300x250"]` or '['300x250', '970x90']' | |
| * @param {array[array|number]} sizeObj Input array or double array [300,250] or [[300,250], [728,90]] | |
| * @return {array[string]} Array of strings like `["300x250"]` or `["300x250", "728x90"]` | |
| */ | |
| function parseSizesInput(sizeObj) { | |
| var parsedSizes = []; | |
| // if a string for now we can assume it is a single size, like "300x250" | |
| if (typeof sizeObj === 'string') { | |
| // multiple sizes will be comma-separated | |
| var sizes = sizeObj.split(','); | |
| // regular expression to match strigns like 300x250 | |
| // start of line, at least 1 number, an "x" , then at least 1 number, and the then end of the line | |
| var sizeRegex = /^(\d)+x(\d)+$/i; | |
| if (sizes) { | |
| for (var curSizePos in sizes) { | |
| if (hasOwn(sizes, curSizePos) && sizes[curSizePos].match(sizeRegex)) { | |
| parsedSizes.push(sizes[curSizePos]); | |
| } | |
| } | |
| } | |
| } 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] === 'number' && typeof sizeObj[1] === 'number') { | |
| parsedSizes.push(parseGPTSingleSizeArray(sizeObj)); | |
| } else { | |
| // otherwise, we must be a MultiSize array | |
| for (var i = 0; i < sizeArrayLength; i++) { | |
| parsedSizes.push(parseGPTSingleSizeArray(sizeObj[i])); | |
| } | |
| } | |
| } | |
| } | |
| return parsedSizes; | |
| }; | |
| // parse a GPT style sigle size array, (i.e [300,250]) | |
| // into an AppNexus style string, (i.e. 300x250) | |
| function parseGPTSingleSizeArray(singleSize) { | |
| // if we aren't exactly 2 items in this array, it is invalid | |
| if (exports.isArray(singleSize) && singleSize.length === 2 && !isNaN(singleSize[0]) && !isNaN(singleSize[1])) { | |
| return singleSize[0] + 'x' + singleSize[1]; | |
| } | |
| }; | |
| exports.getTopWindowLocation = function () { | |
| var location = void 0; | |
| try { | |
| // force an exception in x-domain enviornments. #1509 | |
| window.top.location.toString(); | |
| location = window.top.location; | |
| } catch (e) { | |
| location = window.location; | |
| } | |
| return location; | |
| }; | |
| exports.getTopWindowUrl = function () { | |
| var href = void 0; | |
| try { | |
| href = this.getTopWindowLocation().href; | |
| } catch (e) { | |
| href = ''; | |
| } | |
| return href; | |
| }; | |
| exports.getTopWindowReferrer = function () { | |
| try { | |
| return window.top.document.referrer; | |
| } catch (e) { | |
| return document.referrer; | |
| } | |
| }; | |
| exports.logWarn = function (msg) { | |
| if (debugTurnedOn() && console.warn) { | |
| console.warn('WARNING: ' + msg); | |
| } | |
| }; | |
| exports.logInfo = function (msg, args) { | |
| if (debugTurnedOn() && hasConsoleLogger()) { | |
| if (infoLogger) { | |
| if (!args || args.length === 0) { | |
| args = ''; | |
| } | |
| infoLogger('INFO: ' + msg + (args === '' ? '' : ' : params : '), args); | |
| } | |
| } | |
| }; | |
| exports.logMessage = function (msg) { | |
| if (debugTurnedOn() && hasConsoleLogger()) { | |
| console.log('MESSAGE: ' + msg); | |
| } | |
| }; | |
| function hasConsoleLogger() { | |
| return window.console && window.console.log; | |
| } | |
| function hasConsoleError() { | |
| return window.console && window.console.error; | |
| } | |
| exports.hasConsoleLogger = hasConsoleLogger; | |
| var debugTurnedOn = function debugTurnedOn() { | |
| if (_config.config.getConfig('debug') === false && _loggingChecked === false) { | |
| var debug = getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; | |
| _config.config.setConfig({ debug: debug }); | |
| _loggingChecked = true; | |
| } | |
| return !!_config.config.getConfig('debug'); | |
| }; | |
| exports.debugTurnedOn = debugTurnedOn; | |
| /** | |
| * Wrapper to console.error. Takes N arguments to log the same as console.error. | |
| */ | |
| exports.logError = function () { | |
| if (debugTurnedOn() && hasConsoleError()) { | |
| console.error.apply(console, arguments); | |
| } | |
| }; | |
| exports.createInvisibleIframe = function _createInvisibleIframe() { | |
| var f = document.createElement('iframe'); | |
| f.id = _getUniqueIdentifierStr(); | |
| f.height = 0; | |
| f.width = 0; | |
| f.border = '0px'; | |
| f.hspace = '0'; | |
| f.vspace = '0'; | |
| f.marginWidth = '0'; | |
| f.marginHeight = '0'; | |
| f.style.border = '0'; | |
| f.scrolling = 'no'; | |
| f.frameBorder = '0'; | |
| f.src = 'about:blank'; | |
| f.style.display = 'none'; | |
| return f; | |
| }; | |
| /* | |
| * Check if a given parameter name exists in query string | |
| * and if it does return the value | |
| */ | |
| var getParameterByName = function getParameterByName(name) { | |
| var regexS = '[\\?&]' + name + '=([^&#]*)'; | |
| var regex = new RegExp(regexS); | |
| var results = regex.exec(window.location.search); | |
| if (results === null) { | |
| return ''; | |
| } | |
| return decodeURIComponent(results[1].replace(/\+/g, ' ')); | |
| }; | |
| exports.getParameterByName = getParameterByName; | |
| /** | |
| * This function validates paramaters. | |
| * @param {object[string]} paramObj [description] | |
| * @param {string[]} requiredParamsArr [description] | |
| * @return {bool} Bool if paramaters are valid | |
| */ | |
| exports.hasValidBidRequest = function (paramObj, requiredParamsArr, adapter) { | |
| var found = false; | |
| function findParam(value, key) { | |
| if (key === requiredParamsArr[i]) { | |
| found = true; | |
| } | |
| } | |
| for (var i = 0; i < requiredParamsArr.length; i++) { | |
| found = false; | |
| this._each(paramObj, findParam); | |
| if (!found) { | |
| this.logError('Params are missing for bid request. One of these required paramaters are missing: ' + requiredParamsArr, adapter); | |
| return false; | |
| } | |
| } | |
| return true; | |
| }; | |
| // Handle addEventListener gracefully in older browsers | |
| exports.addEventHandler = function (element, event, func) { | |
| if (element.addEventListener) { | |
| element.addEventListener(event, func, true); | |
| } else if (element.attachEvent) { | |
| element.attachEvent('on' + event, func); | |
| } | |
| }; | |
| /** | |
| * Return if the object is of the | |
| * given type. | |
| * @param {*} object to test | |
| * @param {String} _t type string (e.g., Array) | |
| * @return {Boolean} if object is of type _t | |
| */ | |
| exports.isA = function (object, _t) { | |
| return toString.call(object) === '[object ' + _t + ']'; | |
| }; | |
| exports.isFn = function (object) { | |
| return this.isA(object, t_Fn); | |
| }; | |
| exports.isStr = function (object) { | |
| return this.isA(object, t_Str); | |
| }; | |
| exports.isArray = function (object) { | |
| return this.isA(object, t_Arr); | |
| }; | |
| exports.isNumber = function (object) { | |
| return this.isA(object, t_Numb); | |
| }; | |
| /** | |
| * Return if the object is "empty"; | |
| * this includes falsey, no keys, or no items at indices | |
| * @param {*} object object to test | |
| * @return {Boolean} if object is empty | |
| */ | |
| exports.isEmpty = function (object) { | |
| if (!object) return true; | |
| if (exports.isArray(object) || exports.isStr(object)) { | |
| return !(object.length > 0); | |
| } | |
| for (var k in object) { | |
| if (hasOwnProperty.call(object, k)) return false; | |
| } | |
| return true; | |
| }; | |
| /** | |
| * Return if string is empty, null, or undefined | |
| * @param str string to test | |
| * @returns {boolean} if string is empty | |
| */ | |
| exports.isEmptyStr = function (str) { | |
| return this.isStr(str) && (!str || str.length === 0); | |
| }; | |
| /** | |
| * Iterate object with the function | |
| * falls back to es5 `forEach` | |
| * @param {Array|Object} object | |
| * @param {Function(value, key, object)} fn | |
| */ | |
| exports._each = function (object, fn) { | |
| if (this.isEmpty(object)) return; | |
| if (this.isFn(object.forEach)) return object.forEach(fn, this); | |
| var k = 0; | |
| var l = object.length; | |
| if (l > 0) { | |
| for (; k < l; k++) { | |
| fn(object[k], k, object); | |
| } | |
| } else { | |
| for (k in object) { | |
| if (hasOwnProperty.call(object, k)) fn.call(this, object[k], k); | |
| } | |
| } | |
| }; | |
| exports.contains = function (a, obj) { | |
| if (this.isEmpty(a)) { | |
| return false; | |
| } | |
| if (this.isFn(a.indexOf)) { | |
| return a.indexOf(obj) !== -1; | |
| } | |
| var i = a.length; | |
| while (i--) { | |
| if (a[i] === obj) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| }; | |
| exports.indexOf = function () { | |
| if (Array.prototype.indexOf) { | |
| return Array.prototype.indexOf; | |
| } | |
| // ie8 no longer supported | |
| // return polyfills.indexOf; | |
| }(); | |
| /** | |
| * Map an array or object into another array | |
| * given a function | |
| * @param {Array|Object} object | |
| * @param {Function(value, key, object)} callback | |
| * @return {Array} | |
| */ | |
| exports._map = function (object, callback) { | |
| if (this.isEmpty(object)) return []; | |
| if (this.isFn(object.map)) return object.map(callback); | |
| var output = []; | |
| this._each(object, function (value, key) { | |
| output.push(callback(value, key, object)); | |
| }); | |
| return output; | |
| }; | |
| var hasOwn = function hasOwn(objectToCheck, propertyToCheckFor) { | |
| if (objectToCheck.hasOwnProperty) { | |
| return objectToCheck.hasOwnProperty(propertyToCheckFor); | |
| } else { | |
| return typeof objectToCheck[propertyToCheckFor] !== 'undefined' && objectToCheck.constructor.prototype[propertyToCheckFor] !== objectToCheck[propertyToCheckFor]; | |
| } | |
| }; | |
| exports.insertElement = function (elm, doc, target) { | |
| doc = doc || document; | |
| var elToAppend = void 0; | |
| if (target) { | |
| elToAppend = doc.getElementsByTagName(target); | |
| } else { | |
| elToAppend = doc.getElementsByTagName('head'); | |
| } | |
| try { | |
| elToAppend = elToAppend.length ? elToAppend : doc.getElementsByTagName('body'); | |
| if (elToAppend.length) { | |
| elToAppend = elToAppend[0]; | |
| elToAppend.insertBefore(elm, elToAppend.firstChild); | |
| } | |
| } catch (e) {} | |
| }; | |
| exports.triggerPixel = function (url) { | |
| var img = new Image(); | |
| img.src = url; | |
| }; | |
| exports.callBurl = function (_ref) { | |
| var source = _ref.source, | |
| burl = _ref.burl; | |
| if (source === CONSTANTS.S2S.SRC && burl) { | |
| exports.triggerPixel(burl); | |
| } | |
| }; | |
| /** | |
| * Inserts empty iframe with the specified `url` for cookie sync | |
| * @param {string} url URL to be requested | |
| * @param {string} encodeUri boolean if URL should be encoded before inserted. Defaults to true | |
| */ | |
| exports.insertUserSyncIframe = function (url) { | |
| var iframeHtml = this.createTrackPixelIframeHtml(url, false, 'allow-scripts allow-same-origin'); | |
| var div = document.createElement('div'); | |
| div.innerHTML = iframeHtml; | |
| var iframe = div.firstChild; | |
| exports.insertElement(iframe); | |
| }; | |
| /** | |
| * Creates a snippet of HTML that retrieves the specified `url` | |
| * @param {string} url URL to be requested | |
| * @return {string} HTML snippet that contains the img src = set to `url` | |
| */ | |
| exports.createTrackPixelHtml = function (url) { | |
| if (!url) { | |
| return ''; | |
| } | |
| var escapedUrl = encodeURI(url); | |
| var img = '<div style="position:absolute;left:0px;top:0px;visibility:hidden;">'; | |
| img += '<img src="' + escapedUrl + '"></div>'; | |
| return img; | |
| }; | |
| /** | |
| * Creates a snippet of Iframe HTML that retrieves the specified `url` | |
| * @param {string} url plain URL to be requested | |
| * @param {string} encodeUri boolean if URL should be encoded before inserted. Defaults to true | |
| * @param {string} sandbox string if provided the sandbox attribute will be included with the given value | |
| * @return {string} HTML snippet that contains the iframe src = set to `url` | |
| */ | |
| exports.createTrackPixelIframeHtml = function (url) { | |
| var encodeUri = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; | |
| var sandbox = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; | |
| if (!url) { | |
| return ''; | |
| } | |
| if (encodeUri) { | |
| url = encodeURI(url); | |
| } | |
| if (sandbox) { | |
| sandbox = 'sandbox="' + sandbox + '"'; | |
| } | |
| return '<iframe ' + sandbox + ' id="' + exports.getUniqueIdentifierStr() + '"\n frameborder="0"\n allowtransparency="true"\n marginheight="0" marginwidth="0"\n width="0" hspace="0" vspace="0" height="0"\n style="height:0p;width:0p;display:none;"\n scrolling="no"\n src="' + url + '">\n </iframe>'; | |
| }; | |
| /** | |
| * Returns iframe document in a browser agnostic way | |
| * @param {object} iframe reference | |
| * @return {object} iframe `document` reference | |
| */ | |
| exports.getIframeDocument = function (iframe) { | |
| if (!iframe) { | |
| return; | |
| } | |
| var doc = void 0; | |
| try { | |
| if (iframe.contentWindow) { | |
| doc = iframe.contentWindow.document; | |
| } else if (iframe.contentDocument.document) { | |
| doc = iframe.contentDocument.document; | |
| } else { | |
| doc = iframe.contentDocument; | |
| } | |
| } catch (e) { | |
| this.logError('Cannot get iframe document', e); | |
| } | |
| return doc; | |
| }; | |
| exports.getValueString = function (param, val, defaultValue) { | |
| if (val === undefined || val === null) { | |
| return defaultValue; | |
| } | |
| if (this.isStr(val)) { | |
| return val; | |
| } | |
| if (this.isNumber(val)) { | |
| return val.toString(); | |
| } | |
| this.logWarn('Unsuported type for param: ' + param + ' required type: String'); | |
| }; | |
| function uniques(value, index, arry) { | |
| return arry.indexOf(value) === index; | |
| } | |
| function flatten(a, b) { | |
| return a.concat(b); | |
| } | |
| function getBidRequest(id, bidsRequested) { | |
| return (0, _find2['default'])(bidsRequested.map(function (bidSet) { | |
| return (0, _find2['default'])(bidSet.bids, function (bid) { | |
| return bid.bidId === id; | |
| }); | |
| }), function (bid) { | |
| return bid; | |
| }); | |
| } | |
| function getKeys(obj) { | |
| return Object.keys(obj); | |
| } | |
| function getValue(obj, key) { | |
| return obj[key]; | |
| } | |
| function getBidderCodes() { | |
| var adUnits = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : pbjs.adUnits; | |
| // this could memoize adUnits | |
| return adUnits.map(function (unit) { | |
| return unit.bids.map(function (bid) { | |
| return bid.bidder; | |
| }).reduce(flatten, []); | |
| }).reduce(flatten).filter(uniques); | |
| } | |
| function isGptPubadsDefined() { | |
| if (window.googletag && exports.isFn(window.googletag.pubads) && exports.isFn(window.googletag.pubads().getSlots)) { | |
| return true; | |
| } | |
| } | |
| function getHighestCpm(previous, current) { | |
| if (previous.cpm === current.cpm) { | |
| return previous.timeToRespond > current.timeToRespond ? current : previous; | |
| } | |
| return previous.cpm < current.cpm ? current : previous; | |
| } | |
| /** | |
| * Fisher–Yates shuffle | |
| * http://stackoverflow.com/a/6274398 | |
| * https://bost.ocks.org/mike/shuffle/ | |
| * istanbul ignore next | |
| */ | |
| function shuffle(array) { | |
| var counter = array.length; | |
| // while there are elements in the array | |
| while (counter > 0) { | |
| // pick a random index | |
| var index = Math.floor(Math.random() * counter); | |
| // decrease counter by 1 | |
| counter--; | |
| // and swap the last element with it | |
| var temp = array[counter]; | |
| array[counter] = array[index]; | |
| array[index] = temp; | |
| } | |
| return array; | |
| } | |
| function adUnitsFilter(filter, bid) { | |
| return (0, _includes2['default'])(filter, bid && bid.adUnitCode); | |
| } | |
| /** | |
| * Check if parent iframe of passed document supports content rendering via 'srcdoc' property | |
| * @param {HTMLDocument} doc document to check support of 'srcdoc' | |
| */ | |
| function isSrcdocSupported(doc) { | |
| // Firefox is excluded due to https://bugzilla.mozilla.org/show_bug.cgi?id=1265961 | |
| return doc.defaultView && doc.defaultView.frameElement && 'srcdoc' in doc.defaultView.frameElement && !/firefox/i.test(navigator.userAgent); | |
| } | |
| function deepClone(obj) { | |
| return (0, _justClone2['default'])(obj); | |
| } | |
| function inIframe() { | |
| try { | |
| return window.self !== window.top; | |
| } catch (e) { | |
| return true; | |
| } | |
| } | |
| function isSafariBrowser() { | |
| return (/^((?!chrome|android).)*safari/i.test(navigator.userAgent) | |
| ); | |
| } | |
| function replaceAuctionPrice(str, cpm) { | |
| if (!str) return; | |
| return str.replace(/\$\{AUCTION_PRICE\}/g, cpm); | |
| } | |
| function timestamp() { | |
| return new Date().getTime(); | |
| } | |
| function checkCookieSupport() { | |
| if (window.navigator.cookieEnabled || !!document.cookie.length) { | |
| return true; | |
| } | |
| } | |
| function cookiesAreEnabled() { | |
| if (exports.checkCookieSupport()) { | |
| return true; | |
| } | |
| window.document.cookie = 'prebid.cookieTest'; | |
| return window.document.cookie.indexOf('prebid.cookieTest') != -1; | |
| } | |
| /** | |
| * Given a function, return a function which only executes the original after | |
| * it's been called numRequiredCalls times. | |
| * | |
| * Note that the arguments from the previous calls will *not* be forwarded to the original function. | |
| * Only the final call's arguments matter. | |
| * | |
| * @param {function} func The function which should be executed, once the returned function has been executed | |
| * numRequiredCalls times. | |
| * @param {int} numRequiredCalls The number of times which the returned function needs to be called before | |
| * func is. | |
| */ | |
| function delayExecution(func, numRequiredCalls) { | |
| if (numRequiredCalls < 1) { | |
| throw new Error('numRequiredCalls must be a positive number. Got ' + numRequiredCalls); | |
| } | |
| var numCalls = 0; | |
| return function () { | |
| numCalls++; | |
| if (numCalls === numRequiredCalls) { | |
| func.apply(null, arguments); | |
| } | |
| }; | |
| } | |
| /** | |
| * 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; | |
| }, {}); | |
| } | |
| /** | |
| * deepAccess utility function useful for doing safe access (will not throw exceptions) of deep object paths. | |
| * @param {object} obj The object containing the values you would like to access. | |
| * @param {string|number} path Object path to the value you would like to access. Non-strings are coerced to strings. | |
| * @returns {*} The value found at the specified object path, or undefined if path is not found. | |
| */ | |
| function deepAccess(obj, path) { | |
| path = String(path).split('.'); | |
| for (var i = 0; i < path.length; i++) { | |
| obj = obj[path[i]]; | |
| if (typeof obj === 'undefined') { | |
| return; | |
| } | |
| } | |
| return obj; | |
| } | |
| /** | |
| * Returns content for a friendly iframe to execute a URL in script tag | |
| * @param {url} URL to be executed in a script tag in a friendly iframe | |
| * <!--PRE_SCRIPT_TAG_MACRO--> and <!--POST_SCRIPT_TAG_MACRO--> are macros left to be replaced if required | |
| */ | |
| function createContentToExecuteExtScriptInFriendlyFrame(url) { | |
| if (!url) { | |
| return ''; | |
| } | |
| return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base target="_top" /><script>inDapIF=true;</script></head><body><!--PRE_SCRIPT_TAG_MACRO--><script src="' + url + '"></script><!--POST_SCRIPT_TAG_MACRO--></body></html>'; | |
| } | |
| /** | |
| * Build an object consisting of only defined parameters to avoid creating an | |
| * object with defined keys and undefined values. | |
| * @param {object} object The object to pick defined params out of | |
| * @param {string[]} params An array of strings representing properties to look for in the object | |
| * @returns {object} An object containing all the specified values that are defined | |
| */ | |
| function getDefinedParams(object, params) { | |
| return params.filter(function (param) { | |
| return object[param]; | |
| }).reduce(function (bid, param) { | |
| return _extends(bid, _defineProperty({}, param, object[param])); | |
| }, {}); | |
| } | |
| /** | |
| * @typedef {Object} MediaTypes | |
| * @property {Object} banner banner configuration | |
| * @property {Object} native native configuration | |
| * @property {Object} video video configuration | |
| */ | |
| /** | |
| * Validates an adunit's `mediaTypes` parameter | |
| * @param {MediaTypes} mediaTypes mediaTypes parameter to validate | |
| * @return {boolean} If object is valid | |
| */ | |
| function isValidMediaTypes(mediaTypes) { | |
| var SUPPORTED_MEDIA_TYPES = ['banner', 'native', 'video']; | |
| var SUPPORTED_STREAM_TYPES = ['instream', 'outstream']; | |
| var types = Object.keys(mediaTypes); | |
| if (!types.every(function (type) { | |
| return (0, _includes2['default'])(SUPPORTED_MEDIA_TYPES, type); | |
| })) { | |
| return false; | |
| } | |
| if (mediaTypes.video && mediaTypes.video.context) { | |
| return (0, _includes2['default'])(SUPPORTED_STREAM_TYPES, mediaTypes.video.context); | |
| } | |
| return true; | |
| } | |
| function getBidderRequest(bidRequests, bidder, adUnitCode) { | |
| return (0, _find2['default'])(bidRequests, function (request) { | |
| return request.bids.filter(function (bid) { | |
| return bid.bidder === bidder && bid.adUnitCode === adUnitCode; | |
| }).length > 0; | |
| }) || { start: null, auctionId: null }; | |
| } | |
| /** | |
| * Returns the origin | |
| */ | |
| function getOrigin() { | |
| // IE10 does not have this property. https://gist.github.com/hbogs/7908703 | |
| if (!window.location.origin) { | |
| return window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : ''); | |
| } else { | |
| return window.location.origin; | |
| } | |
| } | |
| /** | |
| * Returns Do Not Track state | |
| */ | |
| function getDNT() { | |
| return navigator.doNotTrack === '1' || window.doNotTrack === '1' || navigator.msDoNotTrack === '1' || navigator.doNotTrack === 'yes'; | |
| } | |
| var compareCodeAndSlot = function compareCodeAndSlot(slot, adUnitCode) { | |
| return slot.getAdUnitPath() === adUnitCode || slot.getSlotElementId() === adUnitCode; | |
| }; | |
| /** | |
| * Returns filter function to match adUnitCode in slot | |
| * @param {object} slot GoogleTag slot | |
| * @return {function} filter function | |
| */ | |
| function isAdUnitCodeMatchingSlot(slot) { | |
| return function (adUnitCode) { | |
| return compareCodeAndSlot(slot, adUnitCode); | |
| }; | |
| } | |
| /** | |
| * Returns filter function to match adUnitCode in slot | |
| * @param {string} adUnitCode AdUnit code | |
| * @return {function} filter function | |
| */ | |
| function isSlotMatchingAdUnitCode(adUnitCode) { | |
| return function (slot) { | |
| return compareCodeAndSlot(slot, adUnitCode); | |
| }; | |
| } | |
| /** | |
| * Constructs warning message for when unsupported bidders are dropped from an adunit | |
| * @param {Object} adUnit ad unit from which the bidder is being dropped | |
| * @param {string} bidder bidder code that is not compatible with the adUnit | |
| * @return {string} warning message to display when condition is met | |
| */ | |
| function unsupportedBidderMessage(adUnit, bidder) { | |
| var mediaType = Object.keys(adUnit.mediaTypes || { 'banner': 'banner' }).join(', '); | |
| return '\n ' + adUnit.code + ' is a ' + mediaType + ' ad unit\n containing bidders that don\'t support ' + mediaType + ': ' + bidder + '.\n This bidder won\'t fetch demand.\n '; | |
| } | |
| /** | |
| * Delete property from object | |
| * @param {Object} object | |
| * @param {string} prop | |
| * @return {Object} object | |
| */ | |
| function deletePropertyFromObject(object, prop) { | |
| var result = _extends({}, object); | |
| delete result[prop]; | |
| return result; | |
| } | |
| /** | |
| * Delete requestId from external bid object. | |
| * @param {Object} bid | |
| * @return {Object} bid | |
| */ | |
| function removeRequestId(bid) { | |
| return exports.deletePropertyFromObject(bid, 'requestId'); | |
| } | |
| /** | |
| * Checks input is integer or not | |
| * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger | |
| * @param {*} value | |
| */ | |
| function isInteger(value) { | |
| if (Number.isInteger) { | |
| return Number.isInteger(value); | |
| } else { | |
| return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; | |
| } | |
| } | |
| /***/ }), | |
| /***/ 1: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| 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; }; | |
| 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; }; | |
| exports.registerBidder = registerBidder; | |
| exports.newBidder = newBidder; | |
| exports.isValid = isValid; | |
| var _adapter = __webpack_require__(25); | |
| var _adapter2 = _interopRequireDefault(_adapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _config = __webpack_require__(2); | |
| var _bidfactory = __webpack_require__(15); | |
| var _bidfactory2 = _interopRequireDefault(_bidfactory); | |
| var _constants = __webpack_require__(3); | |
| var _userSync = __webpack_require__(13); | |
| var _native = __webpack_require__(14); | |
| var _video = __webpack_require__(63); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| var _utils = __webpack_require__(0); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| /** | |
| * This file aims to support Adapters during the Prebid 0.x -> 1.x transition. | |
| * | |
| * Prebid 1.x and Prebid 0.x will be in separate branches--perhaps for a long time. | |
| * This function defines an API for adapter construction which is compatible with both versions. | |
| * Adapters which use it can maintain their code in master, and only this file will need to change | |
| * in the 1.x branch. | |
| * | |
| * Typical usage looks something like: | |
| * | |
| * const adapter = registerBidder({ | |
| * code: 'myBidderCode', | |
| * aliases: ['alias1', 'alias2'], | |
| * supportedMediaTypes: ['video', 'native'], | |
| * isBidRequestValid: function(paramsObject) { return true/false }, | |
| * buildRequests: function(bidRequests, bidderRequest) { return some ServerRequest(s) }, | |
| * interpretResponse: function(oneServerResponse) { return some Bids, or throw an error. } | |
| * }); | |
| * | |
| * @see BidderSpec for the full API and more thorough descriptions. | |
| */ | |
| /** | |
| * @typedef {object} BidderSpec An object containing the adapter-specific functions needed to | |
| * make a Bidder. | |
| * | |
| * @property {string} code A code which will be used to uniquely identify this bidder. This should be the same | |
| * one as is used in the call to registerBidAdapter | |
| * @property {string[]} [aliases] A list of aliases which should also resolve to this bidder. | |
| * @property {MediaType[]} [supportedMediaTypes]: A list of Media Types which the adapter supports. | |
| * @property {function(object): boolean} isBidRequestValid Determines whether or not the given bid has all the params | |
| * needed to make a valid request. | |
| * @property {function(BidRequest[], bidderRequest): ServerRequest|ServerRequest[]} buildRequests Build the request to the Server | |
| * which requests Bids for the given array of Requests. Each BidRequest in the argument array is guaranteed to have | |
| * passed the isBidRequestValid() test. | |
| * @property {function(ServerResponse, BidRequest): Bid[]} interpretResponse Given a successful response from the Server, | |
| * interpret it and return the Bid objects. This function will be run inside a try/catch. | |
| * If it throws any errors, your bids will be discarded. | |
| * @property {function(SyncOptions, ServerResponse[]): UserSync[]} [getUserSyncs] Given an array of all the responses | |
| * from the server, determine which user syncs should occur. The argument array will contain every element | |
| * which has been sent through to interpretResponse. The order of syncs in this array matters. The most | |
| * important ones should come first, since publishers may limit how many are dropped on their page. | |
| */ | |
| /** | |
| * @typedef {object} BidRequest | |
| * | |
| * @property {string} bidId A string which uniquely identifies this BidRequest in the current Auction. | |
| * @property {object} params Any bidder-specific params which the publisher used in their bid request. | |
| */ | |
| /** | |
| * @typedef {object} ServerRequest | |
| * | |
| * @property {('GET'|'POST')} method The type of request which this is. | |
| * @property {string} url The endpoint for the request. For example, "//bids.example.com". | |
| * @property {string|object} data Data to be sent in the request. | |
| * @property {object} options Content-Type set in the header of the bid request, overrides default 'text/plain'. | |
| * If this is a GET request, they'll become query params. If it's a POST request, they'll be added to the body. | |
| * Strings will be added as-is. Objects will be unpacked into query params based on key/value mappings, or | |
| * JSON-serialized into the Request body. | |
| */ | |
| /** | |
| * @typedef {object} ServerResponse | |
| * | |
| * @property {*} body The response body. If this is legal JSON, then it will be parsed. Otherwise it'll be a | |
| * string with the body's content. | |
| * @property {{get: function(string): string} headers The response headers. | |
| * Call this like `ServerResponse.headers.get("Content-Type")` | |
| */ | |
| /** | |
| * @typedef {object} Bid | |
| * | |
| * @property {string} requestId The specific BidRequest which this bid is aimed at. | |
| * This should match the BidRequest.bidId which this Bid targets. | |
| * @property {string} ad A URL which can be used to load this ad, if it's chosen by the publisher. | |
| * @property {string} currency The currency code for the cpm value | |
| * @property {number} cpm The bid price, in US cents per thousand impressions. | |
| * @property {number} ttl Time-to-live - how long (in seconds) Prebid can use this bid. | |
| * @property {boolean} netRevenue Boolean defining whether the bid is Net or Gross. The default is true (Net). | |
| * @property {number} height The height of the ad, in pixels. | |
| * @property {number} width The width of the ad, in pixels. | |
| * | |
| * @property [Renderer] renderer A Renderer which can be used as a default for this bid, | |
| * if the publisher doesn't override it. This is only relevant for Outstream Video bids. | |
| */ | |
| /** | |
| * @typedef {Object} SyncOptions | |
| * | |
| * An object containing information about usersyncs which the adapter should obey. | |
| * | |
| * @property {boolean} iframeEnabled True if iframe usersyncs are allowed, and false otherwise | |
| * @property {boolean} pixelEnabled True if image usersyncs are allowed, and false otherwise | |
| */ | |
| /** | |
| * TODO: Move this to the UserSync module after that PR is merged. | |
| * | |
| * @typedef {object} UserSync | |
| * | |
| * @property {('image'|'iframe')} type The type of user sync to be done. | |
| * @property {string} url The URL which makes the sync happen. | |
| */ | |
| // common params for all mediaTypes | |
| var COMMON_BID_RESPONSE_KEYS = ['requestId', 'cpm', 'ttl', 'creativeId', 'netRevenue', 'currency']; | |
| /** | |
| * Register a bidder with prebid, using the given spec. | |
| * | |
| * If possible, Adapter modules should use this function instead of adaptermanager.registerBidAdapter(). | |
| * | |
| * @param {BidderSpec} spec An object containing the bare-bones functions we need to make a Bidder. | |
| */ | |
| function registerBidder(spec) { | |
| var mediaTypes = Array.isArray(spec.supportedMediaTypes) ? { supportedMediaTypes: spec.supportedMediaTypes } : undefined; | |
| function putBidder(spec) { | |
| var bidder = newBidder(spec); | |
| _adaptermanager2['default'].registerBidAdapter(bidder, spec.code, mediaTypes); | |
| } | |
| putBidder(spec); | |
| if (Array.isArray(spec.aliases)) { | |
| spec.aliases.forEach(function (alias) { | |
| putBidder(_extends({}, spec, { code: alias })); | |
| }); | |
| } | |
| } | |
| /** | |
| * Make a new bidder from the given spec. This is exported mainly for testing. | |
| * Adapters will probably find it more convenient to use registerBidder instead. | |
| * | |
| * @param {BidderSpec} spec | |
| */ | |
| function newBidder(spec) { | |
| return _extends(new _adapter2['default'](spec.code), { | |
| getSpec: function getSpec() { | |
| return Object.freeze(spec); | |
| }, | |
| registerSyncs: registerSyncs, | |
| callBids: function callBids(bidderRequest, addBidResponse, done, ajax) { | |
| if (!Array.isArray(bidderRequest.bids)) { | |
| return; | |
| } | |
| var adUnitCodesHandled = {}; | |
| function addBidWithCode(adUnitCode, bid) { | |
| adUnitCodesHandled[adUnitCode] = true; | |
| if (isValid(adUnitCode, bid, [bidderRequest])) { | |
| addBidResponse(adUnitCode, bid); | |
| } | |
| } | |
| // After all the responses have come back, call done() and | |
| // register any required usersync pixels. | |
| var responses = []; | |
| function afterAllResponses(bids) { | |
| var bidsArray = bids ? bids[0] ? bids : [bids] : []; | |
| var videoBid = bidsArray.some(function (bid) { | |
| return bid.mediaType === 'video'; | |
| }); | |
| var cacheEnabled = _config.config.getConfig('cache.url'); | |
| // video bids with cache enabled need to be cached first before they are considered done | |
| if (!(videoBid && cacheEnabled)) { | |
| done(); | |
| } | |
| registerSyncs(responses); | |
| } | |
| var validBidRequests = bidderRequest.bids.filter(filterAndWarn); | |
| if (validBidRequests.length === 0) { | |
| afterAllResponses(); | |
| return; | |
| } | |
| var bidRequestMap = {}; | |
| validBidRequests.forEach(function (bid) { | |
| bidRequestMap[bid.bidId] = bid; | |
| // Delete this once we are 1.0 | |
| if (!bid.adUnitCode) { | |
| bid.adUnitCode = bid.placementCode; | |
| } | |
| }); | |
| var requests = spec.buildRequests(validBidRequests, bidderRequest); | |
| if (!requests || requests.length === 0) { | |
| afterAllResponses(); | |
| return; | |
| } | |
| if (!Array.isArray(requests)) { | |
| requests = [requests]; | |
| } | |
| // Callbacks don't compose as nicely as Promises. We should call done() once _all_ the | |
| // Server requests have returned and been processed. Since `ajax` accepts a single callback, | |
| // we need to rig up a function which only executes after all the requests have been responded. | |
| var onResponse = (0, _utils.delayExecution)(afterAllResponses, requests.length); | |
| requests.forEach(processRequest); | |
| function formatGetParameters(data) { | |
| if (data) { | |
| return '?' + ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' ? (0, _utils.parseQueryStringParameters)(data) : data); | |
| } | |
| return ''; | |
| } | |
| function processRequest(request) { | |
| switch (request.method) { | |
| case 'GET': | |
| ajax('' + request.url + formatGetParameters(request.data), { | |
| success: onSuccess, | |
| error: onFailure | |
| }, undefined, _extends({ | |
| method: 'GET', | |
| withCredentials: true | |
| }, request.options)); | |
| break; | |
| case 'POST': | |
| ajax(request.url, { | |
| success: onSuccess, | |
| error: onFailure | |
| }, typeof request.data === 'string' ? request.data : JSON.stringify(request.data), _extends({ | |
| method: 'POST', | |
| contentType: 'text/plain', | |
| withCredentials: true | |
| }, request.options)); | |
| break; | |
| default: | |
| (0, _utils.logWarn)('Skipping invalid request from ' + spec.code + '. Request type ' + request.type + ' must be GET or POST'); | |
| onResponse(); | |
| } | |
| // If the server responds successfully, use the adapter code to unpack the Bids from it. | |
| // If the adapter code fails, no bids should be added. After all the bids have been added, make | |
| // sure to call the `onResponse` function so that we're one step closer to calling done(). | |
| function onSuccess(response, responseObj) { | |
| try { | |
| response = JSON.parse(response); | |
| } catch (e) {} /* response might not be JSON... that's ok. */ | |
| // Make response headers available for #1742. These are lazy-loaded because most adapters won't need them. | |
| response = { | |
| body: response, | |
| headers: headerParser(responseObj) | |
| }; | |
| responses.push(response); | |
| var bids = void 0; | |
| try { | |
| bids = spec.interpretResponse(response, request); | |
| } catch (err) { | |
| (0, _utils.logError)('Bidder ' + spec.code + ' failed to interpret the server\'s response. Continuing without bids', null, err); | |
| onResponse(); | |
| return; | |
| } | |
| if (bids) { | |
| if (bids.forEach) { | |
| bids.forEach(addBidUsingRequestMap); | |
| } else { | |
| addBidUsingRequestMap(bids); | |
| } | |
| } | |
| onResponse(bids); | |
| function addBidUsingRequestMap(bid) { | |
| var bidRequest = bidRequestMap[bid.requestId]; | |
| if (bidRequest) { | |
| var prebidBid = _extends(_bidfactory2['default'].createBid(_constants.STATUS.GOOD, bidRequest), bid); | |
| addBidWithCode(bidRequest.adUnitCode, prebidBid); | |
| } else { | |
| (0, _utils.logWarn)('Bidder ' + spec.code + ' made bid for unknown request ID: ' + bid.requestId + '. Ignoring.'); | |
| } | |
| } | |
| function headerParser(xmlHttpResponse) { | |
| return { | |
| get: responseObj.getResponseHeader.bind(responseObj) | |
| }; | |
| } | |
| } | |
| // If the server responds with an error, there's not much we can do. Log it, and make sure to | |
| // call onResponse() so that we're one step closer to calling done(). | |
| function onFailure(err) { | |
| (0, _utils.logError)('Server call for ' + spec.code + ' failed: ' + err + '. Continuing without bids.'); | |
| onResponse(); | |
| } | |
| } | |
| } | |
| }); | |
| function registerSyncs(responses) { | |
| if (spec.getUserSyncs) { | |
| var syncs = spec.getUserSyncs({ | |
| iframeEnabled: _config.config.getConfig('userSync.iframeEnabled'), | |
| pixelEnabled: _config.config.getConfig('userSync.pixelEnabled') | |
| }, responses); | |
| if (syncs) { | |
| if (!Array.isArray(syncs)) { | |
| syncs = [syncs]; | |
| } | |
| syncs.forEach(function (sync) { | |
| _userSync.userSync.registerSync(sync.type, spec.code, sync.url); | |
| }); | |
| } | |
| } | |
| } | |
| function filterAndWarn(bid) { | |
| if (!spec.isBidRequestValid(bid)) { | |
| (0, _utils.logWarn)('Invalid bid sent to bidder ' + spec.code + ': ' + JSON.stringify(bid)); | |
| return false; | |
| } | |
| return true; | |
| } | |
| } | |
| // check that the bid has a width and height set | |
| function validBidSize(adUnitCode, bid, bidRequests) { | |
| if ((bid.width || bid.width === 0) && (bid.height || bid.height === 0)) { | |
| return true; | |
| } | |
| var adUnit = (0, _utils.getBidderRequest)(bidRequests, bid.bidderCode, adUnitCode); | |
| var sizes = adUnit && adUnit.bids && adUnit.bids[0] && adUnit.bids[0].sizes; | |
| var parsedSizes = (0, _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; | |
| } | |
| // Validate the arguments sent to us by the adapter. If this returns false, the bid should be totally ignored. | |
| function isValid(adUnitCode, bid, bidRequests) { | |
| function hasValidKeys() { | |
| var bidKeys = Object.keys(bid); | |
| return COMMON_BID_RESPONSE_KEYS.every(function (key) { | |
| return (0, _includes2['default'])(bidKeys, key); | |
| }); | |
| } | |
| function errorMessage(msg) { | |
| return 'Invalid bid from ' + bid.bidderCode + '. Ignoring bid: ' + msg; | |
| } | |
| if (!adUnitCode) { | |
| (0, _utils.logWarn)('No adUnitCode was supplied to addBidResponse.'); | |
| return false; | |
| } | |
| if (!bid) { | |
| (0, _utils.logWarn)('Some adapter tried to add an undefined bid for ' + adUnitCode + '.'); | |
| return false; | |
| } | |
| if (!hasValidKeys()) { | |
| (0, _utils.logError)(errorMessage('Bidder ' + bid.bidderCode + ' is missing required params. Check http://prebid.org/dev-docs/bidder-adapter-1.html for list of params.')); | |
| return false; | |
| } | |
| if (bid.mediaType === 'native' && !(0, _native.nativeBidIsValid)(bid, bidRequests)) { | |
| (0, _utils.logError)(errorMessage('Native bid missing some required properties.')); | |
| return false; | |
| } | |
| if (bid.mediaType === 'video' && !(0, _video.isValidVideoBid)(bid, bidRequests)) { | |
| (0, _utils.logError)(errorMessage('Video bid does not have required vastUrl or renderer property')); | |
| return false; | |
| } | |
| if (bid.mediaType === 'banner' && !validBidSize(adUnitCode, bid, bidRequests)) { | |
| (0, _utils.logError)(errorMessage('Banner bids require a width and height')); | |
| return false; | |
| } | |
| return true; | |
| } | |
| /***/ }), | |
| /***/ 10: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(41); | |
| module.exports = __webpack_require__(18).Array.find; | |
| /***/ }), | |
| /***/ 11: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| var utils = __webpack_require__(0); | |
| var _requestCache = {}; | |
| // add a script tag to the page, used to add /jpt call to page | |
| exports.loadScript = function (tagSrc, callback, cacheRequest) { | |
| // var noop = () => {}; | |
| // | |
| // callback = callback || noop; | |
| if (!tagSrc) { | |
| utils.logError('Error attempting to request empty URL', 'adloader.js:loadScript'); | |
| return; | |
| } | |
| if (cacheRequest) { | |
| if (_requestCache[tagSrc]) { | |
| if (callback && typeof callback === 'function') { | |
| if (_requestCache[tagSrc].loaded) { | |
| // invokeCallbacks immediately | |
| callback(); | |
| } else { | |
| // queue the callback | |
| _requestCache[tagSrc].callbacks.push(callback); | |
| } | |
| } | |
| } else { | |
| _requestCache[tagSrc] = { | |
| loaded: false, | |
| callbacks: [] | |
| }; | |
| if (callback && typeof callback === 'function') { | |
| _requestCache[tagSrc].callbacks.push(callback); | |
| } | |
| requestResource(tagSrc, function () { | |
| _requestCache[tagSrc].loaded = true; | |
| try { | |
| for (var i = 0; i < _requestCache[tagSrc].callbacks.length; i++) { | |
| _requestCache[tagSrc].callbacks[i](); | |
| } | |
| } catch (e) { | |
| utils.logError('Error executing callback', 'adloader.js:loadScript', e); | |
| } | |
| }); | |
| } | |
| } else { | |
| // trigger one time request | |
| requestResource(tagSrc, callback); | |
| } | |
| }; | |
| function requestResource(tagSrc, callback) { | |
| var jptScript = document.createElement('script'); | |
| jptScript.type = 'text/javascript'; | |
| jptScript.async = true; | |
| // Execute a callback if necessary | |
| if (callback && typeof callback === 'function') { | |
| if (jptScript.readyState) { | |
| jptScript.onreadystatechange = function () { | |
| if (jptScript.readyState === 'loaded' || jptScript.readyState === 'complete') { | |
| jptScript.onreadystatechange = null; | |
| callback(); | |
| } | |
| }; | |
| } else { | |
| jptScript.onload = function () { | |
| callback(); | |
| }; | |
| } | |
| } | |
| jptScript.src = tagSrc; | |
| // add the new script tag to the page | |
| var elToAppend = document.getElementsByTagName('head'); | |
| elToAppend = elToAppend.length ? elToAppend : document.getElementsByTagName('body'); | |
| if (elToAppend.length) { | |
| elToAppend = elToAppend[0]; | |
| elToAppend.insertBefore(jptScript, elToAppend.firstChild); | |
| } | |
| } | |
| /***/ }), | |
| /***/ 12: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| 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"); } }; }(); | |
| exports.parseQS = parseQS; | |
| exports.formatQS = formatQS; | |
| exports.parse = parse; | |
| exports.format = format; | |
| function parseQS(query) { | |
| return !query ? {} : query.replace(/^\?/, '').split('&').reduce(function (acc, criteria) { | |
| var _criteria$split = criteria.split('='), | |
| _criteria$split2 = _slicedToArray(_criteria$split, 2), | |
| k = _criteria$split2[0], | |
| v = _criteria$split2[1]; | |
| if (/\[\]$/.test(k)) { | |
| k = k.replace('[]', ''); | |
| acc[k] = acc[k] || []; | |
| acc[k].push(v); | |
| } else { | |
| acc[k] = v || ''; | |
| } | |
| return acc; | |
| }, {}); | |
| } | |
| function formatQS(query) { | |
| return Object.keys(query).map(function (k) { | |
| return Array.isArray(query[k]) ? query[k].map(function (v) { | |
| return k + '[]=' + v; | |
| }).join('&') : k + '=' + query[k]; | |
| }).join('&'); | |
| } | |
| function parse(url, options) { | |
| var parsed = document.createElement('a'); | |
| if (options && 'noDecodeWholeURL' in options && options.noDecodeWholeURL) { | |
| parsed.href = url; | |
| } else { | |
| parsed.href = decodeURIComponent(url); | |
| } | |
| return { | |
| protocol: (parsed.protocol || '').replace(/:$/, ''), | |
| hostname: parsed.hostname, | |
| port: +parsed.port, | |
| pathname: parsed.pathname.replace(/^(?!\/)/, '/'), | |
| search: parseQS(parsed.search || ''), | |
| hash: (parsed.hash || '').replace(/^#/, ''), | |
| host: parsed.host || window.location.host | |
| }; | |
| } | |
| function format(obj) { | |
| return (obj.protocol || 'http') + '://' + (obj.host || obj.hostname + (obj.port ? ':' + obj.port : '')) + (obj.pathname || '') + (obj.search ? '?' + formatQS(obj.search || '') : '') + (obj.hash ? '#' + obj.hash : ''); | |
| } | |
| /***/ }), | |
| /***/ 13: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.userSync = undefined; | |
| 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 _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; }; | |
| exports.newUserSync = newUserSync; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| 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; } } | |
| // Set userSync default values | |
| _config.config.setDefaults({ | |
| 'userSync': { | |
| syncEnabled: true, | |
| pixelEnabled: true, | |
| syncsPerBidder: 5, | |
| syncDelay: 3000 | |
| } | |
| }); | |
| /** | |
| * Factory function which creates a new UserSyncPool. | |
| * | |
| * @param {UserSyncDependencies} userSyncDependencies Configuration options and dependencies which the | |
| * UserSync object needs in order to behave properly. | |
| */ | |
| function newUserSync(userSyncDependencies) { | |
| var publicApi = {}; | |
| // A queue of user syncs for each adapter | |
| // Let getDefaultQueue() set the defaults | |
| var queue = getDefaultQueue(); | |
| // Whether or not user syncs have been trigger on this page load | |
| var hasFired = false; | |
| // How many bids for each adapter | |
| var numAdapterBids = {}; | |
| // Use what is in config by default | |
| var usConfig = userSyncDependencies.config; | |
| // Update if it's (re)set | |
| _config.config.getConfig('userSync', function (conf) { | |
| usConfig = _extends(usConfig, conf.userSync); | |
| }); | |
| /** | |
| * @function getDefaultQueue | |
| * @summary Returns the default empty queue | |
| * @private | |
| * @return {object} A queue with no syncs | |
| */ | |
| function getDefaultQueue() { | |
| return { | |
| image: [], | |
| iframe: [] | |
| }; | |
| } | |
| /** | |
| * @function fireSyncs | |
| * @summary Trigger all user syncs in the queue | |
| * @private | |
| */ | |
| function fireSyncs() { | |
| if (!usConfig.syncEnabled || !userSyncDependencies.browserSupportsCookies || hasFired) { | |
| return; | |
| } | |
| try { | |
| // Image pixels | |
| fireImagePixels(); | |
| // Iframe syncs | |
| loadIframes(); | |
| } catch (e) { | |
| return utils.logError('Error firing user syncs', e); | |
| } | |
| // Reset the user sync queue | |
| queue = getDefaultQueue(); | |
| hasFired = true; | |
| } | |
| /** | |
| * @function fireImagePixels | |
| * @summary Loops through user sync pixels and fires each one | |
| * @private | |
| */ | |
| function fireImagePixels() { | |
| if (!usConfig.pixelEnabled) { | |
| return; | |
| } | |
| // Randomize the order of the pixels before firing | |
| // This is to avoid giving any bidder who has registered multiple syncs | |
| // any preferential treatment and balancing them out | |
| utils.shuffle(queue.image).forEach(function (sync) { | |
| var _sync = _slicedToArray(sync, 2), | |
| bidderName = _sync[0], | |
| trackingPixelUrl = _sync[1]; | |
| utils.logMessage('Invoking image pixel user sync for bidder: ' + bidderName); | |
| // Create image object and add the src url | |
| utils.triggerPixel(trackingPixelUrl); | |
| }); | |
| } | |
| /** | |
| * @function loadIframes | |
| * @summary Loops through iframe syncs and loads an iframe element into the page | |
| * @private | |
| */ | |
| function loadIframes() { | |
| if (!usConfig.iframeEnabled) { | |
| return; | |
| } | |
| // Randomize the order of these syncs just like the pixels above | |
| utils.shuffle(queue.iframe).forEach(function (sync) { | |
| var _sync2 = _slicedToArray(sync, 2), | |
| bidderName = _sync2[0], | |
| iframeUrl = _sync2[1]; | |
| utils.logMessage('Invoking iframe user sync for bidder: ' + bidderName); | |
| // Insert iframe into DOM | |
| utils.insertUserSyncIframe(iframeUrl); | |
| }); | |
| } | |
| /** | |
| * @function incrementAdapterBids | |
| * @summary Increment the count of user syncs queue for the adapter | |
| * @private | |
| * @params {object} numAdapterBids The object contain counts for all adapters | |
| * @params {string} bidder The name of the bidder adding a sync | |
| * @returns {object} The updated version of numAdapterBids | |
| */ | |
| function incrementAdapterBids(numAdapterBids, bidder) { | |
| if (!numAdapterBids[bidder]) { | |
| numAdapterBids[bidder] = 1; | |
| } else { | |
| numAdapterBids[bidder] += 1; | |
| } | |
| return numAdapterBids; | |
| } | |
| /** | |
| * @function registerSync | |
| * @summary Add sync for this bidder to a queue to be fired later | |
| * @public | |
| * @params {string} type The type of the sync including image, iframe | |
| * @params {string} bidder The name of the adapter. e.g. "rubicon" | |
| * @params {string} url Either the pixel url or iframe url depending on the type | |
| * @example <caption>Using Image Sync</caption> | |
| * // registerSync(type, adapter, pixelUrl) | |
| * userSync.registerSync('image', 'rubicon', 'http://example.com/pixel') | |
| */ | |
| publicApi.registerSync = function (type, bidder, url) { | |
| if (!usConfig.syncEnabled || !utils.isArray(queue[type])) { | |
| return utils.logWarn('User sync type "' + type + '" not supported'); | |
| } | |
| if (!bidder) { | |
| return utils.logWarn('Bidder is required for registering sync'); | |
| } | |
| if (Number(numAdapterBids[bidder]) >= usConfig.syncsPerBidder) { | |
| return utils.logWarn('Number of user syncs exceeded for "' + bidder + '"'); | |
| } | |
| // All bidders are enabled by default. If specified only register for enabled bidders. | |
| var hasEnabledBidders = usConfig.enabledBidders && usConfig.enabledBidders.length; | |
| if (hasEnabledBidders && usConfig.enabledBidders.indexOf(bidder) < 0) { | |
| return utils.logWarn('Bidder "' + bidder + '" not supported'); | |
| } | |
| queue[type].push([bidder, url]); | |
| numAdapterBids = incrementAdapterBids(numAdapterBids, bidder); | |
| }; | |
| /** | |
| * @function syncUsers | |
| * @summary Trigger all the user syncs based on publisher-defined timeout | |
| * @public | |
| * @params {int} timeout The delay in ms before syncing data - default 0 | |
| */ | |
| publicApi.syncUsers = function () { | |
| var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; | |
| if (timeout) { | |
| return setTimeout(fireSyncs, Number(timeout)); | |
| } | |
| fireSyncs(); | |
| }; | |
| /** | |
| * @function triggerUserSyncs | |
| * @summary A `syncUsers` wrapper for determining if enableOverride has been turned on | |
| * @public | |
| */ | |
| publicApi.triggerUserSyncs = function () { | |
| if (usConfig.enableOverride) { | |
| publicApi.syncUsers(); | |
| } | |
| }; | |
| return publicApi; | |
| } | |
| var browserSupportsCookies = !utils.isSafariBrowser() && utils.cookiesAreEnabled(); | |
| var userSync = exports.userSync = newUserSync({ | |
| config: _config.config.getConfig('userSync'), | |
| browserSupportsCookies: browserSupportsCookies | |
| }); | |
| /** | |
| * @typedef {Object} UserSyncDependencies | |
| * | |
| * @property {UserSyncConfig} config | |
| * @property {boolean} browserSupportsCookies True if the current browser supports cookies, and false otherwise. | |
| */ | |
| /** | |
| * @typedef {Object} UserSyncConfig | |
| * | |
| * @property {boolean} enableOverride | |
| * @property {boolean} syncEnabled | |
| * @property {boolean} pixelEnabled | |
| * @property {boolean} iframeEnabled | |
| * @property {int} syncsPerBidder | |
| * @property {string[]} enabledBidders | |
| */ | |
| /***/ }), | |
| /***/ 14: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.hasNonNativeBidder = exports.nativeBidder = exports.nativeAdUnit = exports.NATIVE_TARGETING_KEYS = exports.NATIVE_KEYS = exports.nativeAdapters = undefined; | |
| 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.processNativeAdUnitParams = processNativeAdUnitParams; | |
| exports.nativeBidIsValid = nativeBidIsValid; | |
| exports.fireNativeTrackers = fireNativeTrackers; | |
| exports.getNativeTargeting = getNativeTargeting; | |
| var _utils = __webpack_require__(0); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var nativeAdapters = exports.nativeAdapters = []; | |
| var NATIVE_KEYS = exports.NATIVE_KEYS = { | |
| title: 'hb_native_title', | |
| body: 'hb_native_body', | |
| sponsoredBy: 'hb_native_brand', | |
| image: 'hb_native_image', | |
| icon: 'hb_native_icon', | |
| clickUrl: 'hb_native_linkurl', | |
| cta: 'hb_native_cta' | |
| }; | |
| var NATIVE_TARGETING_KEYS = exports.NATIVE_TARGETING_KEYS = Object.keys(NATIVE_KEYS).map(function (key) { | |
| return NATIVE_KEYS[key]; | |
| }); | |
| var IMAGE = { | |
| image: { required: true }, | |
| title: { required: true }, | |
| sponsoredBy: { required: true }, | |
| clickUrl: { required: true }, | |
| body: { required: false }, | |
| icon: { required: false } | |
| }; | |
| var SUPPORTED_TYPES = { | |
| image: IMAGE | |
| }; | |
| /** | |
| * Recieves nativeParams from an adUnit. If the params were not of type 'type', | |
| * passes them on directly. If they were of type 'type', translate | |
| * them into the predefined specific asset requests for that type of native ad. | |
| */ | |
| function processNativeAdUnitParams(params) { | |
| if (params && params.type && typeIsSupported(params.type)) { | |
| return SUPPORTED_TYPES[params.type]; | |
| } | |
| return params; | |
| } | |
| /** | |
| * Check if the native type specified in the adUnit is supported by Prebid. | |
| */ | |
| function typeIsSupported(type) { | |
| if (!(type && (0, _includes2['default'])(Object.keys(SUPPORTED_TYPES), type))) { | |
| (0, _utils.logError)(type + ' nativeParam is not supported'); | |
| return false; | |
| } | |
| return true; | |
| } | |
| /** | |
| * Helper functions for working with native-enabled adUnits | |
| * TODO: abstract this and the video helper functions into general | |
| * adunit validation helper functions | |
| */ | |
| var nativeAdUnit = exports.nativeAdUnit = function nativeAdUnit(adUnit) { | |
| var mediaType = adUnit.mediaType === 'native'; | |
| var mediaTypes = (0, _utils.deepAccess)(adUnit, 'mediaTypes.native'); | |
| return mediaType || mediaTypes; | |
| }; | |
| var nativeBidder = exports.nativeBidder = function nativeBidder(bid) { | |
| return (0, _includes2['default'])(nativeAdapters, bid.bidder); | |
| }; | |
| var hasNonNativeBidder = exports.hasNonNativeBidder = function hasNonNativeBidder(adUnit) { | |
| return adUnit.bids.filter(function (bid) { | |
| return !nativeBidder(bid); | |
| }).length; | |
| }; | |
| /** | |
| * Validate that the native assets on this bid contain all assets that were | |
| * marked as required in the adUnit configuration. | |
| * @param {Bid} bid Native bid to validate | |
| * @param {BidRequest[]} bidRequests All bid requests for an auction | |
| * @return {Boolean} If object is valid | |
| */ | |
| function nativeBidIsValid(bid, bidRequests) { | |
| var bidRequest = (0, _utils.getBidRequest)(bid.adId, bidRequests); | |
| if (!bidRequest) { | |
| return false; | |
| } | |
| // all native bid responses must define a landing page url | |
| if (!(0, _utils.deepAccess)(bid, 'native.clickUrl')) { | |
| return false; | |
| } | |
| if ((0, _utils.deepAccess)(bid, 'native.image')) { | |
| if (!(0, _utils.deepAccess)(bid, 'native.image.height') || !(0, _utils.deepAccess)(bid, 'native.image.width')) { | |
| return false; | |
| } | |
| } | |
| if ((0, _utils.deepAccess)(bid, 'native.icon')) { | |
| if (!(0, _utils.deepAccess)(bid, 'native.icon.height') || !(0, _utils.deepAccess)(bid, 'native.icon.width')) { | |
| return false; | |
| } | |
| } | |
| var requestedAssets = bidRequest.nativeParams; | |
| if (!requestedAssets) { | |
| return true; | |
| } | |
| var requiredAssets = Object.keys(requestedAssets).filter(function (key) { | |
| return requestedAssets[key].required; | |
| }); | |
| var returnedAssets = Object.keys(bid['native']).filter(function (key) { | |
| return bid['native'][key]; | |
| }); | |
| return requiredAssets.every(function (asset) { | |
| return (0, _includes2['default'])(returnedAssets, asset); | |
| }); | |
| } | |
| /* | |
| * Native responses may have associated impression or click trackers. | |
| * This retrieves the appropriate tracker urls for the given ad object and | |
| * fires them. As a native creatives may be in a cross-origin frame, it may be | |
| * necessary to invoke this function via postMessage. secureCreatives is | |
| * configured to fire this function when it receives a `message` of 'Prebid Native' | |
| * and an `adId` with the value of the `bid.adId`. When a message is posted with | |
| * these parameters, impression trackers are fired. To fire click trackers, the | |
| * message should contain an `action` set to 'click'. | |
| * | |
| * // Native creative template example usage | |
| * <a href="%%CLICK_URL_UNESC%%%%PATTERN:hb_native_linkurl%%" | |
| * target="_blank" | |
| * onclick="fireTrackers('click')"> | |
| * %%PATTERN:hb_native_title%% | |
| * </a> | |
| * | |
| * <script> | |
| * function fireTrackers(action) { | |
| * var message = {message: 'Prebid Native', adId: '%%PATTERN:hb_adid%%'}; | |
| * if (action === 'click') {message.action = 'click';} // fires click trackers | |
| * window.parent.postMessage(JSON.stringify(message), '*'); | |
| * } | |
| * fireTrackers(); // fires impressions when creative is loaded | |
| * </script> | |
| */ | |
| function fireNativeTrackers(message, adObject) { | |
| var trackers = void 0; | |
| if (message.action === 'click') { | |
| trackers = adObject['native'] && adObject['native'].clickTrackers; | |
| } else { | |
| trackers = adObject['native'] && adObject['native'].impressionTrackers; | |
| } | |
| (trackers || []).forEach(_utils.triggerPixel); | |
| } | |
| /** | |
| * Gets native targeting key-value paris | |
| * @param {Object} bid | |
| * @return {Object} targeting | |
| */ | |
| function getNativeTargeting(bid) { | |
| var keyValues = {}; | |
| Object.keys(bid['native']).forEach(function (asset) { | |
| var key = NATIVE_KEYS[asset]; | |
| var value = bid['native'][asset]; | |
| // native image-type assets can be a string or an object with a url prop | |
| if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.url) { | |
| value = value.url; | |
| } | |
| if (key) { | |
| keyValues[key] = value; | |
| } | |
| }); | |
| return keyValues; | |
| } | |
| /***/ }), | |
| /***/ 149: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.addBidResponse = exports.AUCTION_COMPLETED = exports.AUCTION_IN_PROGRESS = exports.AUCTION_STARTED = 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; }; /** | |
| * Module for auction instances. | |
| * | |
| * In Prebid 0.x, pbjs had _bidsRequested and _bidsReceived as public properties. | |
| * Starting 1.0, Prebid will support concurrent auctions. Each auction instance will store private properties, bidsRequested and bidsReceived. | |
| * | |
| * AuctionManager will create instance of auction and will store all the auctions. | |
| * | |
| */ | |
| /** | |
| * @typedef {Object} AdUnit An object containing the adUnit configuration. | |
| * | |
| * @property {string} code A code which will be used to uniquely identify this bidder. This should be the same | |
| * one as is used in the call to registerBidAdapter | |
| * @property {Array.<size>} sizes A list of size for adUnit. | |
| * @property {object} params Any bidder-specific params which the publisher used in their bid request. | |
| * This is guaranteed to have passed the spec.areParamsValid() test. | |
| */ | |
| /** | |
| * @typedef {Array.<number>} size | |
| */ | |
| /** | |
| * @typedef {Array.<string>} AdUnitCode | |
| */ | |
| /** | |
| * @typedef {Object} BidRequest | |
| * //TODO add all properties | |
| */ | |
| /** | |
| * @typedef {Object} BidReceived | |
| * //TODO add all properties | |
| */ | |
| /** | |
| * @typedef {Object} Auction | |
| * | |
| * @property {function(): string} getAuctionStatus - returns the auction status which can be any one of 'started', 'in progress' or 'completed' | |
| * @property {function(): AdUnit[]} getAdUnits - return the adUnits for this auction instance | |
| * @property {function(): AdUnitCode[]} getAdUnitCodes - return the adUnitCodes for this auction instance | |
| * @property {function(): BidRequest[]} getBidRequests - get all bid requests for this auction instance | |
| * @property {function(): BidReceived[]} getBidsReceived - get all bid received for this auction instance | |
| * @property {function(): void} startAuctionTimer - sets the bidsBackHandler callback and starts the timer for auction | |
| * @property {function(): void} callBids - sends requests to all adapters for bids | |
| */ | |
| exports.newAuction = newAuction; | |
| exports.getStandardBidderSettings = getStandardBidderSettings; | |
| exports.getKeyValueTargetingPairs = getKeyValueTargetingPairs; | |
| exports.adjustBids = adjustBids; | |
| var _utils = __webpack_require__(0); | |
| var _cpmBucketManager = __webpack_require__(27); | |
| var _native = __webpack_require__(14); | |
| var _videoCache = __webpack_require__(150); | |
| var _Renderer = __webpack_require__(16); | |
| var _config = __webpack_require__(2); | |
| var _userSync = __webpack_require__(13); | |
| var _hook = __webpack_require__(20); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var syncUsers = _userSync.userSync.syncUsers; | |
| var utils = __webpack_require__(0); | |
| var adaptermanager = __webpack_require__(7); | |
| var events = __webpack_require__(9); | |
| var CONSTANTS = __webpack_require__(3); | |
| var AUCTION_STARTED = exports.AUCTION_STARTED = 'started'; | |
| var AUCTION_IN_PROGRESS = exports.AUCTION_IN_PROGRESS = 'inProgress'; | |
| var AUCTION_COMPLETED = exports.AUCTION_COMPLETED = 'completed'; | |
| // register event for bid adjustment | |
| events.on(CONSTANTS.EVENTS.BID_ADJUSTMENT, function (bid) { | |
| adjustBids(bid); | |
| }); | |
| /** | |
| * Creates new auction instance | |
| * | |
| * @param {Object} requestConfig | |
| * @param {AdUnit} requestConfig.adUnits | |
| * @param {AdUnitCode} requestConfig.adUnitCode | |
| * | |
| * @returns {Auction} auction instance | |
| */ | |
| function newAuction(_ref) { | |
| var adUnits = _ref.adUnits, | |
| adUnitCodes = _ref.adUnitCodes, | |
| callback = _ref.callback, | |
| cbTimeout = _ref.cbTimeout, | |
| labels = _ref.labels; | |
| var _adUnits = adUnits; | |
| var _labels = labels; | |
| var _adUnitCodes = adUnitCodes; | |
| var _bidderRequests = []; | |
| var _bidsReceived = []; | |
| var _auctionStart = void 0; | |
| var _auctionId = utils.generateUUID(); | |
| var _auctionStatus = void 0; | |
| var _callback = callback; | |
| var _timer = void 0; | |
| var _timeout = cbTimeout; | |
| var _winningBid = void 0; | |
| function addBidRequests(bidderRequests) { | |
| _bidderRequests = _bidderRequests.concat(bidderRequests); | |
| }; | |
| function addBidReceived(bidsReceived) { | |
| _bidsReceived = _bidsReceived.concat(bidsReceived); | |
| } | |
| function startAuctionTimer() { | |
| var timedOut = true; | |
| var timeoutCallback = executeCallback.bind(null, timedOut); | |
| var timer = setTimeout(timeoutCallback, _timeout); | |
| _timer = timer; | |
| } | |
| function executeCallback(timedOut, cleartimer) { | |
| // clear timer when done calls executeCallback | |
| if (cleartimer) { | |
| clearTimeout(_timer); | |
| } | |
| if (_callback != null) { | |
| if (timedOut) { | |
| utils.logMessage('Auction ' + _auctionId + ' timedOut'); | |
| var timedOutBidders = getTimedOutBids(_bidderRequests, _bidsReceived); | |
| if (timedOutBidders.length) { | |
| events.emit(CONSTANTS.EVENTS.BID_TIMEOUT, timedOutBidders); | |
| } | |
| } | |
| events.emit(CONSTANTS.EVENTS.AUCTION_END, { auctionId: _auctionId }); | |
| try { | |
| _auctionStatus = AUCTION_COMPLETED; | |
| var _adUnitCodes2 = _adUnitCodes; | |
| var bids = [_bidsReceived.filter(_utils.adUnitsFilter.bind(this, _adUnitCodes2)).reduce(groupByPlacement, {})]; | |
| _callback.apply(pbjs, bids); | |
| } catch (e) { | |
| utils.logError('Error executing bidsBackHandler', null, e); | |
| } finally { | |
| // Only automatically sync if the publisher has not chosen to "enableOverride" | |
| var userSyncConfig = _config.config.getConfig('userSync') || {}; | |
| if (!userSyncConfig.enableOverride) { | |
| // Delay the auto sync by the config delay | |
| syncUsers(userSyncConfig.syncDelay); | |
| } | |
| } | |
| _callback = null; | |
| } | |
| } | |
| function done(bidRequestId) { | |
| var innerBidRequestId = bidRequestId; | |
| return (0, _utils.delayExecution)(function () { | |
| var request = (0, _find2['default'])(_bidderRequests, function (bidRequest) { | |
| return innerBidRequestId === bidRequest.bidderRequestId; | |
| }); | |
| // this is done for cache-enabled video bids in tryAddVideoBids, after the cache is stored | |
| request.doneCbCallCount += 1; | |
| bidsBackAll(); | |
| }, 1); | |
| } | |
| /** | |
| * Execute bidBackHandler if all bidders have called done. | |
| */ | |
| function bidsBackAll() { | |
| if (_bidderRequests.every(function (bidRequest) { | |
| return bidRequest.doneCbCallCount >= 1; | |
| })) { | |
| // when all bidders have called done callback atleast once it means auction is complete | |
| utils.logInfo('Bids Received for Auction with id: ' + _auctionId, _bidsReceived); | |
| _auctionStatus = AUCTION_COMPLETED; | |
| executeCallback(false, true); | |
| } | |
| } | |
| function callBids() { | |
| startAuctionTimer(); | |
| _auctionStatus = AUCTION_STARTED; | |
| _auctionStart = Date.now(); | |
| var auctionInit = { | |
| timestamp: _auctionStart, | |
| auctionId: _auctionId, | |
| timeout: _timeout | |
| }; | |
| events.emit(CONSTANTS.EVENTS.AUCTION_INIT, auctionInit); | |
| var bidRequests = adaptermanager.makeBidRequests(_adUnits, _auctionStart, _auctionId, _timeout, _labels); | |
| utils.logInfo('Bids Requested for Auction with id: ' + _auctionId, bidRequests); | |
| bidRequests.forEach(function (bidRequest) { | |
| addBidRequests(bidRequest); | |
| }); | |
| _auctionStatus = AUCTION_IN_PROGRESS; | |
| adaptermanager.callBids(_adUnits, bidRequests, addBidResponse.bind(this), done.bind(this)); | |
| }; | |
| return { | |
| addBidReceived: addBidReceived, | |
| executeCallback: executeCallback, | |
| callBids: callBids, | |
| bidsBackAll: bidsBackAll, | |
| setWinningBid: function setWinningBid(winningBid) { | |
| _winningBid = winningBid; | |
| }, | |
| getWinningBid: function getWinningBid() { | |
| return _winningBid; | |
| }, | |
| getTimeout: function getTimeout() { | |
| return _timeout; | |
| }, | |
| getAuctionId: function getAuctionId() { | |
| return _auctionId; | |
| }, | |
| getAuctionStatus: function getAuctionStatus() { | |
| return _auctionStatus; | |
| }, | |
| getAdUnits: function getAdUnits() { | |
| return _adUnits; | |
| }, | |
| getAdUnitCodes: function getAdUnitCodes() { | |
| return _adUnitCodes; | |
| }, | |
| getBidRequests: function getBidRequests() { | |
| return _bidderRequests; | |
| }, | |
| getBidsReceived: function getBidsReceived() { | |
| return _bidsReceived; | |
| } | |
| }; | |
| } | |
| function doCallbacksIfTimedout(auctionInstance, bidResponse) { | |
| if (bidResponse.timeToRespond > auctionInstance.getTimeout() + _config.config.getConfig('timeoutBuffer')) { | |
| auctionInstance.executeCallback(true); | |
| } | |
| } | |
| // Add a bid to the auction. | |
| function addBidToAuction(auctionInstance, bidResponse) { | |
| events.emit(CONSTANTS.EVENTS.BID_RESPONSE, bidResponse); | |
| auctionInstance.addBidReceived(bidResponse); | |
| doCallbacksIfTimedout(auctionInstance, bidResponse); | |
| } | |
| // Video bids may fail if the cache is down, or there's trouble on the network. | |
| function tryAddVideoBid(auctionInstance, bidResponse, bidRequest) { | |
| var addBid = true; | |
| if (_config.config.getConfig('cache.url')) { | |
| if (!bidResponse.videoCacheKey) { | |
| addBid = false; | |
| (0, _videoCache.store)([bidResponse], function (error, cacheIds) { | |
| if (error) { | |
| utils.logWarn('Failed to save to the video cache: ' + error + '. Video bid must be discarded.'); | |
| doCallbacksIfTimedout(auctionInstance, bidResponse); | |
| } else { | |
| bidResponse.videoCacheKey = cacheIds[0].uuid; | |
| if (!bidResponse.vastUrl) { | |
| bidResponse.vastUrl = (0, _videoCache.getCacheUrl)(bidResponse.videoCacheKey); | |
| } | |
| // only set this prop after the bid has been cached to avoid early ending auction early in bidsBackAll | |
| bidRequest.doneCbCallCount += 1; | |
| addBidToAuction(auctionInstance, bidResponse); | |
| auctionInstance.bidsBackAll(); | |
| } | |
| }); | |
| } else if (!bidResponse.vastUrl) { | |
| utils.logError('videoCacheKey specified but not required vastUrl for video bid'); | |
| addBid = false; | |
| } | |
| } | |
| if (addBid) { | |
| addBidToAuction(auctionInstance, bidResponse); | |
| } | |
| } | |
| var addBidResponse = exports.addBidResponse = (0, _hook.createHook)('asyncSeries', function (adUnitCode, bid) { | |
| var auctionInstance = this; | |
| var bidRequests = auctionInstance.getBidRequests(); | |
| var auctionId = auctionInstance.getAuctionId(); | |
| var bidRequest = (0, _utils.getBidderRequest)(bidRequests, bid.bidderCode, adUnitCode); | |
| var bidResponse = getPreparedBidForAuction({ adUnitCode: adUnitCode, bid: bid, bidRequest: bidRequest, auctionId: auctionId }); | |
| if (bidResponse.mediaType === 'video') { | |
| tryAddVideoBid(auctionInstance, bidResponse, bidRequest); | |
| } else { | |
| addBidToAuction(auctionInstance, bidResponse); | |
| } | |
| }, 'addBidResponse'); | |
| // Postprocess the bids so that all the universal properties exist, no matter which bidder they came from. | |
| // This should be called before addBidToAuction(). | |
| function getPreparedBidForAuction(_ref2) { | |
| var adUnitCode = _ref2.adUnitCode, | |
| bid = _ref2.bid, | |
| bidRequest = _ref2.bidRequest, | |
| auctionId = _ref2.auctionId; | |
| var start = bidRequest.start; | |
| var bidObject = _extends({}, bid, { | |
| auctionId: auctionId, | |
| responseTimestamp: (0, _utils.timestamp)(), | |
| requestTimestamp: start, | |
| cpm: parseFloat(bid.cpm) || 0, | |
| bidder: bid.bidderCode, | |
| adUnitCode: adUnitCode | |
| }); | |
| bidObject.timeToRespond = bidObject.responseTimestamp - bidObject.requestTimestamp; | |
| // Let listeners know that now is the time to adjust the bid, if they want to. | |
| // | |
| // CAREFUL: Publishers rely on certain bid properties to be available (like cpm), | |
| // but others to not be set yet (like priceStrings). See #1372 and #1389. | |
| events.emit(CONSTANTS.EVENTS.BID_ADJUSTMENT, bidObject); | |
| // a publisher-defined renderer can be used to render bids | |
| var adUnitRenderer = bidRequest.bids && bidRequest.bids[0] && bidRequest.bids[0].renderer; | |
| if (adUnitRenderer && adUnitRenderer.url) { | |
| bidObject.renderer = _Renderer.Renderer.install({ url: adUnitRenderer.url }); | |
| bidObject.renderer.setRender(adUnitRenderer.render); | |
| } | |
| var priceStringsObj = (0, _cpmBucketManager.getPriceBucketString)(bidObject.cpm, _config.config.getConfig('customPriceBucket'), _config.config.getConfig('currency.granularityMultiplier')); | |
| bidObject.pbLg = priceStringsObj.low; | |
| bidObject.pbMg = priceStringsObj.med; | |
| bidObject.pbHg = priceStringsObj.high; | |
| bidObject.pbAg = priceStringsObj.auto; | |
| bidObject.pbDg = priceStringsObj.dense; | |
| bidObject.pbCg = priceStringsObj.custom; | |
| // if there is any key value pairs to map do here | |
| var keyValues; | |
| if (bidObject.bidderCode && (bidObject.cpm > 0 || bidObject.dealId)) { | |
| keyValues = getKeyValueTargetingPairs(bidObject.bidderCode, bidObject); | |
| } | |
| // use any targeting provided as defaults, otherwise just set from getKeyValueTargetingPairs | |
| bidObject.adserverTargeting = _extends(bidObject.adserverTargeting || {}, keyValues); | |
| return bidObject; | |
| } | |
| 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] = {}; | |
| } | |
| if (!bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { | |
| bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING] = [{ | |
| key: 'hb_bidder', | |
| val: function val(bidResponse) { | |
| return bidResponse.bidderCode; | |
| } | |
| }, { | |
| key: 'hb_adid', | |
| val: function val(bidResponse) { | |
| return bidResponse.adId; | |
| } | |
| }, { | |
| key: 'hb_pb', | |
| val: function val(bidResponse) { | |
| if (granularity === CONSTANTS.GRANULARITY_OPTIONS.AUTO) { | |
| return bidResponse.pbAg; | |
| } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.DENSE) { | |
| return bidResponse.pbDg; | |
| } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.LOW) { | |
| return bidResponse.pbLg; | |
| } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.MEDIUM) { | |
| return bidResponse.pbMg; | |
| } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.HIGH) { | |
| return bidResponse.pbHg; | |
| } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.CUSTOM) { | |
| return bidResponse.pbCg; | |
| } | |
| } | |
| }, { | |
| key: 'hb_size', | |
| val: function val(bidResponse) { | |
| return bidResponse.size; | |
| } | |
| }, { | |
| key: 'hb_deal', | |
| val: function val(bidResponse) { | |
| return bidResponse.dealId; | |
| } | |
| }, { | |
| key: 'hb_source', | |
| val: function val(bidResponse) { | |
| return bidResponse.source; | |
| } | |
| }, { | |
| key: 'hb_format', | |
| val: function val(bidResponse) { | |
| return bidResponse.mediaType; | |
| } | |
| }]; | |
| } | |
| return bidder_settings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]; | |
| } | |
| function getKeyValueTargetingPairs(bidderCode, custBidObj) { | |
| if (!custBidObj) { | |
| return {}; | |
| } | |
| var keyValues = {}; | |
| var bidder_settings = pbjs.bidderSettings; | |
| // 1) set the keys from "standard" setting or from prebid defaults | |
| if (bidder_settings) { | |
| // initialize default if not set | |
| var standardSettings = getStandardBidderSettings(); | |
| setKeys(keyValues, standardSettings, custBidObj); | |
| // 2) set keys from specific bidder setting override if they exist | |
| if (bidderCode && bidder_settings[bidderCode] && bidder_settings[bidderCode][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { | |
| setKeys(keyValues, bidder_settings[bidderCode], custBidObj); | |
| custBidObj.sendStandardTargeting = bidder_settings[bidderCode].sendStandardTargeting; | |
| } | |
| } | |
| // set native key value targeting | |
| if (custBidObj['native']) { | |
| keyValues = _extends({}, keyValues, (0, _native.getNativeTargeting)(custBidObj)); | |
| } | |
| return keyValues; | |
| } | |
| function setKeys(keyValues, bidderSettings, custBidObj) { | |
| var targeting = bidderSettings[CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]; | |
| custBidObj.size = custBidObj.getSize(); | |
| utils._each(targeting, function (kvPair) { | |
| var key = kvPair.key; | |
| var value = kvPair.val; | |
| if (keyValues[key]) { | |
| utils.logWarn('The key: ' + key + ' is getting ovewritten'); | |
| } | |
| if (utils.isFn(value)) { | |
| try { | |
| value = value(custBidObj); | |
| } catch (e) { | |
| utils.logError('bidmanager', 'ERROR', e); | |
| } | |
| } | |
| if ((typeof bidderSettings.suppressEmptyKeys !== 'undefined' && bidderSettings.suppressEmptyKeys === true || key === 'hb_deal') && ( // hb_deal is suppressed automatically if not set | |
| utils.isEmptyStr(value) || value === null || value === undefined)) { | |
| utils.logInfo("suppressing empty key '" + key + "' from adserver targeting"); | |
| } else { | |
| keyValues[key] = value; | |
| } | |
| }); | |
| return keyValues; | |
| } | |
| function adjustBids(bid) { | |
| var code = bid.bidderCode; | |
| var bidPriceAdjusted = bid.cpm; | |
| var bidCpmAdjustment = void 0; | |
| if (pbjs.bidderSettings) { | |
| if (code && pbjs.bidderSettings[code] && typeof pbjs.bidderSettings[code].bidCpmAdjustment === 'function') { | |
| bidCpmAdjustment = pbjs.bidderSettings[code].bidCpmAdjustment; | |
| } else if (pbjs.bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD] && typeof pbjs.bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD].bidCpmAdjustment === 'function') { | |
| bidCpmAdjustment = pbjs.bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD].bidCpmAdjustment; | |
| } | |
| if (bidCpmAdjustment) { | |
| try { | |
| bidPriceAdjusted = bidCpmAdjustment(bid.cpm, _extends({}, bid)); | |
| } catch (e) { | |
| utils.logError('Error during bid adjustment', 'bidmanager.js', e); | |
| } | |
| } | |
| } | |
| if (bidPriceAdjusted >= 0) { | |
| bid.cpm = bidPriceAdjusted; | |
| } | |
| } | |
| /** | |
| * groupByPlacement is a reduce function that converts an array of Bid objects | |
| * to an object with placement codes as keys, with each key representing an object | |
| * with an array of `Bid` objects for that placement | |
| * @returns {*} as { [adUnitCode]: { bids: [Bid, Bid, Bid] } } | |
| */ | |
| function groupByPlacement(bidsByPlacement, bid) { | |
| if (!bidsByPlacement[bid.adUnitCode]) { | |
| bidsByPlacement[bid.adUnitCode] = { bids: [] }; | |
| } | |
| bidsByPlacement[bid.adUnitCode].bids.push(bid); | |
| return bidsByPlacement; | |
| } | |
| /** | |
| * Returns a list of bids that we haven't received a response yet where the bidder did not call done | |
| * @param {BidRequest[]} bidderRequests List of bids requested for auction instance | |
| * @param {BidReceived[]} bidsReceived List of bids received for auction instance | |
| * | |
| * @typedef {Object} TimedOutBid | |
| * @property {string} bidId The id representing the bid | |
| * @property {string} bidder The string name of the bidder | |
| * @property {string} adUnitCode The code used to uniquely identify the ad unit on the publisher's page | |
| * @property {string} auctionId The id representing the auction | |
| * | |
| * @return {Array<TimedOutBid>} List of bids that Prebid hasn't received a response for | |
| */ | |
| function getTimedOutBids(bidderRequests, bidsReceived) { | |
| var bidRequestedWithoutDoneCodes = bidderRequests.filter(function (bidderRequest) { | |
| return !bidderRequest.doneCbCallCount; | |
| }).map(function (bid) { | |
| return bid.bidderCode; | |
| }).filter(_utils.uniques); | |
| var bidReceivedCodes = bidsReceived.map(function (bid) { | |
| return bid.bidder; | |
| }).filter(_utils.uniques); | |
| var timedOutBidderCodes = bidRequestedWithoutDoneCodes.filter(function (bidder) { | |
| return !(0, _includes2['default'])(bidReceivedCodes, bidder); | |
| }); | |
| var timedOutBids = bidderRequests.map(function (bid) { | |
| return (bid.bids || []).filter(function (bid) { | |
| return (0, _includes2['default'])(timedOutBidderCodes, bid.bidder); | |
| }); | |
| }).reduce(_utils.flatten, []).map(function (bid) { | |
| return { | |
| bidId: bid.bidId, | |
| bidder: bid.bidder, | |
| adUnitCode: bid.adUnitCode, | |
| auctionId: bid.auctionId | |
| }; | |
| }); | |
| return timedOutBids; | |
| } | |
| /***/ }), | |
| /***/ 15: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| var utils = __webpack_require__(0); | |
| /** | |
| Required paramaters | |
| bidderCode, | |
| height, | |
| width, | |
| statusCode | |
| Optional paramaters | |
| adId, | |
| cpm, | |
| ad, | |
| adUrl, | |
| dealId, | |
| priceKeyString; | |
| */ | |
| function Bid(statusCode, bidRequest) { | |
| var _bidId = bidRequest && bidRequest.bidId || utils.getUniqueIdentifierStr(); | |
| var _bidSrc = bidRequest && bidRequest.src || 'client'; | |
| var _statusCode = statusCode || 0; | |
| this.bidderCode = bidRequest && bidRequest.bidder || ''; | |
| this.width = 0; | |
| this.height = 0; | |
| this.statusMessage = _getStatus(); | |
| this.adId = _bidId; | |
| this.mediaType = 'banner'; | |
| this.source = _bidSrc; | |
| function _getStatus() { | |
| switch (_statusCode) { | |
| case 0: | |
| return 'Pending'; | |
| case 1: | |
| return 'Bid available'; | |
| case 2: | |
| return 'Bid returned empty or error response'; | |
| case 3: | |
| return 'Bid timed out'; | |
| } | |
| } | |
| this.getStatusCode = function () { | |
| return _statusCode; | |
| }; | |
| // returns the size of the bid creative. Concatenation of width and height by ‘x’. | |
| this.getSize = function () { | |
| return this.width + 'x' + this.height; | |
| }; | |
| } | |
| // Bid factory function. | |
| exports.createBid = function (statusCode, bidRequest) { | |
| return new Bid(statusCode, bidRequest); | |
| }; | |
| /***/ }), | |
| /***/ 150: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.store = store; | |
| exports.getCacheUrl = getCacheUrl; | |
| var _ajax = __webpack_require__(6); | |
| var _config = __webpack_require__(2); | |
| /** | |
| * @typedef {object} CacheableUrlBid | |
| * @property {string} vastUrl A URL which loads some valid VAST XML. | |
| */ | |
| /** | |
| * @typedef {object} CacheablePayloadBid | |
| * @property {string} vastXml 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. | |
| * | |
| * @param {string} uri The URI where the VAST content can be found. | |
| * @return A VAST URL which loads XML from the given URI. | |
| */ | |
| /** | |
| * This module interacts with the server used to cache video ad content to be restored later. | |
| * At a high level, the expected workflow goes like this: | |
| * | |
| * - Request video ads from Bidders | |
| * - Generate IDs for each valid bid, and cache the key/value pair on the server. | |
| * - Return these IDs so that publishers can use them to fetch the bids later. | |
| * | |
| * This trickery helps integrate with ad servers, which set character limits on request params. | |
| */ | |
| function wrapURI(uri) { | |
| // Technically, this is vulnerable to cross-script injection by sketchy vastUrl bids. | |
| // We could make sure it's a valid URI... but since we're loading VAST XML from the | |
| // URL they provide anyway, that's probably not a big deal. | |
| return '<VAST version="3.0">\n <Ad>\n <Wrapper>\n <AdSystem>prebid.org wrapper</AdSystem>\n <VASTAdTagURI><![CDATA[' + uri + ']]></VASTAdTagURI>\n <Impression></Impression>\n <Creatives></Creatives>\n </Wrapper>\n </Ad>\n </VAST>'; | |
| } | |
| /** | |
| * Wraps a bid in the format expected by the prebid-server endpoints, or returns null if | |
| * the bid can't be converted cleanly. | |
| * | |
| * @param {CacheableBid} bid | |
| */ | |
| function toStorageRequest(bid) { | |
| var vastValue = bid.vastXml ? bid.vastXml : wrapURI(bid.vastUrl); | |
| return { | |
| type: 'xml', | |
| value: vastValue | |
| }; | |
| } | |
| /** | |
| * A function which should be called with the results of the storage operation. | |
| * | |
| * @callback videoCacheStoreCallback | |
| * | |
| * @param {Error} [error] The error, if one occurred. | |
| * @param {?string[]} uuids An array of unique IDs. The array will have one element for each bid we were asked | |
| * to store. It may include null elements if some of the bids were malformed, or an error occurred. | |
| * Each non-null element in this array is a valid input into the retrieve function, which will fetch | |
| * some VAST XML which can be used to render this bid's ad. | |
| */ | |
| /** | |
| * A function which bridges the APIs between the videoCacheStoreCallback and our ajax function's API. | |
| * | |
| * @param {videoCacheStoreCallback} done A callback to the "store" function. | |
| * @return {Function} A callback which interprets the cache server's responses, and makes up the right | |
| * arguments for our callback. | |
| */ | |
| function shimStorageCallback(done) { | |
| return { | |
| success: function success(responseBody) { | |
| var ids = void 0; | |
| try { | |
| ids = JSON.parse(responseBody).responses; | |
| } catch (e) { | |
| done(e, []); | |
| return; | |
| } | |
| 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)), []); | |
| } | |
| }; | |
| } | |
| /** | |
| * If the given bid is for a Video ad, generate a unique ID and cache it somewhere server-side. | |
| * | |
| * @param {CacheableBid[]} bids A list of bid objects which should be cached. | |
| * @param {videoCacheStoreCallback} [done] An optional callback which should be executed after | |
| * the data has been stored in the cache. | |
| */ | |
| function store(bids, done) { | |
| var requestData = { | |
| puts: bids.map(toStorageRequest) | |
| }; | |
| (0, _ajax.ajax)(_config.config.getConfig('cache.url'), shimStorageCallback(done), JSON.stringify(requestData), { | |
| contentType: 'text/plain', | |
| withCredentials: true | |
| }); | |
| } | |
| function getCacheUrl(id) { | |
| return _config.config.getConfig('cache.url') + '?uuid=' + id; | |
| } | |
| /***/ }), | |
| /***/ 16: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.Renderer = Renderer; | |
| var _adloader = __webpack_require__(11); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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; } } | |
| /** | |
| * @typedef {object} Renderer | |
| * | |
| * A Renderer stores some functions which are used to render a particular Bid. | |
| * These are used in Outstream Video Bids, returned on the Bid by the adapter, and will | |
| * be used to render that bid unless the Publisher overrides them. | |
| */ | |
| function Renderer(options) { | |
| var _this = this; | |
| var url = options.url, | |
| config = options.config, | |
| id = options.id, | |
| callback = options.callback, | |
| loaded = options.loaded; | |
| this.url = url; | |
| this.config = config; | |
| this.handlers = {}; | |
| this.id = id; | |
| // a renderer may push to the command queue to delay rendering until the | |
| // render function is loaded by loadScript, at which point the the command | |
| // queue will be processed | |
| this.loaded = loaded; | |
| this.cmd = []; | |
| this.push = function (func) { | |
| if (typeof func !== 'function') { | |
| utils.logError('Commands given to Renderer.push must be wrapped in a function'); | |
| return; | |
| } | |
| _this.loaded ? func.call() : _this.cmd.push(func); | |
| }; | |
| // bidders may override this with the `callback` property given to `install` | |
| this.callback = callback || function () { | |
| _this.loaded = true; | |
| _this.process(); | |
| }; | |
| // we expect to load a renderer url once only so cache the request to load script | |
| (0, _adloader.loadScript)(url, this.callback, true); | |
| } | |
| Renderer.install = function (_ref) { | |
| var url = _ref.url, | |
| config = _ref.config, | |
| id = _ref.id, | |
| callback = _ref.callback, | |
| loaded = _ref.loaded; | |
| return new Renderer({ url: url, config: config, id: id, callback: callback, loaded: loaded }); | |
| }; | |
| Renderer.prototype.getConfig = function () { | |
| return this.config; | |
| }; | |
| Renderer.prototype.setRender = function (fn) { | |
| this.render = fn; | |
| }; | |
| Renderer.prototype.setEventHandlers = function (handlers) { | |
| this.handlers = handlers; | |
| }; | |
| Renderer.prototype.handleVideoEvent = function (_ref2) { | |
| var id = _ref2.id, | |
| eventName = _ref2.eventName; | |
| if (typeof this.handlers[eventName] === 'function') { | |
| this.handlers[eventName](); | |
| } | |
| utils.logMessage('Prebid Renderer event for id ' + id + ' type ' + eventName); | |
| }; | |
| /* | |
| * Calls functions that were pushed to the command queue before the | |
| * renderer was loaded by `loadScript` | |
| */ | |
| Renderer.prototype.process = function () { | |
| while (this.cmd.length > 0) { | |
| try { | |
| this.cmd.shift().call(); | |
| } catch (error) { | |
| utils.logError('Error processing Renderer command: ', error); | |
| } | |
| } | |
| }; | |
| /***/ }), | |
| /***/ 17: | |
| /***/ (function(module, exports) { | |
| // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 | |
| var global = module.exports = typeof window != 'undefined' && window.Math == Math | |
| ? window : typeof self != 'undefined' && self.Math == Math ? self | |
| // eslint-disable-next-line no-new-func | |
| : Function('return this')(); | |
| if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef | |
| /***/ }), | |
| /***/ 18: | |
| /***/ (function(module, exports) { | |
| var core = module.exports = { version: '2.5.3' }; | |
| if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef | |
| /***/ }), | |
| /***/ 19: | |
| /***/ (function(module, exports) { | |
| module.exports = function (it) { | |
| return typeof it === 'object' ? it !== null : typeof it === 'function'; | |
| }; | |
| /***/ }), | |
| /***/ 2: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.config = exports.RANDOM = 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__(27); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| var _hook = __webpack_require__(20); | |
| 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 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 = true; | |
| var DEFAULT_TIMEOUTBUFFER = 200; | |
| var RANDOM = exports.RANDOM = 'random'; | |
| var FIXED = 'fixed'; | |
| var VALID_ORDERS = {}; | |
| VALID_ORDERS[RANDOM] = true; | |
| VALID_ORDERS[FIXED] = true; | |
| var DEFAULT_BIDDER_SEQUENCE = RANDOM; | |
| var GRANULARITY_OPTIONS = { | |
| LOW: 'low', | |
| MEDIUM: 'medium', | |
| HIGH: 'high', | |
| AUTO: 'auto', | |
| DENSE: 'dense', | |
| CUSTOM: 'custom' | |
| }; | |
| var ALL_TOPICS = '*'; | |
| /** | |
| * @typedef {object} PrebidConfig | |
| * | |
| * @property {string} cache.url Set a url if we should use prebid-cache to store video bids before adding | |
| * bids to the auction. **NOTE** This must be set if you want to use the dfpAdServerVideo module. | |
| */ | |
| function newConfig() { | |
| var listeners = []; | |
| var defaults = void 0; | |
| var config = void 0; | |
| function resetConfig() { | |
| defaults = {}; | |
| config = { | |
| // `debug` is equivalent to legacy `pbjs.logging` property | |
| _debug: DEFAULT_DEBUG, | |
| get debug() { | |
| return this._debug; | |
| }, | |
| set debug(val) { | |
| this._debug = val; | |
| }, | |
| // default timeout for all bids | |
| _bidderTimeout: DEFAULT_BIDDER_TIMEOUT, | |
| get bidderTimeout() { | |
| return 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 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.CUSTOM; | |
| 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; | |
| }, | |
| _bidderSequence: DEFAULT_BIDDER_SEQUENCE, | |
| get bidderSequence() { | |
| return this._bidderSequence; | |
| }, | |
| set bidderSequence(val) { | |
| if (VALID_ORDERS[val]) { | |
| this._bidderSequence = val; | |
| } else { | |
| utils.logWarn('Invalid order: ' + val + '. Bidder Sequence was not set.'); | |
| } | |
| }, | |
| // timeout buffer to adjust for bidder CDN latency | |
| _timoutBuffer: DEFAULT_TIMEOUTBUFFER, | |
| get timeoutBuffer() { | |
| return this._timoutBuffer; | |
| }, | |
| set timeoutBuffer(val) { | |
| this._timoutBuffer = val; | |
| } | |
| }; | |
| function hasGranularity(val) { | |
| return (0, _find2['default'])(Object.keys(GRANULARITY_OPTIONS), 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.isValidPriceConfig)(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 configuration | |
| * property name. Allows deep access e.g. getConfig('currency.adServerCurrency') | |
| * | |
| * 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 ? utils.deepAccess(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 | |
| */ | |
| var setConfig = (0, _hook.createHook)('asyncSeries', function setConfig(options) { | |
| if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') { | |
| utils.logError('setConfig options must be an object'); | |
| return; | |
| } | |
| var topics = Object.keys(options); | |
| var topicalConfig = {}; | |
| topics.forEach(function (topic) { | |
| var option = options[topic]; | |
| if (_typeof(defaults[topic]) === 'object' && (typeof option === 'undefined' ? 'undefined' : _typeof(option)) === 'object') { | |
| option = _extends({}, defaults[topic], option); | |
| } | |
| topicalConfig[topic] = config[topic] = option; | |
| }); | |
| callSubscribers(topicalConfig); | |
| }); | |
| /** | |
| * Sets configuration defaults which setConfig values can be applied on top of | |
| * @param {object} options | |
| */ | |
| function setDefaults(options) { | |
| if ((typeof defaults === 'undefined' ? 'undefined' : _typeof(defaults)) !== 'object') { | |
| utils.logError('defaults must be an object'); | |
| return; | |
| } | |
| _extends(defaults, options); | |
| // Add default values to config as well | |
| _extends(config, 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 (0, _includes2['default'])(TOPICS, 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); | |
| }); | |
| } | |
| resetConfig(); | |
| return { | |
| getConfig: getConfig, | |
| setConfig: setConfig, | |
| setDefaults: setDefaults, | |
| resetConfig: resetConfig | |
| }; | |
| } | |
| var config = exports.config = newConfig(); | |
| /***/ }), | |
| /***/ 20: | |
| /***/ (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 _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.createHook = createHook; | |
| /** | |
| * @typedef {function} HookedFunction | |
| * @property {function(function(), [number])} addHook A method that takes a new function to attach as a hook | |
| * to the HookedFunction | |
| * @property {function(function())} removeHook A method to remove attached hooks | |
| */ | |
| /** | |
| * A map of global hook methods to allow easy extension of hooked functions that are intended to be extended globally | |
| * @type {{}} | |
| */ | |
| var hooks = exports.hooks = {}; | |
| /** | |
| * A utility function for allowing a regular function to be extensible with additional hook functions | |
| * @param {string} type The method for applying all attached hooks when this hooked function is called | |
| * @param {function()} fn The function to make hookable | |
| * @param {string} hookName If provided this allows you to register a name for a global hook to have easy access to | |
| * the addHook and removeHook methods for that hook (which are usually accessed as methods on the function itself) | |
| * @returns {HookedFunction} A new function that implements the HookedFunction interface | |
| */ | |
| function createHook(type, fn, hookName) { | |
| var _hooks = [{ fn: fn, priority: 0 }]; | |
| var types = { | |
| sync: function sync() { | |
| var _this = this; | |
| for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | |
| args[_key] = arguments[_key]; | |
| } | |
| _hooks.forEach(function (hook) { | |
| hook.fn.apply(_this, args); | |
| }); | |
| }, | |
| asyncSeries: function asyncSeries() { | |
| var _this2 = this; | |
| for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | |
| args[_key2] = arguments[_key2]; | |
| } | |
| var curr = 0; | |
| var asyncSeriesNext = function asyncSeriesNext() { | |
| for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | |
| args[_key3] = arguments[_key3]; | |
| } | |
| var hook = _hooks[++curr]; | |
| if ((typeof hook === 'undefined' ? 'undefined' : _typeof(hook)) === 'object' && typeof hook.fn === 'function') { | |
| return hook.fn.apply(_this2, args.concat(asyncSeriesNext)); | |
| } | |
| }; | |
| return _hooks[curr].fn.apply(this, args.concat(asyncSeriesNext)); | |
| } | |
| }; | |
| if (!types[type]) { | |
| throw 'invalid hook type'; | |
| } | |
| var methods = { | |
| addHook: function addHook(fn) { | |
| var priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10; | |
| if (typeof fn === 'function') { | |
| _hooks.push({ | |
| fn: fn, | |
| priority: priority | |
| }); | |
| _hooks.sort(function (a, b) { | |
| return b.priority - a.priority; | |
| }); | |
| } | |
| }, | |
| removeHook: function removeHook(removeFn) { | |
| _hooks = _hooks.filter(function (hook) { | |
| return hook.fn === fn || hook.fn !== removeFn; | |
| }); | |
| } | |
| }; | |
| if (typeof hookName === 'string') { | |
| hooks[hookName] = methods; | |
| } | |
| function hookedFn() { | |
| for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { | |
| args[_key4] = arguments[_key4]; | |
| } | |
| if (_hooks.length === 1 && _hooks[0].fn === fn) { | |
| return fn.apply(this, args); | |
| } | |
| return types[type].apply(this, args); | |
| } | |
| return _extends(hookedFn, methods); | |
| } | |
| /***/ }), | |
| /***/ 21: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(94); | |
| module.exports = __webpack_require__(18).Array.findIndex; | |
| /***/ }), | |
| /***/ 22: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var global = __webpack_require__(17); | |
| var core = __webpack_require__(18); | |
| var ctx = __webpack_require__(28); | |
| var hide = __webpack_require__(43); | |
| var PROTOTYPE = 'prototype'; | |
| var $export = function (type, name, source) { | |
| var IS_FORCED = type & $export.F; | |
| var IS_GLOBAL = type & $export.G; | |
| var IS_STATIC = type & $export.S; | |
| var IS_PROTO = type & $export.P; | |
| var IS_BIND = type & $export.B; | |
| var IS_WRAP = type & $export.W; | |
| var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); | |
| var expProto = exports[PROTOTYPE]; | |
| var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; | |
| var key, own, out; | |
| if (IS_GLOBAL) source = name; | |
| for (key in source) { | |
| // contains in native | |
| own = !IS_FORCED && target && target[key] !== undefined; | |
| if (own && key in exports) continue; | |
| // export native or passed | |
| out = own ? target[key] : source[key]; | |
| // prevent global pollution for namespaces | |
| exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] | |
| // bind timers to global for call from export context | |
| : IS_BIND && own ? ctx(out, global) | |
| // wrap global constructors for prevent change them in library | |
| : IS_WRAP && target[key] == out ? (function (C) { | |
| var F = function (a, b, c) { | |
| if (this instanceof C) { | |
| switch (arguments.length) { | |
| case 0: return new C(); | |
| case 1: return new C(a); | |
| case 2: return new C(a, b); | |
| } return new C(a, b, c); | |
| } return C.apply(this, arguments); | |
| }; | |
| F[PROTOTYPE] = C[PROTOTYPE]; | |
| return F; | |
| // make static versions for prototype methods | |
| })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; | |
| // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% | |
| if (IS_PROTO) { | |
| (exports.virtual || (exports.virtual = {}))[key] = out; | |
| // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% | |
| if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); | |
| } | |
| } | |
| }; | |
| // type bitmap | |
| $export.F = 1; // forced | |
| $export.G = 2; // global | |
| $export.S = 4; // static | |
| $export.P = 8; // proto | |
| $export.B = 16; // bind | |
| $export.W = 32; // wrap | |
| $export.U = 64; // safe | |
| $export.R = 128; // real proto method for `library` | |
| module.exports = $export; | |
| /***/ }), | |
| /***/ 23: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // Thank's IE8 for his funny defineProperty | |
| module.exports = !__webpack_require__(29)(function () { | |
| return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; | |
| }); | |
| /***/ }), | |
| /***/ 24: | |
| /***/ (function(module, exports) { | |
| module.exports = function () { /* empty */ }; | |
| /***/ }), | |
| /***/ 25: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports["default"] = Adapter; | |
| function Adapter(code) { | |
| var bidderCode = code; | |
| function setBidderCode(code) { | |
| bidderCode = code; | |
| } | |
| function getBidderCode() { | |
| return bidderCode; | |
| } | |
| function callBids() {} | |
| return { | |
| callBids: callBids, | |
| setBidderCode: setBidderCode, | |
| getBidderCode: getBidderCode | |
| }; | |
| } | |
| /***/ }), | |
| /***/ 26: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.auctionManager = undefined; | |
| exports.newAuctionManager = newAuctionManager; | |
| var _utils = __webpack_require__(0); | |
| var _auction = __webpack_require__(149); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var CONSTANTS = __webpack_require__(3); | |
| /** | |
| * Creates new instance of auctionManager. There will only be one instance of auctionManager but | |
| * a factory is created to assist in testing. | |
| * | |
| * @returns {AuctionManager} auctionManagerInstance | |
| */ | |
| /** | |
| * AuctionManager modules is responsible for creating auction instances. | |
| * This module is the gateway for Prebid core to access auctions. | |
| * It stores all created instances of auction and can be used to get consolidated values from auction. | |
| */ | |
| /** | |
| * @typedef {Object} AuctionManager | |
| * | |
| * @property {function(): Array} getBidsRequested - returns cosolidated bid requests | |
| * @property {function(): Array} getBidsReceived - returns cosolidated bid received | |
| * @property {function(): Array} getAdUnits - returns cosolidated adUnits | |
| * @property {function(): Array} getAdUnitCodes - returns cosolidated adUnitCodes | |
| * @property {function(): Object} createAuction - creates auction instance and stores it for future reference | |
| * @property {function(): Object} findBidByAdId - find bid received by adId. This function will be called by pbjs.renderAd | |
| * @property {function(): Object} getStandardBidderAdServerTargeting - returns standard bidder targeting for all the adapters. Refer http://prebid.org/dev-docs/publisher-api-reference.html#module_pbjs.bidderSettings for more details | |
| */ | |
| function newAuctionManager() { | |
| var _auctions = []; | |
| var auctionManager = {}; | |
| auctionManager.addWinningBid = function (bid) { | |
| var auction = (0, _find2['default'])(_auctions, function (auction) { | |
| return auction.getAuctionId() === bid.auctionId; | |
| }); | |
| if (auction) { | |
| auction.setWinningBid(bid); | |
| } else { | |
| utils.logWarn('Auction not found when adding winning bid'); | |
| } | |
| }; | |
| auctionManager.getAllWinningBids = function () { | |
| return _auctions.map(function (auction) { | |
| return auction.getWinningBid(); | |
| }).reduce(_utils.flatten, []); | |
| }; | |
| auctionManager.getBidsRequested = function () { | |
| return _auctions.map(function (auction) { | |
| return auction.getBidRequests(); | |
| }).reduce(_utils.flatten, []); | |
| }; | |
| auctionManager.getBidsReceived = function () { | |
| // As of now, an old bid which is not used in auction 1 can be used in auction n. | |
| // To prevent this, bid.ttl (time to live) will be added to this logic and bid pool will also be added | |
| // As of now none of the adapters are sending back bid.ttl | |
| return _auctions.map(function (auction) { | |
| if (auction.getAuctionStatus() === _auction.AUCTION_COMPLETED) { | |
| return auction.getBidsReceived(); | |
| } | |
| }).reduce(_utils.flatten, []).filter(function (bid) { | |
| return bid; | |
| }); | |
| }; | |
| auctionManager.getAdUnits = function () { | |
| return _auctions.map(function (auction) { | |
| return auction.getAdUnits(); | |
| }).reduce(_utils.flatten, []); | |
| }; | |
| auctionManager.getAdUnitCodes = function () { | |
| return _auctions.map(function (auction) { | |
| return auction.getAdUnitCodes(); | |
| }).reduce(_utils.flatten, []).filter(_utils.uniques); | |
| }; | |
| auctionManager.createAuction = function (_ref) { | |
| var adUnits = _ref.adUnits, | |
| adUnitCodes = _ref.adUnitCodes, | |
| callback = _ref.callback, | |
| cbTimeout = _ref.cbTimeout, | |
| labels = _ref.labels; | |
| var auction = (0, _auction.newAuction)({ adUnits: adUnits, adUnitCodes: adUnitCodes, callback: callback, cbTimeout: cbTimeout, labels: labels }); | |
| _addAuction(auction); | |
| return auction; | |
| }; | |
| auctionManager.findBidByAdId = function (adId) { | |
| return (0, _find2['default'])(_auctions.map(function (auction) { | |
| return auction.getBidsReceived(); | |
| }).reduce(_utils.flatten, []), function (bid) { | |
| return bid.adId === adId; | |
| }); | |
| }; | |
| auctionManager.getStandardBidderAdServerTargeting = function () { | |
| return (0, _auction.getStandardBidderSettings)()[CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]; | |
| }; | |
| function _addAuction(auction) { | |
| _auctions.push(auction); | |
| } | |
| return auctionManager; | |
| } | |
| var auctionManager = exports.auctionManager = newAuctionManager(); | |
| /***/ }), | |
| /***/ 27: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.isValidPriceConfig = exports.getPriceBucketString = undefined; | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var utils = __webpack_require__(0); | |
| var _defaultPrecision = 2; | |
| var _lgPriceConfig = { | |
| 'buckets': [{ | |
| 'min': 0, | |
| 'max': 5, | |
| 'increment': 0.5 | |
| }] | |
| }; | |
| var _mgPriceConfig = { | |
| 'buckets': [{ | |
| 'min': 0, | |
| 'max': 20, | |
| 'increment': 0.1 | |
| }] | |
| }; | |
| var _hgPriceConfig = { | |
| 'buckets': [{ | |
| 'min': 0, | |
| 'max': 20, | |
| 'increment': 0.01 | |
| }] | |
| }; | |
| var _densePriceConfig = { | |
| 'buckets': [{ | |
| 'min': 0, | |
| 'max': 3, | |
| 'increment': 0.01 | |
| }, { | |
| 'min': 3, | |
| 'max': 8, | |
| 'increment': 0.05 | |
| }, { | |
| 'min': 8, | |
| 'max': 20, | |
| 'increment': 0.5 | |
| }] | |
| }; | |
| var _autoPriceConfig = { | |
| 'buckets': [{ | |
| 'min': 0, | |
| 'max': 5, | |
| 'increment': 0.05 | |
| }, { | |
| 'min': 5, | |
| 'max': 10, | |
| 'increment': 0.1 | |
| }, { | |
| 'min': 10, | |
| 'max': 20, | |
| 'increment': 0.5 | |
| }] | |
| }; | |
| function getPriceBucketString(cpm, customConfig) { | |
| var granularityMultiplier = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; | |
| var cpmFloat = parseFloat(cpm); | |
| if (isNaN(cpmFloat)) { | |
| cpmFloat = ''; | |
| } | |
| return { | |
| low: cpmFloat === '' ? '' : getCpmStringValue(cpm, _lgPriceConfig, granularityMultiplier), | |
| med: cpmFloat === '' ? '' : getCpmStringValue(cpm, _mgPriceConfig, granularityMultiplier), | |
| high: cpmFloat === '' ? '' : getCpmStringValue(cpm, _hgPriceConfig, granularityMultiplier), | |
| auto: cpmFloat === '' ? '' : getCpmStringValue(cpm, _autoPriceConfig, granularityMultiplier), | |
| dense: cpmFloat === '' ? '' : getCpmStringValue(cpm, _densePriceConfig, granularityMultiplier), | |
| custom: cpmFloat === '' ? '' : getCpmStringValue(cpm, customConfig, granularityMultiplier) | |
| }; | |
| } | |
| function getCpmStringValue(cpm, config, granularityMultiplier) { | |
| var cpmStr = ''; | |
| if (!isValidPriceConfig(config)) { | |
| return cpmStr; | |
| } | |
| var cap = config.buckets.reduce(function (prev, curr) { | |
| if (prev.max > curr.max) { | |
| return prev; | |
| } | |
| return curr; | |
| }, { | |
| 'max': 0 | |
| }); | |
| var bucket = (0, _find2['default'])(config.buckets, function (bucket) { | |
| if (cpm > cap.max * granularityMultiplier) { | |
| // cpm exceeds cap, just return the cap. | |
| var precision = bucket.precision; | |
| if (typeof precision === 'undefined') { | |
| precision = _defaultPrecision; | |
| } | |
| cpmStr = (bucket.max * granularityMultiplier).toFixed(precision); | |
| } else if (cpm <= bucket.max * granularityMultiplier && cpm >= bucket.min * granularityMultiplier) { | |
| return bucket; | |
| } | |
| }); | |
| if (bucket) { | |
| cpmStr = getCpmTarget(cpm, bucket.increment, bucket.precision, granularityMultiplier); | |
| } | |
| return cpmStr; | |
| } | |
| function isValidPriceConfig(config) { | |
| if (utils.isEmpty(config) || !config.buckets || !Array.isArray(config.buckets)) { | |
| return false; | |
| } | |
| var isValid = true; | |
| config.buckets.forEach(function (bucket) { | |
| if (typeof bucket.min === 'undefined' || !bucket.max || !bucket.increment) { | |
| isValid = false; | |
| } | |
| }); | |
| return isValid; | |
| } | |
| function getCpmTarget(cpm, increment, precision, granularityMultiplier) { | |
| if (typeof precision === 'undefined') { | |
| precision = _defaultPrecision; | |
| } | |
| var bucketSize = 1 / (increment * granularityMultiplier); | |
| return (Math.floor(cpm * bucketSize) / bucketSize).toFixed(precision); | |
| } | |
| exports.getPriceBucketString = getPriceBucketString; | |
| exports.isValidPriceConfig = isValidPriceConfig; | |
| /***/ }), | |
| /***/ 28: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // optional / simple context binding | |
| var aFunction = __webpack_require__(42); | |
| module.exports = function (fn, that, length) { | |
| aFunction(fn); | |
| if (that === undefined) return fn; | |
| switch (length) { | |
| case 1: return function (a) { | |
| return fn.call(that, a); | |
| }; | |
| case 2: return function (a, b) { | |
| return fn.call(that, a, b); | |
| }; | |
| case 3: return function (a, b, c) { | |
| return fn.call(that, a, b, c); | |
| }; | |
| } | |
| return function (/* ...args */) { | |
| return fn.apply(that, arguments); | |
| }; | |
| }; | |
| /***/ }), | |
| /***/ 29: | |
| /***/ (function(module, exports) { | |
| module.exports = function (exec) { | |
| try { | |
| return !!exec(); | |
| } catch (e) { | |
| return true; | |
| } | |
| }; | |
| /***/ }), | |
| /***/ 3: | |
| /***/ (function(module, exports) { | |
| module.exports = {"JSON_MAPPING":{"PL_CODE":"code","PL_SIZE":"sizes","PL_BIDS":"bids","BD_BIDDER":"bidder","BD_ID":"paramsd","BD_PL_ID":"placementId","ADSERVER_TARGETING":"adserverTargeting","BD_SETTING_STANDARD":"standard"},"REPO_AND_VERSION":"prebid_prebid_1.7.0-pre","DEBUG_MODE":"pbjs_debug","STATUS":{"GOOD":1,"NO_BID":2},"CB":{"TYPE":{"ALL_BIDS_BACK":"allRequestedBidsBack","AD_UNIT_BIDS_BACK":"adUnitBidsBack","BID_WON":"bidWon","REQUEST_BIDS":"requestBids"}},"EVENTS":{"AUCTION_INIT":"auctionInit","AUCTION_END":"auctionEnd","BID_ADJUSTMENT":"bidAdjustment","BID_TIMEOUT":"bidTimeout","BID_REQUESTED":"bidRequested","BID_RESPONSE":"bidResponse","BID_WON":"bidWon","SET_TARGETING":"setTargeting","REQUEST_BIDS":"requestBids","ADD_AD_UNITS":"addAdUnits","AD_RENDER_FAILED":"adRenderFailed"},"AD_RENDER_FAILED_REASON":{"PREVENT_WRITING_ON_MAIN_DOCUMENT":"preventWritingOnMainDocuemnt","NO_AD":"noAd","EXCEPTION":"exception","CANNOT_FIND_AD":"cannotFindAd","MISSING_DOC_OR_ADID":"missingDocOrAdid"},"EVENT_ID_PATHS":{"bidWon":"adUnitCode"},"GRANULARITY_OPTIONS":{"LOW":"low","MEDIUM":"medium","HIGH":"high","AUTO":"auto","DENSE":"dense","CUSTOM":"custom"},"TARGETING_KEYS":["hb_bidder","hb_adid","hb_pb","hb_size","hb_deal","hb_source","hb_format"],"S2S":{"SRC":"s2s","SYNCED_BIDDERS_KEY":"pbjsSyncs"}} | |
| /***/ }), | |
| /***/ 30: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // 0 -> Array#forEach | |
| // 1 -> Array#map | |
| // 2 -> Array#filter | |
| // 3 -> Array#some | |
| // 4 -> Array#every | |
| // 5 -> Array#find | |
| // 6 -> Array#findIndex | |
| var ctx = __webpack_require__(28); | |
| var IObject = __webpack_require__(31); | |
| var toObject = __webpack_require__(50); | |
| var toLength = __webpack_require__(34); | |
| var asc = __webpack_require__(51); | |
| module.exports = function (TYPE, $create) { | |
| var IS_MAP = TYPE == 1; | |
| var IS_FILTER = TYPE == 2; | |
| var IS_SOME = TYPE == 3; | |
| var IS_EVERY = TYPE == 4; | |
| var IS_FIND_INDEX = TYPE == 6; | |
| var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; | |
| var create = $create || asc; | |
| return function ($this, callbackfn, that) { | |
| var O = toObject($this); | |
| var self = IObject(O); | |
| var f = ctx(callbackfn, that, 3); | |
| var length = toLength(self.length); | |
| var index = 0; | |
| var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; | |
| var val, res; | |
| for (;length > index; index++) if (NO_HOLES || index in self) { | |
| val = self[index]; | |
| res = f(val, index, O); | |
| if (TYPE) { | |
| if (IS_MAP) result[index] = res; // map | |
| else if (res) switch (TYPE) { | |
| case 3: return true; // some | |
| case 5: return val; // find | |
| case 6: return index; // findIndex | |
| case 2: result.push(val); // filter | |
| } else if (IS_EVERY) return false; // every | |
| } | |
| } | |
| return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; | |
| }; | |
| }; | |
| /***/ }), | |
| /***/ 31: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // fallback for non-array-like ES3 and non-enumerable old V8 strings | |
| var cof = __webpack_require__(32); | |
| // eslint-disable-next-line no-prototype-builtins | |
| module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { | |
| return cof(it) == 'String' ? it.split('') : Object(it); | |
| }; | |
| /***/ }), | |
| /***/ 32: | |
| /***/ (function(module, exports) { | |
| var toString = {}.toString; | |
| module.exports = function (it) { | |
| return toString.call(it).slice(8, -1); | |
| }; | |
| /***/ }), | |
| /***/ 33: | |
| /***/ (function(module, exports) { | |
| // 7.2.1 RequireObjectCoercible(argument) | |
| module.exports = function (it) { | |
| if (it == undefined) throw TypeError("Can't call method on " + it); | |
| return it; | |
| }; | |
| /***/ }), | |
| /***/ 34: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // 7.1.15 ToLength | |
| var toInteger = __webpack_require__(35); | |
| var min = Math.min; | |
| module.exports = function (it) { | |
| return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 | |
| }; | |
| /***/ }), | |
| /***/ 35: | |
| /***/ (function(module, exports) { | |
| // 7.1.4 ToInteger | |
| var ceil = Math.ceil; | |
| var floor = Math.floor; | |
| module.exports = function (it) { | |
| return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); | |
| }; | |
| /***/ }), | |
| /***/ 36: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.getGlobal = getGlobal; | |
| // if pbjs already exists in global document scope, use it, if not, create the object | |
| // global defination should happen BEFORE imports to avoid global undefined errors. | |
| window.pbjs = window.pbjs || {}; | |
| window.pbjs.cmd = window.pbjs.cmd || []; | |
| window.pbjs.que = window.pbjs.que || []; | |
| function getGlobal() { | |
| return window.pbjs; | |
| } | |
| /***/ }), | |
| /***/ 37: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.targeting = exports.isBidExpired = exports.BID_TARGETING_SET = 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; }; | |
| exports.newTargeting = newTargeting; | |
| var _utils = __webpack_require__(0); | |
| var _config = __webpack_require__(2); | |
| var _native = __webpack_require__(14); | |
| var _auctionManager = __webpack_require__(26); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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 utils = __webpack_require__(0); | |
| var CONSTANTS = __webpack_require__(3); | |
| var pbTargetingKeys = []; | |
| var BID_TARGETING_SET = exports.BID_TARGETING_SET = 'targetingSet'; | |
| var MAX_DFP_KEYLENGTH = 20; | |
| // return unexpired bids | |
| var isBidExpired = exports.isBidExpired = function isBidExpired(bid) { | |
| return (0, _utils.timestamp)() - bid.responseTimestamp < bid.ttl * 1000; | |
| }; | |
| // return bids whose status is not set. Winning bid can have status `targetingSet` or `rendered`. | |
| var isUnusedBid = function isUnusedBid(bid) { | |
| return bid && (bid.status && bid.status === BID_TARGETING_SET || !bid.status); | |
| }; | |
| /** | |
| * @typedef {Object.<string,string>} targeting | |
| * @property {string} targeting_key | |
| */ | |
| /** | |
| * @typedef {Object.<string,Object.<string,string[]>[]>[]} targetingArray | |
| */ | |
| function newTargeting(auctionManager) { | |
| var targeting = {}; | |
| targeting.resetPresetTargeting = function (adUnitCode) { | |
| if ((0, _utils.isGptPubadsDefined)()) { | |
| var adUnitCodes = getAdUnitCodes(adUnitCode); | |
| var adUnits = auctionManager.getAdUnits().filter(function (adUnit) { | |
| return (0, _includes2['default'])(adUnitCodes, adUnit.code); | |
| }); | |
| window.googletag.pubads().getSlots().forEach(function (slot) { | |
| pbTargetingKeys.forEach(function (key) { | |
| // reset only registered adunits | |
| adUnits.forEach(function (unit) { | |
| if (unit.code === slot.getAdUnitPath() || unit.code === slot.getSlotElementId()) { | |
| slot.setTargeting(key, null); | |
| } | |
| }); | |
| }); | |
| }); | |
| } | |
| }; | |
| /** | |
| * Returns all ad server targeting for all ad units. | |
| * @param {string=} adUnitCode | |
| * @return {Object.<string,targeting>} targeting | |
| */ | |
| targeting.getAllTargeting = function (adUnitCode) { | |
| var bidsReceived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getBidsReceived(); | |
| var adUnitCodes = getAdUnitCodes(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, bidsReceived).concat(getCustomBidTargeting(adUnitCodes, bidsReceived)).concat(_config.config.getConfig('enableSendAllBids') ? getBidLandscapeTargeting(adUnitCodes, bidsReceived) : []); | |
| // store a reference of the targeting keys | |
| targeting.map(function (adUnitCode) { | |
| Object.keys(adUnitCode).map(function (key) { | |
| adUnitCode[key].map(function (targetKey) { | |
| if (pbTargetingKeys.indexOf(Object.keys(targetKey)[0]) === -1) { | |
| pbTargetingKeys = Object.keys(targetKey).concat(pbTargetingKeys); | |
| } | |
| }); | |
| }); | |
| }); | |
| targeting = flattenTargeting(targeting); | |
| return targeting; | |
| }; | |
| /** | |
| * Converts targeting array and flattens to make it easily iteratable | |
| * e.g: Sample input to this function | |
| * ``` | |
| * [ | |
| * { | |
| * "div-gpt-ad-1460505748561-0": [{"hb_bidder": ["appnexusAst"]}] | |
| * }, | |
| * { | |
| * "div-gpt-ad-1460505748561-0": [{"hb_bidder_appnexusAs": ["appnexusAst"]}] | |
| * } | |
| * ] | |
| * ``` | |
| * Resulting array | |
| * ``` | |
| * { | |
| * "div-gpt-ad-1460505748561-0": { | |
| * "hb_bidder": "appnexusAst", | |
| * "hb_bidder_appnexusAs": "appnexusAst" | |
| * } | |
| * } | |
| * ``` | |
| * | |
| * @param {targetingArray} targeting | |
| * @return {Object.<string,targeting>} targeting | |
| */ | |
| function flattenTargeting(targeting) { | |
| var targetingObj = targeting.map(function (targeting) { | |
| return _defineProperty({}, Object.keys(targeting)[0], targeting[Object.keys(targeting)[0]].map(function (target) { | |
| return _defineProperty({}, Object.keys(target)[0], target[Object.keys(target)[0]].join(', ')); | |
| }).reduce(function (p, c) { | |
| return _extends(c, p); | |
| }, {})); | |
| }).reduce(function (accumulator, targeting) { | |
| var key = Object.keys(targeting)[0]; | |
| accumulator[key] = _extends({}, accumulator[key], targeting[key]); | |
| return accumulator; | |
| }, {}); | |
| return targetingObj; | |
| } | |
| /** | |
| * Sets targeting for DFP | |
| * @param {Object.<string,Object.<string,string>>} targetingConfig | |
| */ | |
| targeting.setTargetingForGPT = function (targetingConfig) { | |
| window.googletag.pubads().getSlots().forEach(function (slot) { | |
| Object.keys(targetingConfig).filter((0, _utils.isAdUnitCodeMatchingSlot)(slot)).forEach(function (targetId) { | |
| return Object.keys(targetingConfig[targetId]).forEach(function (key) { | |
| var valueArr = targetingConfig[targetId][key].split(','); | |
| valueArr = valueArr.length > 1 ? [valueArr] : valueArr; | |
| valueArr.map(function (value) { | |
| utils.logMessage('Attempting to set key value for slot: ' + slot.getSlotElementId() + ' key: ' + key + ' value: ' + value); | |
| return value; | |
| }).forEach(function (value) { | |
| slot.setTargeting(key, value); | |
| }); | |
| }); | |
| }); | |
| }); | |
| }; | |
| /** | |
| * normlizes input to a `adUnit.code` array | |
| * @param {(string|string[])} adUnitCode [description] | |
| * @return {string[]} AdUnit code array | |
| */ | |
| function getAdUnitCodes(adUnitCode) { | |
| if (typeof adUnitCode === 'string') { | |
| return [adUnitCode]; | |
| } else if (utils.isArray(adUnitCode)) { | |
| return adUnitCode; | |
| } | |
| return auctionManager.getAdUnitCodes() || []; | |
| } | |
| function getBidsReceived() { | |
| return auctionManager.getBidsReceived().filter(isUnusedBid).filter(exports.isBidExpired); | |
| } | |
| /** | |
| * Returns top bids for a given adUnit or set of adUnits. | |
| * @param {(string|string[])} adUnitCode adUnitCode or array of adUnitCodes | |
| * @return {[type]} [description] | |
| */ | |
| targeting.getWinningBids = function (adUnitCode) { | |
| var bidsReceived = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getBidsReceived(); | |
| var adUnitCodes = getAdUnitCodes(adUnitCode); | |
| return bidsReceived.filter(function (bid) { | |
| return (0, _includes2['default'])(adUnitCodes, bid.adUnitCode); | |
| }).filter(function (bid) { | |
| return bid.cpm > 0; | |
| }).map(function (bid) { | |
| return bid.adUnitCode; | |
| }).filter(_utils.uniques).map(function (adUnitCode) { | |
| return bidsReceived.filter(function (bid) { | |
| return bid.adUnitCode === adUnitCode ? bid : null; | |
| }).reduce(_utils.getHighestCpm, getEmptyBid(adUnitCode)); | |
| }); | |
| }; | |
| /** | |
| * Sets targeting for AST | |
| */ | |
| targeting.setTargetingForAst = function () { | |
| var astTargeting = targeting.getAllTargeting(); | |
| Object.keys(astTargeting).forEach(function (targetId) { | |
| return Object.keys(astTargeting[targetId]).forEach(function (key) { | |
| utils.logMessage('Attempting to set targeting for targetId: ' + targetId + ' key: ' + key + ' value: ' + astTargeting[targetId][key]); | |
| // setKeywords supports string and array as value | |
| if (utils.isStr(astTargeting[targetId][key]) || utils.isArray(astTargeting[targetId][key])) { | |
| var keywordsObj = {}; | |
| var input = 'hb_adid'; | |
| var nKey = key.substring(0, input.length) === input ? key.toUpperCase() : key; | |
| keywordsObj[nKey] = astTargeting[targetId][key]; | |
| window.apntag.setKeywords(targetId, keywordsObj); | |
| } | |
| }); | |
| }); | |
| }; | |
| /** | |
| * Get targeting key value pairs for winning bid. | |
| * @param {string[]} AdUnit code array | |
| * @return {targetingArray} winning bids targeting | |
| */ | |
| function getWinningBidTargeting(adUnitCodes, bidsReceived) { | |
| var winners = targeting.getWinningBids(adUnitCodes, bidsReceived); | |
| winners.forEach(function (winner) { | |
| winner.status = BID_TARGETING_SET; | |
| }); | |
| // TODO : Add losing bids to pool from here ? | |
| var standardKeys = getStandardKeys(); | |
| winners = winners.map(function (winner) { | |
| return _defineProperty({}, winner.adUnitCode, Object.keys(winner.adserverTargeting).filter(function (key) { | |
| return typeof winner.sendStandardTargeting === 'undefined' || winner.sendStandardTargeting || standardKeys.indexOf(key) === -1; | |
| }).map(function (key) { | |
| return _defineProperty({}, key === 'hb_deal' ? (key + '_' + winner.bidderCode).substring(0, MAX_DFP_KEYLENGTH) : key.substring(0, MAX_DFP_KEYLENGTH), [winner.adserverTargeting[key]]); | |
| })); | |
| }); | |
| return winners; | |
| } | |
| function getStandardKeys() { | |
| return auctionManager.getStandardBidderAdServerTargeting() // in case using a custom standard key set | |
| .map(function (targeting) { | |
| return targeting.key; | |
| }).concat(CONSTANTS.TARGETING_KEYS).filter(_utils.uniques); // standard keys defined in the library. | |
| } | |
| /** | |
| * Merge custom adserverTargeting with same key name for same adUnitCode. | |
| * e.g: Appnexus defining custom keyvalue pair foo:bar and Rubicon defining custom keyvalue pair foo:baz will be merged to foo: ['bar','baz'] | |
| * | |
| * @param {Object[]} acc Accumulator for reducer. It will store updated bidResponse objects | |
| * @param {Object} bid BidResponse | |
| * @param {number} index current index | |
| * @param {Array} arr original array | |
| */ | |
| function mergeAdServerTargeting(acc, bid, index, arr) { | |
| function concatTargetingValue(key) { | |
| return function (currentBidElement) { | |
| if (!utils.isArray(currentBidElement.adserverTargeting[key])) { | |
| currentBidElement.adserverTargeting[key] = [currentBidElement.adserverTargeting[key]]; | |
| } | |
| currentBidElement.adserverTargeting[key] = currentBidElement.adserverTargeting[key].concat(bid.adserverTargeting[key]).filter(_utils.uniques); | |
| delete bid.adserverTargeting[key]; | |
| }; | |
| } | |
| function hasSameAdunitCodeAndKey(key) { | |
| return function (currentBidElement) { | |
| return currentBidElement.adUnitCode === bid.adUnitCode && currentBidElement.adserverTargeting[key]; | |
| }; | |
| } | |
| Object.keys(bid.adserverTargeting).filter(getCustomKeys()).forEach(function (key) { | |
| if (acc.length) { | |
| acc.filter(hasSameAdunitCodeAndKey(key)).forEach(concatTargetingValue(key)); | |
| } | |
| }); | |
| acc.push(bid); | |
| return acc; | |
| } | |
| function getCustomKeys() { | |
| var standardKeys = getStandardKeys(); | |
| return function (key) { | |
| return standardKeys.indexOf(key) === -1; | |
| }; | |
| } | |
| function truncateCustomKeys(bid) { | |
| return _defineProperty({}, bid.adUnitCode, Object.keys(bid.adserverTargeting) | |
| // Get only the non-standard keys of the losing bids, since we | |
| // don't want to override the standard keys of the winning bid. | |
| .filter(getCustomKeys()).map(function (key) { | |
| return _defineProperty({}, key.substring(0, MAX_DFP_KEYLENGTH), [bid.adserverTargeting[key]]); | |
| })); | |
| } | |
| /** | |
| * Get custom targeting key value pairs for bids. | |
| * @param {string[]} AdUnit code array | |
| * @return {targetingArray} bids with custom targeting defined in bidderSettings | |
| */ | |
| function getCustomBidTargeting(adUnitCodes, bidsReceived) { | |
| return bidsReceived.filter(function (bid) { | |
| return (0, _includes2['default'])(adUnitCodes, bid.adUnitCode); | |
| }).map(function (bid) { | |
| return _extends({}, bid); | |
| }).reduce(mergeAdServerTargeting, []).map(truncateCustomKeys).filter(function (bid) { | |
| return bid; | |
| }); // removes empty elements in array; | |
| } | |
| /** | |
| * Get targeting key value pairs for non-winning bids. | |
| * @param {string[]} AdUnit code array | |
| * @return {targetingArray} all non-winning bids targeting | |
| */ | |
| function getBidLandscapeTargeting(adUnitCodes, bidsReceived) { | |
| var standardKeys = CONSTANTS.TARGETING_KEYS.concat(_native.NATIVE_TARGETING_KEYS); | |
| var bids = []; | |
| // bucket by adUnitcode | |
| var buckets = (0, _utils.groupBy)(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'; | |
| }))); | |
| } | |
| }).filter(function (bid) { | |
| return bid; | |
| }); // removes empty elements in array | |
| } | |
| function getTargetingMap(bid, keys) { | |
| return keys.map(function (key) { | |
| return _defineProperty({}, (key + '_' + bid.bidderCode).substring(0, MAX_DFP_KEYLENGTH), [bid.adserverTargeting[key]]); | |
| }); | |
| } | |
| targeting.isApntagDefined = function () { | |
| if (window.apntag && utils.isFn(window.apntag.setKeywords)) { | |
| return true; | |
| } | |
| }; | |
| function getEmptyBid(adUnitCode) { | |
| return { | |
| adUnitCode: adUnitCode, | |
| cpm: 0, | |
| adserverTargeting: {}, | |
| timeToRespond: 0 | |
| }; | |
| } | |
| return targeting; | |
| } | |
| var targeting = exports.targeting = newTargeting(_auctionManager.auctionManager); | |
| /***/ }), | |
| /***/ 38: | |
| /***/ (function(module, exports) { | |
| var g; | |
| // This works in non-strict mode | |
| g = (function() { | |
| return this; | |
| })(); | |
| try { | |
| // This works if eval is allowed (see CSP) | |
| g = g || Function("return this")() || (1,eval)("this"); | |
| } catch(e) { | |
| // This works if the window reference is available | |
| if(typeof window === "object") | |
| g = window; | |
| } | |
| // g can still be undefined, but nothing to do about it... | |
| // We return undefined, instead of nothing here, so it's | |
| // easier to handle this case. if(!global) { ...} | |
| module.exports = g; | |
| /***/ }), | |
| /***/ 386: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(387); | |
| /***/ }), | |
| /***/ 387: | |
| /***/ (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; }; | |
| var _prebidGlobal = __webpack_require__(36); | |
| var _utils = __webpack_require__(0); | |
| var _secureCreatives = __webpack_require__(388); | |
| var _userSync = __webpack_require__(13); | |
| var _adloader = __webpack_require__(11); | |
| var _config = __webpack_require__(2); | |
| var _auctionManager = __webpack_require__(26); | |
| var _targeting = __webpack_require__(37); | |
| var _hook = __webpack_require__(20); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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; } /** @module pbjs */ | |
| var pbjs = (0, _prebidGlobal.getGlobal)(); | |
| var CONSTANTS = __webpack_require__(3); | |
| var utils = __webpack_require__(0); | |
| var adaptermanager = __webpack_require__(7); | |
| var bidfactory = __webpack_require__(15); | |
| var events = __webpack_require__(9); | |
| var triggerUserSyncs = _userSync.userSync.triggerUserSyncs; | |
| /* private variables */ | |
| var RENDERED = 'rendered'; | |
| var _CONSTANTS$EVENTS = CONSTANTS.EVENTS, | |
| ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS, | |
| BID_WON = _CONSTANTS$EVENTS.BID_WON, | |
| REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, | |
| SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, | |
| AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED; | |
| var _CONSTANTS$AD_RENDER_ = CONSTANTS.AD_RENDER_FAILED_REASON, | |
| PREVENT_WRITING_ON_MAIN_DOCUMENT = _CONSTANTS$AD_RENDER_.PREVENT_WRITING_ON_MAIN_DOCUMENT, | |
| NO_AD = _CONSTANTS$AD_RENDER_.NO_AD, | |
| EXCEPTION = _CONSTANTS$AD_RENDER_.EXCEPTION, | |
| CANNOT_FIND_AD = _CONSTANTS$AD_RENDER_.CANNOT_FIND_AD, | |
| MISSING_DOC_OR_ADID = _CONSTANTS$AD_RENDER_.MISSING_DOC_OR_ADID; | |
| var eventValidators = { | |
| bidWon: checkDefinedPlacement | |
| }; | |
| /* Public vars */ | |
| pbjs.bidderSettings = pbjs.bidderSettings || {}; | |
| // current timeout set in `requestBids` or to default `bidderTimeout` | |
| pbjs.cbTimeout = pbjs.cbTimeout || 200; | |
| // let the world know we are loaded | |
| pbjs.libLoaded = true; | |
| // version auto generated from build | |
| pbjs.version = 'v1.7.0-pre'; | |
| utils.logInfo('Prebid.js v1.7.0-pre loaded'); | |
| // create adUnit array | |
| pbjs.adUnits = pbjs.adUnits || []; | |
| // Allow publishers who enable user sync override to trigger their sync | |
| pbjs.triggerUserSyncs = triggerUserSyncs; | |
| function checkDefinedPlacement(id) { | |
| var adUnitCodes = _auctionManager.auctionManager.getBidsRequested().map(function (bidSet) { | |
| return bidSet.bids.map(function (bid) { | |
| return bid.adUnitCode; | |
| }); | |
| }).reduce(_utils.flatten).filter(_utils.uniques); | |
| if (!utils.contains(adUnitCodes, id)) { | |
| utils.logError('The "' + id + '" placement is not defined.'); | |
| return; | |
| } | |
| return true; | |
| } | |
| function setRenderSize(doc, width, height) { | |
| if (doc.defaultView && doc.defaultView.frameElement) { | |
| doc.defaultView.frameElement.width = width; | |
| doc.defaultView.frameElement.height = height; | |
| } | |
| } | |
| /// /////////////////////////////// | |
| // // | |
| // Start Public APIs // | |
| // // | |
| /// /////////////////////////////// | |
| /** | |
| * This function returns the query string targeting parameters available at this moment for a given ad unit. Note that some bidder's response may not have been received if you call this function too quickly after the requests are sent. | |
| * @param {string} [adunitCode] adUnitCode to get the bid responses for | |
| * @alias module:pbjs.getAdserverTargetingForAdUnitCodeStr | |
| * @return {Array} returnObj return bids array | |
| */ | |
| pbjs.getAdserverTargetingForAdUnitCodeStr = function (adunitCode) { | |
| utils.logInfo('Invoking pbjs.getAdserverTargetingForAdUnitCodeStr', arguments); | |
| // call to retrieve bids array | |
| if (adunitCode) { | |
| var res = pbjs.getAdserverTargetingForAdUnitCode(adunitCode); | |
| return utils.transformAdServerTargetingObj(res); | |
| } else { | |
| utils.logMessage('Need to call getAdserverTargetingForAdUnitCodeStr with adunitCode'); | |
| } | |
| }; | |
| /** | |
| * This function returns the query string targeting parameters available at this moment for a given ad unit. Note that some bidder's response may not have been received if you call this function too quickly after the requests are sent. | |
| * @param adUnitCode {string} adUnitCode to get the bid responses for | |
| * @alias module:pbjs.getAdserverTargetingForAdUnitCode | |
| * @returns {Object} returnObj return bids | |
| */ | |
| pbjs.getAdserverTargetingForAdUnitCode = function (adUnitCode) { | |
| return pbjs.getAdserverTargeting(adUnitCode)[adUnitCode]; | |
| }; | |
| /** | |
| * returns all ad server targeting for all ad units | |
| * @return {Object} Map of adUnitCodes and targeting values [] | |
| * @alias module:pbjs.getAdserverTargeting | |
| */ | |
| pbjs.getAdserverTargeting = function (adUnitCode) { | |
| utils.logInfo('Invoking pbjs.getAdserverTargeting', arguments); | |
| return _targeting.targeting.getAllTargeting(adUnitCode, _auctionManager.auctionManager.getBidsReceived()); | |
| }; | |
| /** | |
| * This function returns the bid responses at the given moment. | |
| * @alias module:pbjs.getBidResponses | |
| * @return {Object} map | object that contains the bidResponses | |
| */ | |
| pbjs.getBidResponses = function () { | |
| utils.logInfo('Invoking pbjs.getBidResponses', arguments); | |
| var responses = _auctionManager.auctionManager.getBidsReceived().filter(_utils.adUnitsFilter.bind(this, _auctionManager.auctionManager.getAdUnitCodes())); | |
| // find the last auction id to get responses for most recent auction only | |
| var currentAuctionId = responses && responses.length && responses[responses.length - 1].auctionId; | |
| return responses.map(function (bid) { | |
| return bid.adUnitCode; | |
| }).filter(_utils.uniques).map(function (adUnitCode) { | |
| return responses.filter(function (bid) { | |
| return bid.auctionId === currentAuctionId && bid.adUnitCode === adUnitCode; | |
| }); | |
| }).filter(function (bids) { | |
| return bids && bids[0] && bids[0].adUnitCode; | |
| }).map(function (bids) { | |
| return _defineProperty({}, bids[0].adUnitCode, { bids: bids.map(_utils.removeRequestId) }); | |
| }).reduce(function (a, b) { | |
| return _extends(a, b); | |
| }, {}); | |
| }; | |
| /** | |
| * Returns bidResponses for the specified adUnitCode | |
| * @param {string} adUnitCode adUnitCode | |
| * @alias module:pbjs.getBidResponsesForAdUnitCode | |
| * @return {Object} bidResponse object | |
| */ | |
| pbjs.getBidResponsesForAdUnitCode = function (adUnitCode) { | |
| var bids = _auctionManager.auctionManager.getBidsReceived().filter(function (bid) { | |
| return bid.adUnitCode === adUnitCode; | |
| }); | |
| return { | |
| bids: bids.map(_utils.removeRequestId) | |
| }; | |
| }; | |
| /** | |
| * Set query string targeting on one or more GPT ad units. | |
| * @param {(string|string[])} adUnit a single `adUnit.code` or multiple. | |
| * @alias module:pbjs.setTargetingForGPTAsync | |
| */ | |
| pbjs.setTargetingForGPTAsync = function (adUnit) { | |
| utils.logInfo('Invoking pbjs.setTargetingForGPTAsync', arguments); | |
| if (!(0, _utils.isGptPubadsDefined)()) { | |
| utils.logError('window.googletag is not defined on the page'); | |
| return; | |
| } | |
| // get our ad unit codes | |
| var targetingSet = _targeting.targeting.getAllTargeting(adUnit); | |
| // first reset any old targeting | |
| _targeting.targeting.resetPresetTargeting(adUnit); | |
| // now set new targeting keys | |
| _targeting.targeting.setTargetingForGPT(targetingSet); | |
| // emit event | |
| events.emit(SET_TARGETING); | |
| }; | |
| /** | |
| * Set query string targeting on all AST (AppNexus Seller Tag) ad units. Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server](http://prebid.org/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). | |
| * @alias module:pbjs.setTargetingForAst | |
| */ | |
| pbjs.setTargetingForAst = function () { | |
| utils.logInfo('Invoking pbjs.setTargetingForAn', arguments); | |
| if (!_targeting.targeting.isApntagDefined()) { | |
| utils.logError('window.apntag is not defined on the page'); | |
| return; | |
| } | |
| _targeting.targeting.setTargetingForAst(); | |
| // emit event | |
| events.emit(SET_TARGETING); | |
| }; | |
| function emitAdRenderFail(reason, message, bid) { | |
| var data = {}; | |
| data.reason = reason; | |
| data.message = message; | |
| if (bid) { | |
| data.bid = bid; | |
| } | |
| utils.logError(message); | |
| events.emit(AD_RENDER_FAILED, data); | |
| } | |
| /** | |
| * This function will render the ad (based on params) in the given iframe document passed through. | |
| * Note that doc SHOULD NOT be the parent document page as we can't doc.write() asynchronously | |
| * @param {HTMLDocument} doc document | |
| * @param {string} id bid id to locate the ad | |
| * @alias module:pbjs.renderAd | |
| */ | |
| pbjs.renderAd = function (doc, id) { | |
| utils.logInfo('Invoking pbjs.renderAd', arguments); | |
| utils.logMessage('Calling renderAd with adId :' + id); | |
| if (doc && id) { | |
| try { | |
| // lookup ad by ad Id | |
| var bid = _auctionManager.auctionManager.findBidByAdId(id); | |
| if (bid) { | |
| bid.status = RENDERED; | |
| // replace macros according to openRTB with price paid = bid.cpm | |
| bid.ad = utils.replaceAuctionPrice(bid.ad, bid.cpm); | |
| bid.adUrl = utils.replaceAuctionPrice(bid.adUrl, bid.cpm); | |
| // save winning bids | |
| _auctionManager.auctionManager.addWinningBid(bid); | |
| // emit 'bid won' event here | |
| events.emit(BID_WON, bid); | |
| var height = bid.height, | |
| width = bid.width, | |
| ad = bid.ad, | |
| mediaType = bid.mediaType, | |
| adUrl = bid.adUrl, | |
| renderer = bid.renderer; | |
| var creativeComment = document.createComment('Creative ' + bid.creativeId + ' served by ' + bid.bidder + ' Prebid.js Header Bidding'); | |
| utils.insertElement(creativeComment, doc, 'body'); | |
| if (renderer && renderer.url) { | |
| renderer.render(bid); | |
| } else if (doc === document && !utils.inIframe() || mediaType === 'video') { | |
| var message = 'Error trying to write ad. Ad render call ad id ' + id + ' was prevented from writing to the main document.'; | |
| emitAdRenderFail(PREVENT_WRITING_ON_MAIN_DOCUMENT, message, bid); | |
| } else if (ad) { | |
| doc.write(ad); | |
| doc.close(); | |
| setRenderSize(doc, width, height); | |
| utils.callBurl(bid); | |
| } else if (adUrl) { | |
| var iframe = utils.createInvisibleIframe(); | |
| iframe.height = height; | |
| iframe.width = width; | |
| iframe.style.display = 'inline'; | |
| iframe.style.overflow = 'hidden'; | |
| iframe.src = adUrl; | |
| utils.insertElement(iframe, doc, 'body'); | |
| setRenderSize(doc, width, height); | |
| utils.callBurl(bid); | |
| } else { | |
| var _message = 'Error trying to write ad. No ad for bid response id: ' + id; | |
| emitAdRenderFail(NO_AD, _message, bid); | |
| } | |
| } else { | |
| var _message2 = 'Error trying to write ad. Cannot find ad by given id : ' + id; | |
| emitAdRenderFail(CANNOT_FIND_AD, _message2); | |
| } | |
| } catch (e) { | |
| var _message3 = 'Error trying to write ad Id :' + id + ' to the page:' + e.message; | |
| emitAdRenderFail(EXCEPTION, _message3); | |
| } | |
| } else { | |
| var _message4 = 'Error trying to write ad Id :' + id + ' to the page. Missing document or adId'; | |
| emitAdRenderFail(MISSING_DOC_OR_ADID, _message4); | |
| } | |
| }; | |
| /** | |
| * Remove adUnit from the pbjs configuration | |
| * @param {string} adUnitCode the adUnitCode to remove | |
| * @alias module:pbjs.removeAdUnit | |
| */ | |
| pbjs.removeAdUnit = function (adUnitCode) { | |
| utils.logInfo('Invoking pbjs.removeAdUnit', arguments); | |
| if (adUnitCode) { | |
| for (var i = 0; i < pbjs.adUnits.length; i++) { | |
| if (pbjs.adUnits[i].code === adUnitCode) { | |
| pbjs.adUnits.splice(i, 1); | |
| } | |
| } | |
| } | |
| }; | |
| /** | |
| * @param {Object} requestOptions | |
| * @param {function} requestOptions.bidsBackHandler | |
| * @param {number} requestOptions.timeout | |
| * @param {Array} requestOptions.adUnits | |
| * @param {Array} requestOptions.adUnitCodes | |
| * @param {Array} requestOptions.labels | |
| * @alias module:pbjs.requestBids | |
| */ | |
| pbjs.requestBids = (0, _hook.createHook)('asyncSeries', function () { | |
| var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | |
| bidsBackHandler = _ref2.bidsBackHandler, | |
| timeout = _ref2.timeout, | |
| adUnits = _ref2.adUnits, | |
| adUnitCodes = _ref2.adUnitCodes, | |
| labels = _ref2.labels; | |
| events.emit(REQUEST_BIDS); | |
| var cbTimeout = timeout || _config.config.getConfig('bidderTimeout'); | |
| adUnits = adUnits || pbjs.adUnits; | |
| utils.logInfo('Invoking pbjs.requestBids', arguments); | |
| if (adUnitCodes && adUnitCodes.length) { | |
| // if specific adUnitCodes supplied filter adUnits for those codes | |
| adUnits = adUnits.filter(function (unit) { | |
| return (0, _includes2['default'])(adUnitCodes, unit.code); | |
| }); | |
| } else { | |
| // otherwise derive adUnitCodes from adUnits | |
| adUnitCodes = adUnits && adUnits.map(function (unit) { | |
| return unit.code; | |
| }); | |
| } | |
| /* | |
| * for a given adunit which supports a set of mediaTypes | |
| * and a given bidder which supports a set of mediaTypes | |
| * a bidder is eligible to participate on the adunit | |
| * if it supports at least one of the mediaTypes on the adunit | |
| */ | |
| adUnits.forEach(function (adUnit) { | |
| // get the adunit's mediaTypes, defaulting to banner if mediaTypes isn't present | |
| var adUnitMediaTypes = Object.keys(adUnit.mediaTypes || { 'banner': 'banner' }); | |
| // get the bidder's mediaTypes | |
| var bidders = adUnit.bids.map(function (bid) { | |
| return bid.bidder; | |
| }); | |
| var bidderRegistry = adaptermanager.bidderRegistry; | |
| bidders.forEach(function (bidder) { | |
| var adapter = bidderRegistry[bidder]; | |
| var spec = adapter && adapter.getSpec && adapter.getSpec(); | |
| // banner is default if not specified in spec | |
| var bidderMediaTypes = spec && spec.supportedMediaTypes || ['banner']; | |
| // check if the bidder's mediaTypes are not in the adUnit's mediaTypes | |
| var bidderEligible = adUnitMediaTypes.some(function (type) { | |
| return (0, _includes2['default'])(bidderMediaTypes, type); | |
| }); | |
| if (!bidderEligible) { | |
| // drop the bidder from the ad unit if it's not compatible | |
| utils.logWarn(utils.unsupportedBidderMessage(adUnit, bidder)); | |
| adUnit.bids = adUnit.bids.filter(function (bid) { | |
| return bid.bidder !== bidder; | |
| }); | |
| } | |
| }); | |
| }); | |
| if (!adUnits || adUnits.length === 0) { | |
| utils.logMessage('No adUnits configured. No bids requested.'); | |
| if (typeof bidsBackHandler === 'function') { | |
| // executeCallback, this will only be called in case of first request | |
| try { | |
| bidsBackHandler(); | |
| } catch (e) { | |
| utils.logError('Error executing bidsBackHandler', null, e); | |
| } | |
| } | |
| return; | |
| } | |
| var auction = _auctionManager.auctionManager.createAuction({ adUnits: adUnits, adUnitCodes: adUnitCodes, callback: bidsBackHandler, cbTimeout: cbTimeout, labels: labels }); | |
| auction.callBids(); | |
| return auction; | |
| }); | |
| /** | |
| * | |
| * Add adunit(s) | |
| * @param {Array|Object} adUnitArr Array of adUnits or single adUnit Object. | |
| * @alias module:pbjs.addAdUnits | |
| */ | |
| pbjs.addAdUnits = function (adUnitArr) { | |
| utils.logInfo('Invoking pbjs.addAdUnits', arguments); | |
| if (utils.isArray(adUnitArr)) { | |
| // generate transactionid for each new adUnits | |
| // Append array to existing | |
| adUnitArr.forEach(function (adUnit) { | |
| return adUnit.transactionId = utils.generateUUID(); | |
| }); | |
| pbjs.adUnits.push.apply(pbjs.adUnits, adUnitArr); | |
| } else if ((typeof adUnitArr === 'undefined' ? 'undefined' : _typeof(adUnitArr)) === 'object') { | |
| // Generate the transaction id for the adunit | |
| adUnitArr.transactionId = utils.generateUUID(); | |
| pbjs.adUnits.push(adUnitArr); | |
| } | |
| // emit event | |
| events.emit(ADD_AD_UNITS); | |
| }; | |
| /** | |
| * @param {string} event the name of the event | |
| * @param {Function} handler a callback to set on event | |
| * @param {string} id an identifier in the context of the event | |
| * @alias module:pbjs.onEvent | |
| * | |
| * This API call allows you to register a callback to handle a Prebid.js event. | |
| * An optional `id` parameter provides more finely-grained event callback registration. | |
| * This makes it possible to register callback events for a specific item in the | |
| * event context. For example, `bidWon` events will accept an `id` for ad unit code. | |
| * `bidWon` callbacks registered with an ad unit code id will be called when a bid | |
| * for that ad unit code wins the auction. Without an `id` this method registers the | |
| * callback for every `bidWon` event. | |
| * | |
| * Currently `bidWon` is the only event that accepts an `id` parameter. | |
| */ | |
| pbjs.onEvent = function (event, handler, id) { | |
| utils.logInfo('Invoking pbjs.onEvent', arguments); | |
| if (!utils.isFn(handler)) { | |
| utils.logError('The event handler provided is not a function and was not set on event "' + event + '".'); | |
| return; | |
| } | |
| if (id && !eventValidators[event].call(null, id)) { | |
| utils.logError('The id provided is not valid for event "' + event + '" and no handler was set.'); | |
| return; | |
| } | |
| events.on(event, handler, id); | |
| }; | |
| /** | |
| * @param {string} event the name of the event | |
| * @param {Function} handler a callback to remove from the event | |
| * @param {string} id an identifier in the context of the event (see `pbjs.onEvent`) | |
| * @alias module:pbjs.offEvent | |
| */ | |
| pbjs.offEvent = function (event, handler, id) { | |
| utils.logInfo('Invoking pbjs.offEvent', arguments); | |
| if (id && !eventValidators[event].call(null, id)) { | |
| return; | |
| } | |
| events.off(event, handler, id); | |
| }; | |
| /* | |
| * Wrapper to register bidderAdapter externally (adaptermanager.registerBidAdapter()) | |
| * @param {Function} bidderAdaptor [description] | |
| * @param {string} bidderCode [description] | |
| * @alias module:pbjs.registerBidAdapter | |
| */ | |
| pbjs.registerBidAdapter = function (bidderAdaptor, bidderCode) { | |
| utils.logInfo('Invoking pbjs.registerBidAdapter', arguments); | |
| try { | |
| adaptermanager.registerBidAdapter(bidderAdaptor(), bidderCode); | |
| } catch (e) { | |
| utils.logError('Error registering bidder adapter : ' + e.message); | |
| } | |
| }; | |
| /** | |
| * Wrapper to register analyticsAdapter externally (adaptermanager.registerAnalyticsAdapter()) | |
| * @param {Object} options [description] | |
| * @alias module:pbjs.registerAnalyticsAdapter | |
| */ | |
| pbjs.registerAnalyticsAdapter = function (options) { | |
| utils.logInfo('Invoking pbjs.registerAnalyticsAdapter', arguments); | |
| try { | |
| adaptermanager.registerAnalyticsAdapter(options); | |
| } catch (e) { | |
| utils.logError('Error registering analytics adapter : ' + e.message); | |
| } | |
| }; | |
| /** | |
| * Wrapper to bidfactory.createBid() | |
| * @param {string} statusCode [description] | |
| * @alias module:pbjs.createBid | |
| * @return {Object} bidResponse [description] | |
| */ | |
| pbjs.createBid = function (statusCode) { | |
| utils.logInfo('Invoking pbjs.createBid', arguments); | |
| return bidfactory.createBid(statusCode); | |
| }; | |
| /** | |
| * Wrapper to adloader.loadScript | |
| * @param {string} tagSrc [description] | |
| * @param {Function} callback [description] | |
| * @alias module:pbjs.loadScript | |
| */ | |
| pbjs.loadScript = function (tagSrc, callback, useCache) { | |
| utils.logInfo('Invoking pbjs.loadScript', arguments); | |
| (0, _adloader.loadScript)(tagSrc, callback, useCache); | |
| }; | |
| /** | |
| * Enable sending analytics data to the analytics provider of your | |
| * choice. | |
| * | |
| * For usage, see [Integrate with the Prebid Analytics | |
| * API](http://prebid.org/dev-docs/integrate-with-the-prebid-analytics-api.html). | |
| * | |
| * For a list of analytics adapters, see [Analytics for | |
| * Prebid](http://prebid.org/overview/analytics.html). | |
| * @param {Object} config | |
| * @param {string} config.provider The name of the provider, e.g., `"ga"` for Google Analytics. | |
| * @param {Object} config.options The options for this particular analytics adapter. This will likely vary between adapters. | |
| * @alias module:pbjs.enableAnalytics | |
| */ | |
| pbjs.enableAnalytics = function (config) { | |
| if (config && !utils.isEmpty(config)) { | |
| utils.logInfo('Invoking pbjs.enableAnalytics for: ', config); | |
| adaptermanager.enableAnalytics(config); | |
| } else { | |
| utils.logError('pbjs.enableAnalytics should be called with option {}'); | |
| } | |
| }; | |
| /** | |
| * @alias module:pbjs.aliasBidder | |
| */ | |
| pbjs.aliasBidder = function (bidderCode, alias) { | |
| utils.logInfo('Invoking pbjs.aliasBidder', arguments); | |
| if (bidderCode && alias) { | |
| adaptermanager.aliasBidAdapter(bidderCode, alias); | |
| } else { | |
| utils.logError('bidderCode and alias must be passed as arguments', 'pbjs.aliasBidder'); | |
| } | |
| }; | |
| /** | |
| * The bid response object returned by an external bidder adapter during the auction. | |
| * @typedef {Object} AdapterBidResponse | |
| * @property {string} pbAg Auto granularity price bucket; CPM <= 5 ? increment = 0.05 : CPM > 5 && CPM <= 10 ? increment = 0.10 : CPM > 10 && CPM <= 20 ? increment = 0.50 : CPM > 20 ? priceCap = 20.00. Example: `"0.80"`. | |
| * @property {string} pbCg Custom price bucket. For example setup, see {@link setPriceGranularity}. Example: `"0.84"`. | |
| * @property {string} pbDg Dense granularity price bucket; CPM <= 3 ? increment = 0.01 : CPM > 3 && CPM <= 8 ? increment = 0.05 : CPM > 8 && CPM <= 20 ? increment = 0.50 : CPM > 20? priceCap = 20.00. Example: `"0.84"`. | |
| * @property {string} pbLg Low granularity price bucket; $0.50 increment, capped at $5, floored to two decimal places. Example: `"0.50"`. | |
| * @property {string} pbMg Medium granularity price bucket; $0.10 increment, capped at $20, floored to two decimal places. Example: `"0.80"`. | |
| * @property {string} pbHg High granularity price bucket; $0.01 increment, capped at $20, floored to two decimal places. Example: `"0.84"`. | |
| * | |
| * @property {string} bidder The string name of the bidder. This *may* be the same as the `bidderCode`. For For a list of all bidders and their codes, see [Bidders' Params](http://prebid.org/dev-docs/bidders.html). | |
| * @property {string} bidderCode The unique string that identifies this bidder. For a list of all bidders and their codes, see [Bidders' Params](http://prebid.org/dev-docs/bidders.html). | |
| * | |
| * @property {string} requestId The [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) representing the bid request. | |
| * @property {number} requestTimestamp The time at which the bid request was sent out, expressed in milliseconds. | |
| * @property {number} responseTimestamp The time at which the bid response was received, expressed in milliseconds. | |
| * @property {number} timeToRespond How long it took for the bidder to respond with this bid, expressed in milliseconds. | |
| * | |
| * @property {string} size The size of the ad creative, expressed in `"AxB"` format, where A and B are numbers of pixels. Example: `"320x50"`. | |
| * @property {string} width The width of the ad creative in pixels. Example: `"320"`. | |
| * @property {string} height The height of the ad creative in pixels. Example: `"50"`. | |
| * | |
| * @property {string} ad The actual ad creative content, often HTML with CSS, JavaScript, and/or links to additional content. Example: `"<div id='beacon_-YQbipJtdxmMCgEPHExLhmqzEm' style='position: absolute; left: 0px; top: 0px; visibility: hidden;'><img src='http://aplus-...'/></div><iframe src=\"http://aax-us-east.amazon-adsystem.com/e/is/8dcfcd..." width=\"728\" height=\"90\" frameborder=\"0\" ...></iframe>",`. | |
| * @property {number} ad_id The ad ID of the creative, as understood by the bidder's system. Used by the line item's [creative in the ad server](http://prebid.org/adops/send-all-bids-adops.html#step-3-add-a-creative). | |
| * @property {string} adUnitCode The code used to uniquely identify the ad unit on the publisher's page. | |
| * | |
| * @property {string} statusMessage The status of the bid. Allowed values: `"Bid available"` or `"Bid returned empty or error response"`. | |
| * @property {number} cpm The exact bid price from the bidder, expressed to the thousandths place. Example: `"0.849"`. | |
| * | |
| * @property {Object} adserverTargeting An object whose values represent the ad server's targeting on the bid. | |
| * @property {string} adserverTargeting.hb_adid The ad ID of the creative, as understood by the ad server. | |
| * @property {string} adserverTargeting.hb_pb The price paid to show the creative, as logged in the ad server. | |
| * @property {string} adserverTargeting.hb_bidder The winning bidder whose ad creative will be served by the ad server. | |
| */ | |
| /** | |
| * Get all of the bids that have won their respective auctions. Useful for [troubleshooting your integration](http://prebid.org/dev-docs/prebid-troubleshooting-guide.html). | |
| * @return {Array<AdapterBidResponse>} A list of bids that have won their respective auctions. | |
| */ | |
| pbjs.getAllWinningBids = function () { | |
| return _auctionManager.auctionManager.getAllWinningBids().map(_utils.removeRequestId); | |
| }; | |
| /** | |
| * Get array of highest cpm bids for all adUnits, or highest cpm bid | |
| * object for the given adUnit | |
| * @param {string} adUnitCode - optional ad unit code | |
| * @alias module:pbjs.getHighestCpmBids | |
| * @return {Array} array containing highest cpm bid object(s) | |
| */ | |
| pbjs.getHighestCpmBids = function (adUnitCode) { | |
| return _targeting.targeting.getWinningBids(adUnitCode, _auctionManager.auctionManager.getBidsReceived()).map(_utils.removeRequestId); | |
| }; | |
| /** | |
| * Get Prebid config options | |
| * @param {Object} options | |
| * @alias module:pbjs.getConfig | |
| */ | |
| pbjs.getConfig = _config.config.getConfig; | |
| /** | |
| * Set Prebid config options. | |
| * (Added in version 0.27.0). | |
| * | |
| * `setConfig` is designed to allow for advanced configuration while | |
| * reducing the surface area of the public API. For more information | |
| * about the move to `setConfig` (and the resulting deprecations of | |
| * some other public methods), see [the Prebid 1.0 public API | |
| * proposal](https://gist.github.com/mkendall07/51ee5f6b9f2df01a89162cf6de7fe5b6). | |
| * | |
| * #### Troubleshooting your configuration | |
| * | |
| * If you call `pbjs.setConfig` without an object, e.g., | |
| * | |
| * `pbjs.setConfig('debug', 'true'))` | |
| * | |
| * then Prebid.js will print an error to the console that says: | |
| * | |
| * ``` | |
| * ERROR: setConfig options must be an object | |
| * ``` | |
| * | |
| * If you don't see that message, you can assume the config object is valid. | |
| * | |
| * @param {Object} options Global Prebid configuration object. Must be JSON - no JavaScript functions are allowed. | |
| * @param {string} options.bidderSequence The order in which bidders are called. Example: `pbjs.setConfig({ bidderSequence: "fixed" })`. Allowed values: `"fixed"` (order defined in `adUnit.bids` array on page), `"random"`. | |
| * @param {boolean} options.debug Turn debug logging on/off. Example: `pbjs.setConfig({ debug: true })`. | |
| * @param {string} options.priceGranularity The bid price granularity to use. Example: `pbjs.setConfig({ priceGranularity: "medium" })`. Allowed values: `"low"` ($0.50), `"medium"` ($0.10), `"high"` ($0.01), `"auto"` (sliding scale), `"dense"` (like `"auto"`, with smaller increments at lower CPMs), or a custom price bucket object, e.g., `{ "buckets" : [{"min" : 0,"max" : 20,"increment" : 0.1,"cap" : true}]}`. | |
| * @param {boolean} options.enableSendAllBids Turn "send all bids" mode on/off. Example: `pbjs.setConfig({ enableSendAllBids: true })`. | |
| * @param {number} options.bidderTimeout Set a global bidder timeout, in milliseconds. Example: `pbjs.setConfig({ bidderTimeout: 3000 })`. Note that it's still possible for a bid to get into the auction that responds after this timeout. This is due to how [`setTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout) works in JS: it queues the callback in the event loop in an approximate location that should execute after this time but it is not guaranteed. For more information about the asynchronous event loop and `setTimeout`, see [How JavaScript Timers Work](https://johnresig.com/blog/how-javascript-timers-work/). | |
| * @param {string} options.publisherDomain The publisher's domain where Prebid is running, for cross-domain iFrame communication. Example: `pbjs.setConfig({ publisherDomain: "https://www.theverge.com" })`. | |
| * @param {number} options.cookieSyncDelay A delay (in milliseconds) for requesting cookie sync to stay out of the critical path of page load. Example: `pbjs.setConfig({ cookieSyncDelay: 100 })`. | |
| * @param {Object} options.s2sConfig The configuration object for [server-to-server header bidding](http://prebid.org/dev-docs/get-started-with-prebid-server.html). Example: | |
| * @alias module:pbjs.setConfig | |
| * ``` | |
| * pbjs.setConfig({ | |
| * s2sConfig: { | |
| * accountId: '1', | |
| * enabled: true, | |
| * bidders: ['appnexus', 'pubmatic'], | |
| * timeout: 1000, | |
| * adapter: 'prebidServer', | |
| * endpoint: 'https://prebid.adnxs.com/pbs/v1/auction' | |
| * } | |
| * }) | |
| * ``` | |
| */ | |
| pbjs.setConfig = _config.config.setConfig; | |
| pbjs.que.push(function () { | |
| return (0, _secureCreatives.listenMessagesFromCreative)(); | |
| }); | |
| /** | |
| * This queue lets users load Prebid asynchronously, but run functions the same way regardless of whether it gets loaded | |
| * before or after their script executes. For example, given the code: | |
| * | |
| * <script src="url/to/Prebid.js" async></script> | |
| * <script> | |
| * var pbjs = pbjs || {}; | |
| * pbjs.cmd = pbjs.cmd || []; | |
| * pbjs.cmd.push(functionToExecuteOncePrebidLoads); | |
| * </script> | |
| * | |
| * If the page's script runs before prebid loads, then their function gets added to the queue, and executed | |
| * by prebid once it's done loading. If it runs after prebid loads, then this monkey-patch causes their | |
| * function to execute immediately. | |
| * | |
| * @memberof pbjs | |
| * @param {function} command A function which takes no arguments. This is guaranteed to run exactly once, and only after | |
| * the Prebid script has been fully loaded. | |
| * @alias module:pbjs.cmd.push | |
| */ | |
| pbjs.cmd.push = function (command) { | |
| if (typeof command === 'function') { | |
| try { | |
| command.call(); | |
| } catch (e) { | |
| utils.logError('Error processing command :', e.message, e.stack); | |
| } | |
| } else { | |
| utils.logError('Commands written into pbjs.cmd.push must be wrapped in a function'); | |
| } | |
| }; | |
| pbjs.que.push = pbjs.cmd.push; | |
| function processQueue(queue) { | |
| queue.forEach(function (cmd) { | |
| if (typeof cmd.called === 'undefined') { | |
| try { | |
| cmd.call(); | |
| cmd.called = true; | |
| } catch (e) { | |
| utils.logError('Error processing command :', 'prebid.js', e); | |
| } | |
| } | |
| }); | |
| } | |
| /** | |
| * @alias module:pbjs.processQueue | |
| */ | |
| pbjs.processQueue = function () { | |
| processQueue(pbjs.que); | |
| processQueue(pbjs.cmd); | |
| }; | |
| /***/ }), | |
| /***/ 388: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.listenMessagesFromCreative = listenMessagesFromCreative; | |
| var _events = __webpack_require__(9); | |
| var _events2 = _interopRequireDefault(_events); | |
| var _native = __webpack_require__(14); | |
| var _constants = __webpack_require__(3); | |
| var _utils = __webpack_require__(0); | |
| var _auctionManager = __webpack_require__(26); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| /* Secure Creatives | |
| Provides support for rendering creatives into cross domain iframes such as SafeFrame to prevent | |
| access to a publisher page from creative payloads. | |
| */ | |
| var BID_WON = _constants.EVENTS.BID_WON; | |
| function listenMessagesFromCreative() { | |
| addEventListener('message', receiveMessage, false); | |
| } | |
| function receiveMessage(ev) { | |
| var key = ev.message ? 'message' : 'data'; | |
| var data = {}; | |
| try { | |
| data = JSON.parse(ev[key]); | |
| } catch (e) { | |
| return; | |
| } | |
| if (data.adId) { | |
| var adObject = (0, _find2['default'])(_auctionManager.auctionManager.getBidsReceived(), function (bid) { | |
| return bid.adId === data.adId; | |
| }); | |
| if (data.message === 'Prebid Request') { | |
| sendAdToCreative(adObject, data.adServerDomain, ev.source); | |
| // save winning bids | |
| _auctionManager.auctionManager.addWinningBid(adObject); | |
| _events2['default'].emit(BID_WON, adObject); | |
| } | |
| // handle this script from native template in an ad server | |
| // window.parent.postMessage(JSON.stringify({ | |
| // message: 'Prebid Native', | |
| // adId: '%%PATTERN:hb_adid%%' | |
| // }), '*'); | |
| if (data.message === 'Prebid Native') { | |
| (0, _native.fireNativeTrackers)(data, adObject); | |
| _auctionManager.auctionManager.addWinningBid(adObject); | |
| _events2['default'].emit(BID_WON, adObject); | |
| } | |
| } | |
| } | |
| function sendAdToCreative(adObject, remoteDomain, source) { | |
| var adId = adObject.adId, | |
| ad = adObject.ad, | |
| adUrl = adObject.adUrl, | |
| width = adObject.width, | |
| height = adObject.height; | |
| if (adId) { | |
| resizeRemoteCreative(adObject); | |
| source.postMessage(JSON.stringify({ | |
| message: 'Prebid Response', | |
| ad: ad, | |
| adUrl: adUrl, | |
| adId: adId, | |
| width: width, | |
| height: height | |
| }), remoteDomain); | |
| } | |
| } | |
| function resizeRemoteCreative(_ref) { | |
| var adUnitCode = _ref.adUnitCode, | |
| width = _ref.width, | |
| height = _ref.height; | |
| var iframe = document.getElementById((0, _find2['default'])(window.googletag.pubads().getSlots().filter((0, _utils.isSlotMatchingAdUnitCode)(adUnitCode)), function (slot) { | |
| return slot; | |
| }).getSlotElementId()).querySelector('iframe'); | |
| iframe.width = '' + width; | |
| iframe.height = '' + height; | |
| } | |
| /***/ }), | |
| /***/ 4: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| /** | |
| * This file contains the valid Media Types in Prebid. | |
| * | |
| * All adapters are assumed to support banner ads. Other media types are specified by Adapters when they | |
| * register themselves with prebid-core. | |
| */ | |
| /** | |
| * @typedef {('native'|'video'|'banner')} MediaType | |
| */ | |
| /** @type MediaType */ | |
| var NATIVE = exports.NATIVE = 'native'; | |
| /** @type MediaType */ | |
| var VIDEO = exports.VIDEO = 'video'; | |
| /** @type MediaType */ | |
| var BANNER = exports.BANNER = 'banner'; | |
| /***/ }), | |
| /***/ 41: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) | |
| var $export = __webpack_require__(22); | |
| var $find = __webpack_require__(30)(5); | |
| var KEY = 'find'; | |
| var forced = true; | |
| // Shouldn't skip holes | |
| if (KEY in []) Array(1)[KEY](function () { forced = false; }); | |
| $export($export.P + $export.F * forced, 'Array', { | |
| find: function find(callbackfn /* , that = undefined */) { | |
| return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); | |
| } | |
| }); | |
| __webpack_require__(24)(KEY); | |
| /***/ }), | |
| /***/ 42: | |
| /***/ (function(module, exports) { | |
| module.exports = function (it) { | |
| if (typeof it != 'function') throw TypeError(it + ' is not a function!'); | |
| return it; | |
| }; | |
| /***/ }), | |
| /***/ 43: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var dP = __webpack_require__(44); | |
| var createDesc = __webpack_require__(49); | |
| module.exports = __webpack_require__(23) ? function (object, key, value) { | |
| return dP.f(object, key, createDesc(1, value)); | |
| } : function (object, key, value) { | |
| object[key] = value; | |
| return object; | |
| }; | |
| /***/ }), | |
| /***/ 44: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var anObject = __webpack_require__(45); | |
| var IE8_DOM_DEFINE = __webpack_require__(46); | |
| var toPrimitive = __webpack_require__(48); | |
| var dP = Object.defineProperty; | |
| exports.f = __webpack_require__(23) ? Object.defineProperty : function defineProperty(O, P, Attributes) { | |
| anObject(O); | |
| P = toPrimitive(P, true); | |
| anObject(Attributes); | |
| if (IE8_DOM_DEFINE) try { | |
| return dP(O, P, Attributes); | |
| } catch (e) { /* empty */ } | |
| if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); | |
| if ('value' in Attributes) O[P] = Attributes.value; | |
| return O; | |
| }; | |
| /***/ }), | |
| /***/ 45: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var isObject = __webpack_require__(19); | |
| module.exports = function (it) { | |
| if (!isObject(it)) throw TypeError(it + ' is not an object!'); | |
| return it; | |
| }; | |
| /***/ }), | |
| /***/ 46: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = !__webpack_require__(23) && !__webpack_require__(29)(function () { | |
| return Object.defineProperty(__webpack_require__(47)('div'), 'a', { get: function () { return 7; } }).a != 7; | |
| }); | |
| /***/ }), | |
| /***/ 47: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var isObject = __webpack_require__(19); | |
| var document = __webpack_require__(17).document; | |
| // typeof document.createElement is 'object' in old IE | |
| var is = isObject(document) && isObject(document.createElement); | |
| module.exports = function (it) { | |
| return is ? document.createElement(it) : {}; | |
| }; | |
| /***/ }), | |
| /***/ 48: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // 7.1.1 ToPrimitive(input [, PreferredType]) | |
| var isObject = __webpack_require__(19); | |
| // 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) { | |
| if (!isObject(it)) return it; | |
| var fn, val; | |
| if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; | |
| if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; | |
| if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; | |
| throw TypeError("Can't convert object to primitive value"); | |
| }; | |
| /***/ }), | |
| /***/ 49: | |
| /***/ (function(module, exports) { | |
| module.exports = function (bitmap, value) { | |
| return { | |
| enumerable: !(bitmap & 1), | |
| configurable: !(bitmap & 2), | |
| writable: !(bitmap & 4), | |
| value: value | |
| }; | |
| }; | |
| /***/ }), | |
| /***/ 50: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // 7.1.13 ToObject(argument) | |
| var defined = __webpack_require__(33); | |
| module.exports = function (it) { | |
| return Object(defined(it)); | |
| }; | |
| /***/ }), | |
| /***/ 51: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // 9.4.2.3 ArraySpeciesCreate(originalArray, length) | |
| var speciesConstructor = __webpack_require__(52); | |
| module.exports = function (original, length) { | |
| return new (speciesConstructor(original))(length); | |
| }; | |
| /***/ }), | |
| /***/ 52: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var isObject = __webpack_require__(19); | |
| var isArray = __webpack_require__(53); | |
| var SPECIES = __webpack_require__(54)('species'); | |
| module.exports = function (original) { | |
| var C; | |
| if (isArray(original)) { | |
| C = original.constructor; | |
| // cross-realm fallback | |
| if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; | |
| if (isObject(C)) { | |
| C = C[SPECIES]; | |
| if (C === null) C = undefined; | |
| } | |
| } return C === undefined ? Array : C; | |
| }; | |
| /***/ }), | |
| /***/ 53: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // 7.2.2 IsArray(argument) | |
| var cof = __webpack_require__(32); | |
| module.exports = Array.isArray || function isArray(arg) { | |
| return cof(arg) == 'Array'; | |
| }; | |
| /***/ }), | |
| /***/ 54: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var store = __webpack_require__(55)('wks'); | |
| var uid = __webpack_require__(56); | |
| var Symbol = __webpack_require__(17).Symbol; | |
| var USE_SYMBOL = typeof Symbol == 'function'; | |
| var $exports = module.exports = function (name) { | |
| return store[name] || (store[name] = | |
| USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); | |
| }; | |
| $exports.store = store; | |
| /***/ }), | |
| /***/ 55: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var global = __webpack_require__(17); | |
| var SHARED = '__core-js_shared__'; | |
| var store = global[SHARED] || (global[SHARED] = {}); | |
| module.exports = function (key) { | |
| return store[key] || (store[key] = {}); | |
| }; | |
| /***/ }), | |
| /***/ 56: | |
| /***/ (function(module, exports) { | |
| var id = 0; | |
| var px = Math.random(); | |
| module.exports = function (key) { | |
| return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); | |
| }; | |
| /***/ }), | |
| /***/ 57: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| // https://github.com/tc39/Array.prototype.includes | |
| var $export = __webpack_require__(22); | |
| var $includes = __webpack_require__(58)(true); | |
| $export($export.P, 'Array', { | |
| includes: function includes(el /* , fromIndex = 0 */) { | |
| return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); | |
| } | |
| }); | |
| __webpack_require__(24)('includes'); | |
| /***/ }), | |
| /***/ 58: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // false -> Array#indexOf | |
| // true -> Array#includes | |
| var toIObject = __webpack_require__(59); | |
| var toLength = __webpack_require__(34); | |
| var toAbsoluteIndex = __webpack_require__(60); | |
| module.exports = function (IS_INCLUDES) { | |
| return function ($this, el, fromIndex) { | |
| var O = toIObject($this); | |
| var length = toLength(O.length); | |
| var index = toAbsoluteIndex(fromIndex, length); | |
| var value; | |
| // Array#includes uses SameValueZero equality algorithm | |
| // eslint-disable-next-line no-self-compare | |
| if (IS_INCLUDES && el != el) while (length > index) { | |
| value = O[index++]; | |
| // eslint-disable-next-line no-self-compare | |
| if (value != value) return true; | |
| // Array#indexOf ignores holes, Array#includes - not | |
| } else for (;length > index; index++) if (IS_INCLUDES || index in O) { | |
| if (O[index] === el) return IS_INCLUDES || index || 0; | |
| } return !IS_INCLUDES && -1; | |
| }; | |
| }; | |
| /***/ }), | |
| /***/ 59: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| // to indexed object, toObject with fallback for non-array-like ES3 strings | |
| var IObject = __webpack_require__(31); | |
| var defined = __webpack_require__(33); | |
| module.exports = function (it) { | |
| return IObject(defined(it)); | |
| }; | |
| /***/ }), | |
| /***/ 6: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.ajax = 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; }; | |
| exports.ajaxBuilder = ajaxBuilder; | |
| var _url = __webpack_require__(12); | |
| var utils = __webpack_require__(0); | |
| var XHR_DONE = 4; | |
| /** | |
| * Simple IE9+ and cross-browser ajax request function | |
| * Note: x-domain requests in IE9 do not support the use of cookies | |
| * | |
| * @param url string url | |
| * @param callback {object | function} callback | |
| * @param data mixed data | |
| * @param options object | |
| */ | |
| var ajax = exports.ajax = ajaxBuilder(); | |
| function ajaxBuilder() { | |
| var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3000; | |
| return function (url, callback, data) { | |
| var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | |
| try { | |
| var x = void 0; | |
| var useXDomainRequest = false; | |
| var method = options.method || (data ? 'POST' : 'GET'); | |
| var callbacks = (typeof callback === 'undefined' ? 'undefined' : _typeof(callback)) === 'object' ? callback : { | |
| success: function success() { | |
| utils.logMessage('xhr success'); | |
| }, | |
| error: function error(e) { | |
| utils.logError('xhr error', null, e); | |
| } | |
| }; | |
| if (typeof callback === 'function') { | |
| callbacks.success = callback; | |
| } | |
| if (!window.XMLHttpRequest) { | |
| useXDomainRequest = true; | |
| } else { | |
| x = new window.XMLHttpRequest(); | |
| if (x.responseType === undefined) { | |
| useXDomainRequest = true; | |
| } | |
| } | |
| if (useXDomainRequest) { | |
| x = new window.XDomainRequest(); | |
| x.onload = function () { | |
| callbacks.success(x.responseText, x); | |
| }; | |
| // http://stackoverflow.com/questions/15786966/xdomainrequest-aborts-post-on-ie-9 | |
| x.onerror = function () { | |
| callbacks.error('error', x); | |
| }; | |
| x.ontimeout = function () { | |
| callbacks.error('timeout', x); | |
| }; | |
| x.onprogress = function () { | |
| utils.logMessage('xhr onprogress'); | |
| }; | |
| } else { | |
| x.onreadystatechange = function () { | |
| if (x.readyState === XHR_DONE) { | |
| var status = x.status; | |
| if (status >= 200 && status < 300 || status === 304) { | |
| callbacks.success(x.responseText, x); | |
| } else { | |
| callbacks.error(x.statusText, x); | |
| } | |
| } | |
| }; | |
| x.ontimeout = function () { | |
| utils.logError(' xhr timeout after ', x.timeout, 'ms'); | |
| }; | |
| } | |
| if (method === 'GET' && data) { | |
| var urlInfo = (0, _url.parse)(url, options); | |
| _extends(urlInfo.search, data); | |
| url = (0, _url.format)(urlInfo); | |
| } | |
| x.open(method, url); | |
| // IE needs timoeut to be set after open - see #1410 | |
| x.timeout = timeout; | |
| if (!useXDomainRequest) { | |
| if (options.withCredentials) { | |
| x.withCredentials = true; | |
| } | |
| utils._each(options.customHeaders, function (value, header) { | |
| x.setRequestHeader(header, value); | |
| }); | |
| if (options.preflight) { | |
| x.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); | |
| } | |
| x.setRequestHeader('Content-Type', options.contentType || 'text/plain'); | |
| } | |
| if (method === 'POST' && data) { | |
| x.send(data); | |
| } else { | |
| x.send(); | |
| } | |
| } catch (error) { | |
| utils.logError('xhr construction', error); | |
| } | |
| }; | |
| } | |
| /***/ }), | |
| /***/ 60: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| var toInteger = __webpack_require__(35); | |
| var max = Math.max; | |
| var min = Math.min; | |
| module.exports = function (index, length) { | |
| index = toInteger(index); | |
| return index < 0 ? max(index + length, 0) : min(index, length); | |
| }; | |
| /***/ }), | |
| /***/ 61: | |
| /***/ (function(module, exports) { | |
| module.exports = clone; | |
| /* | |
| Identical to `just-extend(true, {}, obj1)` | |
| var arr = [1, 2, 3]; | |
| var subObj = {aa: 1}; | |
| var obj = {a: 3, b: 5, c: arr, d: subObj}; | |
| var objClone = clone(obj); | |
| arr.push(4); | |
| subObj.bb = 2; | |
| obj; // {a: 3, b: 5, c: [1, 2, 3, 4], d: {aa: 1}} | |
| objClone; // {a: 3, b: 5, c: [1, 2, 3], d: {aa: 1, bb: 2}} | |
| */ | |
| function clone(obj) { | |
| var result = Array.isArray(obj) ? [] : {}; | |
| for (var key in obj) { | |
| // include prototype properties | |
| var value = obj[key]; | |
| if (value && typeof value == 'object') { | |
| result[key] = clone(value); | |
| } else { | |
| result[key] = value; | |
| } | |
| } | |
| return result; | |
| } | |
| /***/ }), | |
| /***/ 62: | |
| /***/ (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.setSizeConfig = setSizeConfig; | |
| exports.resolveStatus = resolveStatus; | |
| var _config = __webpack_require__(2); | |
| var _utils = __webpack_require__(0); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var sizeConfig = []; | |
| /** | |
| * @typedef {object} SizeConfig | |
| * | |
| * @property {string} [mediaQuery] A CSS media query string that will to be interpreted by window.matchMedia. If the | |
| * media query matches then the this config will be active and sizesSupported will filter bid and adUnit sizes. If | |
| * this property is not present then this SizeConfig will only be active if triggered manually by a call to | |
| * pbjs.setConfig({labels:['label']) specifying one of the labels present on this SizeConfig. | |
| * @property {Array<Array>} sizesSupported The sizes to be accepted if this SizeConfig is enabled. | |
| * @property {Array<string>} labels The active labels to match this SizeConfig to an adUnits and/or bidders. | |
| */ | |
| /** | |
| * | |
| * @param {Array<SizeConfig>} config | |
| */ | |
| function setSizeConfig(config) { | |
| sizeConfig = config; | |
| } | |
| _config.config.getConfig('sizeConfig', function (config) { | |
| return setSizeConfig(config.sizeConfig); | |
| }); | |
| /** | |
| * Resolves the unique set of the union of all sizes and labels that are active from a SizeConfig.mediaQuery match | |
| * @param {Array<string>} labels Labels specified on adUnit or bidder | |
| * @param {boolean} labelAll if true, all labels must match to be enabled | |
| * @param {Array<string>} activeLabels Labels passed in through requestBids | |
| * @param {Array<Array<number>>} sizes Sizes specified on adUnit | |
| * @param {Array<SizeConfig>} configs | |
| * @returns {{labels: Array<string>, sizes: Array<Array<number>>}} | |
| */ | |
| function resolveStatus() { | |
| var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | |
| _ref$labels = _ref.labels, | |
| labels = _ref$labels === undefined ? [] : _ref$labels, | |
| _ref$labelAll = _ref.labelAll, | |
| labelAll = _ref$labelAll === undefined ? false : _ref$labelAll, | |
| _ref$activeLabels = _ref.activeLabels, | |
| activeLabels = _ref$activeLabels === undefined ? [] : _ref$activeLabels; | |
| var sizes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; | |
| var configs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : sizeConfig; | |
| var maps = evaluateSizeConfig(configs); | |
| var filteredSizes = void 0; | |
| if (maps.shouldFilter) { | |
| filteredSizes = sizes.filter(function (size) { | |
| return maps.sizesSupported[size]; | |
| }); | |
| } else { | |
| filteredSizes = sizes; | |
| } | |
| return { | |
| active: filteredSizes.length > 0 && (labels.length === 0 || !labelAll && (labels.some(function (label) { | |
| return maps.labels[label]; | |
| }) || labels.some(function (label) { | |
| return (0, _includes2['default'])(activeLabels, label); | |
| })) || labelAll && labels.reduce(function (result, label) { | |
| return !result ? result : maps.labels[label] || (0, _includes2['default'])(activeLabels, label); | |
| }, true)), | |
| sizes: filteredSizes | |
| }; | |
| } | |
| function evaluateSizeConfig(configs) { | |
| return configs.reduce(function (results, config) { | |
| if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && typeof config.mediaQuery === 'string') { | |
| if (matchMedia(config.mediaQuery).matches) { | |
| if (Array.isArray(config.sizesSupported)) { | |
| results.shouldFilter = true; | |
| } | |
| ['labels', 'sizesSupported'].forEach(function (type) { | |
| return (config[type] || []).forEach(function (thing) { | |
| return results[type][thing] = true; | |
| }); | |
| }); | |
| } | |
| } else { | |
| (0, _utils.logWarn)('sizeConfig rule missing required property "mediaQuery"'); | |
| } | |
| return results; | |
| }, { | |
| labels: {}, | |
| sizesSupported: {}, | |
| shouldFilter: false | |
| }); | |
| } | |
| /***/ }), | |
| /***/ 63: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.hasNonVideoBidder = exports.videoBidder = exports.videoAdUnit = undefined; | |
| exports.isValidVideoBid = isValidVideoBid; | |
| var _adaptermanager = __webpack_require__(7); | |
| var _utils = __webpack_require__(0); | |
| var _config = __webpack_require__(2); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var VIDEO_MEDIA_TYPE = 'video'; | |
| var OUTSTREAM = 'outstream'; | |
| /** | |
| * Helper functions for working with video-enabled adUnits | |
| */ | |
| var videoAdUnit = exports.videoAdUnit = function videoAdUnit(adUnit) { | |
| var mediaType = adUnit.mediaType === VIDEO_MEDIA_TYPE; | |
| var mediaTypes = (0, _utils.deepAccess)(adUnit, 'mediaTypes.video'); | |
| return mediaType || mediaTypes; | |
| }; | |
| var videoBidder = exports.videoBidder = function videoBidder(bid) { | |
| return (0, _includes2['default'])(_adaptermanager.videoAdapters, bid.bidder); | |
| }; | |
| var hasNonVideoBidder = exports.hasNonVideoBidder = function hasNonVideoBidder(adUnit) { | |
| return adUnit.bids.filter(function (bid) { | |
| return !videoBidder(bid); | |
| }).length; | |
| }; | |
| /** | |
| * @typedef {object} VideoBid | |
| * @property {string} adId id of the bid | |
| */ | |
| /** | |
| * Validate that the assets required for video context are present on the bid | |
| * @param {VideoBid} bid Video bid to validate | |
| * @param {BidRequest[]} bidRequests All bid requests for an auction | |
| * @return {Boolean} If object is valid | |
| */ | |
| function isValidVideoBid(bid, bidRequests) { | |
| var bidRequest = (0, _utils.getBidRequest)(bid.adId, bidRequests); | |
| var videoMediaType = bidRequest && (0, _utils.deepAccess)(bidRequest, 'mediaTypes.video'); | |
| var context = videoMediaType && (0, _utils.deepAccess)(videoMediaType, 'context'); | |
| // if context not defined assume default 'instream' for video bids | |
| // instream bids require a vast url or vast xml content | |
| if (!bidRequest || videoMediaType && context !== OUTSTREAM) { | |
| // xml-only video bids require a prebid cache url | |
| if (!_config.config.getConfig('cache.url') && bid.vastXml && !bid.vastUrl) { | |
| (0, _utils.logError)('\n This bid contains only vastXml and will not work when a prebid cache url is not specified.\n Try enabling prebid cache with pbjs.setConfig({ cache: {url: "..."} });\n '); | |
| return false; | |
| } | |
| return !!(bid.vastUrl || bid.vastXml); | |
| } | |
| // outstream bids require a renderer on the bid or pub-defined on adunit | |
| if (context === OUTSTREAM) { | |
| return !!(bid.renderer || bidRequest.renderer); | |
| } | |
| return true; | |
| } | |
| /***/ }), | |
| /***/ 7: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| 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 _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__(62); | |
| var _native = __webpack_require__(14); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _ajax = __webpack_require__(6); | |
| var _config = __webpack_require__(2); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var utils = __webpack_require__(0); | |
| var CONSTANTS = __webpack_require__(3); | |
| var events = __webpack_require__(9); | |
| var s2sTestingModule = void 0; // store s2sTesting module if it's loaded | |
| var _bidderRegistry = {}; | |
| exports.bidderRegistry = _bidderRegistry; | |
| var _s2sConfig = {}; | |
| _config.config.getConfig('s2sConfig', function (config) { | |
| _s2sConfig = config.s2sConfig; | |
| }); | |
| var _analyticsRegistry = {}; | |
| /** | |
| * @typedef {object} LabelDescriptor | |
| * @property {boolean} labelAll describes whether or not this object expects all labels to match, or any label to match | |
| * @property {Array<string>} labels the labels listed on the bidder or adUnit | |
| * @property {Array<string>} activeLabels the labels specified as being active by requestBids | |
| */ | |
| /** | |
| * Returns object describing the status of labels on the adUnit or bidder along with labels passed into requestBids | |
| * @param bidOrAdUnit the bidder or adUnit to get label info on | |
| * @param activeLabels the labels passed to requestBids | |
| * @returns {LabelDescriptor} | |
| */ | |
| function getLabels(bidOrAdUnit, activeLabels) { | |
| if (bidOrAdUnit.labelAll) { | |
| return { labelAll: true, labels: bidOrAdUnit.labelAll, activeLabels: activeLabels }; | |
| } | |
| return { labelAll: false, labels: bidOrAdUnit.labelAny, activeLabels: activeLabels }; | |
| } | |
| function getBids(_ref) { | |
| var bidderCode = _ref.bidderCode, | |
| auctionId = _ref.auctionId, | |
| bidderRequestId = _ref.bidderRequestId, | |
| adUnits = _ref.adUnits, | |
| labels = _ref.labels; | |
| return adUnits.reduce(function (result, adUnit) { | |
| var _resolveStatus = (0, _sizeMapping.resolveStatus)(getLabels(adUnit, labels), adUnit.sizes), | |
| active = _resolveStatus.active, | |
| filteredAdUnitSizes = _resolveStatus.sizes; | |
| if (active) { | |
| result.push(adUnit.bids.filter(function (bid) { | |
| return bid.bidder === bidderCode; | |
| }).reduce(function (bids, bid) { | |
| if (adUnit.mediaTypes) { | |
| if (utils.isValidMediaTypes(adUnit.mediaTypes)) { | |
| bid = _extends({}, bid, { mediaTypes: adUnit.mediaTypes }); | |
| } else { | |
| utils.logError('mediaTypes is not correctly configured for adunit ' + adUnit.code); | |
| } | |
| } | |
| var nativeParams = adUnit.nativeParams || utils.deepAccess(adUnit, 'mediaTypes.native'); | |
| if (nativeParams) { | |
| bid = _extends({}, bid, { | |
| nativeParams: (0, _native.processNativeAdUnitParams)(nativeParams) | |
| }); | |
| } | |
| bid = _extends({}, bid, (0, _utils.getDefinedParams)(adUnit, ['mediaType', 'renderer'])); | |
| var _resolveStatus2 = (0, _sizeMapping.resolveStatus)(getLabels(bid, labels), filteredAdUnitSizes), | |
| active = _resolveStatus2.active, | |
| sizes = _resolveStatus2.sizes; | |
| if (active) { | |
| bids.push(_extends({}, bid, { | |
| adUnitCode: adUnit.code, | |
| transactionId: adUnit.transactionId, | |
| sizes: sizes, | |
| bidId: bid.bid_id || utils.getUniqueIdentifierStr(), | |
| bidderRequestId: bidderRequestId, | |
| auctionId: auctionId | |
| })); | |
| } | |
| return bids; | |
| }, [])); | |
| } | |
| return result; | |
| }, []).reduce(_utils.flatten, []).filter(function (val) { | |
| return val !== ''; | |
| }); | |
| } | |
| function transformHeightWidth(adUnit) { | |
| var sizesObj = []; | |
| var sizes = utils.parseSizesInput(adUnit.sizes); | |
| sizes.forEach(function (size) { | |
| var heightWidth = size.split('x'); | |
| var sizeObj = { | |
| 'w': parseInt(heightWidth[0]), | |
| 'h': parseInt(heightWidth[1]) | |
| }; | |
| sizesObj.push(sizeObj); | |
| }); | |
| return sizesObj; | |
| } | |
| function getAdUnitCopyForPrebidServer(adUnits) { | |
| var adaptersServerSide = _s2sConfig.bidders; | |
| var adUnitsCopy = utils.deepClone(adUnits); | |
| adUnitsCopy.forEach(function (adUnit) { | |
| adUnit.sizes = transformHeightWidth(adUnit); | |
| // filter out client side bids | |
| adUnit.bids = adUnit.bids.filter(function (bid) { | |
| return (0, _includes2['default'])(adaptersServerSide, bid.bidder) && (!doingS2STesting() || bid.finalSource !== s2sTestingModule.CLIENT); | |
| }).map(function (bid) { | |
| bid.bid_id = utils.getUniqueIdentifierStr(); | |
| return bid; | |
| }); | |
| }); | |
| // don't send empty requests | |
| adUnitsCopy = adUnitsCopy.filter(function (adUnit) { | |
| return adUnit.bids.length !== 0; | |
| }); | |
| return adUnitsCopy; | |
| } | |
| function getAdUnitCopyForClientAdapters(adUnits) { | |
| var adUnitsClientCopy = utils.deepClone(adUnits); | |
| // filter out s2s bids | |
| adUnitsClientCopy.forEach(function (adUnit) { | |
| adUnit.bids = adUnit.bids.filter(function (bid) { | |
| return !doingS2STesting() || bid.finalSource !== s2sTestingModule.SERVER; | |
| }); | |
| }); | |
| // don't send empty requests | |
| adUnitsClientCopy = adUnitsClientCopy.filter(function (adUnit) { | |
| return adUnit.bids.length !== 0; | |
| }); | |
| return adUnitsClientCopy; | |
| } | |
| exports.makeBidRequests = function (adUnits, auctionStart, auctionId, cbTimeout, labels) { | |
| var bidRequests = []; | |
| adUnits = exports.checkBidRequestSizes(adUnits); | |
| var bidderCodes = (0, _utils.getBidderCodes)(adUnits); | |
| if (_config.config.getConfig('bidderSequence') === _config.RANDOM) { | |
| bidderCodes = (0, _utils.shuffle)(bidderCodes); | |
| } | |
| var clientBidderCodes = bidderCodes; | |
| var clientTestAdapters = []; | |
| if (_s2sConfig.enabled) { | |
| // if s2sConfig.bidderControl testing is turned on | |
| if (doingS2STesting()) { | |
| // get all adapters doing client testing | |
| clientTestAdapters = s2sTestingModule.getSourceBidderMap(adUnits)[s2sTestingModule.CLIENT]; | |
| } | |
| // these are called on the s2s adapter | |
| var adaptersServerSide = _s2sConfig.bidders; | |
| // don't call these client side (unless client request is needed for testing) | |
| clientBidderCodes = bidderCodes.filter(function (elm) { | |
| return !(0, _includes2['default'])(adaptersServerSide, elm) || (0, _includes2['default'])(clientTestAdapters, elm); | |
| }); | |
| var adUnitsS2SCopy = getAdUnitCopyForPrebidServer(adUnits); | |
| var tid = utils.generateUUID(); | |
| adaptersServerSide.forEach(function (bidderCode) { | |
| var bidderRequestId = utils.getUniqueIdentifierStr(); | |
| var bidderRequest = { | |
| bidderCode: bidderCode, | |
| auctionId: auctionId, | |
| bidderRequestId: bidderRequestId, | |
| tid: tid, | |
| adUnitsS2SCopy: adUnitsS2SCopy, | |
| bids: getBids({ bidderCode: bidderCode, auctionId: auctionId, bidderRequestId: bidderRequestId, 'adUnits': adUnitsS2SCopy, labels: labels }), | |
| auctionStart: auctionStart, | |
| timeout: _s2sConfig.timeout, | |
| src: CONSTANTS.S2S.SRC | |
| }; | |
| if (bidderRequest.bids.length !== 0) { | |
| bidRequests.push(bidderRequest); | |
| } | |
| }); | |
| } | |
| // client adapters | |
| var adUnitsClientCopy = getAdUnitCopyForClientAdapters(adUnits); | |
| clientBidderCodes.forEach(function (bidderCode) { | |
| var bidderRequestId = utils.getUniqueIdentifierStr(); | |
| var bidderRequest = { | |
| bidderCode: bidderCode, | |
| auctionId: auctionId, | |
| bidderRequestId: bidderRequestId, | |
| bids: getBids({ bidderCode: bidderCode, auctionId: auctionId, bidderRequestId: bidderRequestId, 'adUnits': adUnitsClientCopy, labels: labels }), | |
| auctionStart: auctionStart, | |
| timeout: cbTimeout | |
| }; | |
| if (bidderRequest.bids && bidderRequest.bids.length !== 0) { | |
| bidRequests.push(bidderRequest); | |
| } | |
| }); | |
| return bidRequests; | |
| }; | |
| exports.checkBidRequestSizes = function (adUnits) { | |
| Array.prototype.forEach.call(adUnits, function (adUnit) { | |
| if (adUnit.sizes) { | |
| utils.logWarn('Usage of adUnits.sizes will eventually be deprecated. Please define size dimensions within the corresponding area of the mediaTypes.<object> (eg mediaTypes.banner.sizes).'); | |
| } | |
| var mediaTypes = adUnit.mediaTypes; | |
| if (mediaTypes && mediaTypes.banner) { | |
| var banner = mediaTypes.banner; | |
| if (banner.sizes) { | |
| adUnit.sizes = banner.sizes; | |
| } else { | |
| utils.logError('Detected a mediaTypes.banner object did not include sizes. This is a required field for the mediaTypes.banner object. Removing invalid mediaTypes.banner object from request.'); | |
| delete adUnit.mediaTypes.banner; | |
| } | |
| } | |
| if (mediaTypes && mediaTypes.video) { | |
| var video = mediaTypes.video; | |
| if (video.playerSize) { | |
| if (Array.isArray(video.playerSize) && video.playerSize.length === 2 && utils.isInteger(video.playerSize[0]) && utils.isInteger(video.playerSize[1])) { | |
| adUnit.sizes = video.playerSize; | |
| } else { | |
| utils.logError('Detected incorrect configuration of mediaTypes.video.playerSize. Please specify only one set of dimensions in a format like: [640, 480]. Removing invalid mediaTypes.video.playerSize property from request.'); | |
| delete adUnit.mediaTypes.video.playerSize; | |
| } | |
| } | |
| } | |
| if (mediaTypes && mediaTypes.native) { | |
| var native = mediaTypes.native; | |
| if (native.image && native.image.sizes && !Array.isArray(native.image.sizes)) { | |
| utils.logError('Please use an array of sizes for native.image.sizes field. Removing invalid mediaTypes.native.image.sizes property from request.'); | |
| delete adUnit.mediaTypes.native.image.sizes; | |
| } | |
| if (native.image && native.image.aspect_ratios && !Array.isArray(native.image.aspect_ratios)) { | |
| utils.logError('Please use an array of sizes for native.image.aspect_ratios field. Removing invalid mediaTypes.native.image.aspect_ratios property from request.'); | |
| delete adUnit.mediaTypes.native.image.aspect_ratios; | |
| } | |
| if (native.icon && native.icon.sizes && !Array.isArray(native.icon.sizes)) { | |
| utils.logError('Please use an array of sizes for native.icon.sizes field. Removing invalid mediaTypes.native.icon.sizes property from request.'); | |
| delete adUnit.mediaTypes.native.icon.sizes; | |
| } | |
| } | |
| }); | |
| return adUnits; | |
| }; | |
| exports.callBids = function (adUnits, bidRequests, addBidResponse, doneCb) { | |
| if (!bidRequests.length) { | |
| utils.logWarn('callBids executed with no bidRequests. Were they filtered by labels or sizing?'); | |
| return; | |
| } | |
| var ajax = (0, _ajax.ajaxBuilder)(bidRequests[0].timeout); | |
| var _bidRequests$reduce = bidRequests.reduce(function (partitions, bidRequest) { | |
| partitions[Number(typeof bidRequest.src !== 'undefined' && bidRequest.src === CONSTANTS.S2S.SRC)].push(bidRequest); | |
| return partitions; | |
| }, [[], []]), | |
| _bidRequests$reduce2 = _slicedToArray(_bidRequests$reduce, 2), | |
| clientBidRequests = _bidRequests$reduce2[0], | |
| serverBidRequests = _bidRequests$reduce2[1]; | |
| if (serverBidRequests.length) { | |
| var adaptersServerSide = _s2sConfig.bidders; | |
| var s2sAdapter = _bidderRegistry[_s2sConfig.adapter]; | |
| var tid = serverBidRequests[0].tid; | |
| var adUnitsS2SCopy = serverBidRequests[0].adUnitsS2SCopy; | |
| if (s2sAdapter) { | |
| var s2sBidRequest = { tid: tid, 'ad_units': adUnitsS2SCopy }; | |
| if (s2sBidRequest.ad_units.length) { | |
| var doneCbs = serverBidRequests.map(function (bidRequest) { | |
| bidRequest.start = (0, _utils.timestamp)(); | |
| bidRequest.doneCbCallCount = 0; | |
| return doneCb(bidRequest.bidderRequestId); | |
| }); | |
| // only log adapters that actually have adUnit bids | |
| var allBidders = s2sBidRequest.ad_units.reduce(function (adapters, adUnit) { | |
| return adapters.concat((adUnit.bids || []).reduce(function (adapters, bid) { | |
| return adapters.concat(bid.bidder); | |
| }, [])); | |
| }, []); | |
| utils.logMessage('CALLING S2S HEADER BIDDERS ==== ' + adaptersServerSide.filter(function (adapter) { | |
| return (0, _includes2['default'])(allBidders, adapter); | |
| }).join(',')); | |
| // fire BID_REQUESTED event for each s2s bidRequest | |
| serverBidRequests.forEach(function (bidRequest) { | |
| events.emit(CONSTANTS.EVENTS.BID_REQUESTED, bidRequest); | |
| }); | |
| // make bid requests | |
| s2sAdapter.callBids(s2sBidRequest, serverBidRequests, addBidResponse, function () { | |
| return doneCbs.forEach(function (done) { | |
| return done(); | |
| }); | |
| }, ajax); | |
| } | |
| } | |
| } | |
| // handle client adapter requests | |
| clientBidRequests.forEach(function (bidRequest) { | |
| bidRequest.start = (0, _utils.timestamp)(); | |
| // TODO : Do we check for bid in pool from here and skip calling adapter again ? | |
| var adapter = _bidderRegistry[bidRequest.bidderCode]; | |
| if (adapter) { | |
| utils.logMessage('CALLING BIDDER ======= ' + bidRequest.bidderCode); | |
| events.emit(CONSTANTS.EVENTS.BID_REQUESTED, bidRequest); | |
| bidRequest.doneCbCallCount = 0; | |
| var done = doneCb(bidRequest.bidderRequestId); | |
| adapter.callBids(bidRequest, addBidResponse, done, ajax); | |
| } else { | |
| utils.logError('Adapter trying to be called which does not exist: ' + bidRequest.bidderCode + ' adaptermanager.callBids'); | |
| } | |
| }); | |
| }; | |
| function doingS2STesting() { | |
| return _s2sConfig && _s2sConfig.enabled && _s2sConfig.testing && s2sTestingModule; | |
| } | |
| function getSupportedMediaTypes(bidderCode) { | |
| var result = []; | |
| if ((0, _includes2['default'])(exports.videoAdapters, bidderCode)) result.push('video'); | |
| if ((0, _includes2['default'])(_native.nativeAdapters, bidderCode)) result.push('native'); | |
| return result; | |
| } | |
| exports.videoAdapters = []; // added by adapterLoader for now | |
| exports.registerBidAdapter = function (bidAdaptor, bidderCode) { | |
| var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, | |
| _ref2$supportedMediaT = _ref2.supportedMediaTypes, | |
| supportedMediaTypes = _ref2$supportedMediaT === undefined ? [] : _ref2$supportedMediaT; | |
| if (bidAdaptor && bidderCode) { | |
| if (typeof bidAdaptor.callBids === 'function') { | |
| _bidderRegistry[bidderCode] = bidAdaptor; | |
| if ((0, _includes2['default'])(supportedMediaTypes, 'video')) { | |
| exports.videoAdapters.push(bidderCode); | |
| } | |
| if ((0, _includes2['default'])(supportedMediaTypes, 'native')) { | |
| _native.nativeAdapters.push(bidderCode); | |
| } | |
| } else { | |
| utils.logError('Bidder adaptor error for bidder code: ' + bidderCode + 'bidder must implement a callBids() function'); | |
| } | |
| } else { | |
| utils.logError('bidAdaptor or bidderCode not specified'); | |
| } | |
| }; | |
| exports.aliasBidAdapter = function (bidderCode, alias) { | |
| var existingAlias = _bidderRegistry[alias]; | |
| if (typeof existingAlias === 'undefined') { | |
| var bidAdaptor = _bidderRegistry[bidderCode]; | |
| if (typeof bidAdaptor === 'undefined') { | |
| utils.logError('bidderCode "' + bidderCode + '" is not an existing bidder.', 'adaptermanager.aliasBidAdapter'); | |
| } else { | |
| try { | |
| var newAdapter = void 0; | |
| var supportedMediaTypes = getSupportedMediaTypes(bidderCode); | |
| // Have kept old code to support backward compatibilitiy. | |
| // Remove this if loop when all adapters are supporting bidderFactory. i.e When Prebid.js is 1.0 | |
| if (bidAdaptor.constructor.prototype != Object.prototype) { | |
| newAdapter = new bidAdaptor.constructor(); | |
| newAdapter.setBidderCode(alias); | |
| } else { | |
| var spec = bidAdaptor.getSpec(); | |
| newAdapter = (0, _bidderFactory.newBidder)(_extends({}, spec, { code: alias })); | |
| } | |
| this.registerBidAdapter(newAdapter, alias, { | |
| supportedMediaTypes: supportedMediaTypes | |
| }); | |
| } catch (e) { | |
| utils.logError(bidderCode + ' bidder does not currently support aliasing.', 'adaptermanager.aliasBidAdapter'); | |
| } | |
| } | |
| } else { | |
| utils.logMessage('alias name "' + alias + '" has been already specified.'); | |
| } | |
| }; | |
| exports.registerAnalyticsAdapter = function (_ref3) { | |
| var adapter = _ref3.adapter, | |
| code = _ref3.code; | |
| if (adapter && code) { | |
| if (typeof adapter.enableAnalytics === 'function') { | |
| adapter.code = code; | |
| _analyticsRegistry[code] = adapter; | |
| } else { | |
| utils.logError('Prebid Error: Analytics adaptor error for analytics "' + code + '"\n analytics adapter must implement an enableAnalytics() function'); | |
| } | |
| } else { | |
| utils.logError('Prebid Error: analyticsAdapter or analyticsCode not specified'); | |
| } | |
| }; | |
| exports.enableAnalytics = function (config) { | |
| if (!utils.isArray(config)) { | |
| config = [config]; | |
| } | |
| utils._each(config, function (adapterConfig) { | |
| var adapter = _analyticsRegistry[adapterConfig.provider]; | |
| if (adapter) { | |
| adapter.enableAnalytics(adapterConfig); | |
| } else { | |
| utils.logError('Prebid Error: no analytics adapter found in registry for\n ' + adapterConfig.provider + '.'); | |
| } | |
| }); | |
| }; | |
| exports.getBidAdapter = function (bidder) { | |
| return _bidderRegistry[bidder]; | |
| }; | |
| // the s2sTesting module is injected when it's loaded rather than being imported | |
| // importing it causes the packager to include it even when it's not explicitly included in the build | |
| exports.setS2STestingModule = function (module) { | |
| s2sTestingModule = module; | |
| }; | |
| /***/ }), | |
| /***/ 8: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(57); | |
| module.exports = __webpack_require__(18).Array.includes; | |
| /***/ }), | |
| /***/ 9: | |
| /***/ (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; }; | |
| /** | |
| * events.js | |
| */ | |
| var utils = __webpack_require__(0); | |
| var CONSTANTS = __webpack_require__(3); | |
| var slice = Array.prototype.slice; | |
| var push = Array.prototype.push; | |
| // define entire events | |
| // var allEvents = ['bidRequested','bidResponse','bidWon','bidTimeout']; | |
| var allEvents = utils._map(CONSTANTS.EVENTS, function (v) { | |
| return v; | |
| }); | |
| var idPaths = CONSTANTS.EVENT_ID_PATHS; | |
| // keep a record of all events fired | |
| var eventsFired = []; | |
| module.exports = function () { | |
| var _handlers = {}; | |
| var _public = {}; | |
| /** | |
| * | |
| * @param {String} eventString The name of the event. | |
| * @param {Array} args The payload emitted with the event. | |
| * @private | |
| */ | |
| function _dispatch(eventString, args) { | |
| utils.logMessage('Emitting event for: ' + eventString); | |
| var eventPayload = args[0] || {}; | |
| var idPath = idPaths[eventString]; | |
| var key = eventPayload[idPath]; | |
| var event = _handlers[eventString] || { que: [] }; | |
| var eventKeys = utils._map(event, function (v, k) { | |
| return k; | |
| }); | |
| var callbacks = []; | |
| // record the event: | |
| eventsFired.push({ | |
| eventType: eventString, | |
| args: eventPayload, | |
| id: key | |
| }); | |
| /** Push each specific callback to the `callbacks` array. | |
| * If the `event` map has a key that matches the value of the | |
| * event payload id path, e.g. `eventPayload[idPath]`, then apply | |
| * each function in the `que` array as an argument to push to the | |
| * `callbacks` array | |
| * */ | |
| if (key && utils.contains(eventKeys, key)) { | |
| push.apply(callbacks, event[key].que); | |
| } | |
| /** Push each general callback to the `callbacks` array. */ | |
| push.apply(callbacks, event.que); | |
| /** call each of the callbacks */ | |
| utils._each(callbacks, function (fn) { | |
| if (!fn) return; | |
| try { | |
| fn.apply(null, args); | |
| } catch (e) { | |
| utils.logError('Error executing handler:', 'events.js', e); | |
| } | |
| }); | |
| } | |
| function _checkAvailableEvent(event) { | |
| return utils.contains(allEvents, event); | |
| } | |
| _public.on = function (eventString, handler, id) { | |
| // check whether available event or not | |
| if (_checkAvailableEvent(eventString)) { | |
| var event = _handlers[eventString] || { que: [] }; | |
| if (id) { | |
| event[id] = event[id] || { que: [] }; | |
| event[id].que.push(handler); | |
| } else { | |
| event.que.push(handler); | |
| } | |
| _handlers[eventString] = event; | |
| } else { | |
| utils.logError('Wrong event name : ' + eventString + ' Valid event names :' + allEvents); | |
| } | |
| }; | |
| _public.emit = function (event) { | |
| var args = slice.call(arguments, 1); | |
| _dispatch(event, args); | |
| }; | |
| _public.off = function (eventString, handler, id) { | |
| var event = _handlers[eventString]; | |
| if (utils.isEmpty(event) || utils.isEmpty(event.que) && utils.isEmpty(event[id])) { | |
| return; | |
| } | |
| if (id && (utils.isEmpty(event[id]) || utils.isEmpty(event[id].que))) { | |
| return; | |
| } | |
| if (id) { | |
| utils._each(event[id].que, function (_handler) { | |
| var que = event[id].que; | |
| if (_handler === handler) { | |
| que.splice(utils.indexOf.call(que, _handler), 1); | |
| } | |
| }); | |
| } else { | |
| utils._each(event.que, function (_handler) { | |
| var que = event.que; | |
| if (_handler === handler) { | |
| que.splice(utils.indexOf.call(que, _handler), 1); | |
| } | |
| }); | |
| } | |
| _handlers[eventString] = event; | |
| }; | |
| _public.get = function () { | |
| return _handlers; | |
| }; | |
| /** | |
| * This method can return a copy of all the events fired | |
| * @return {Array} array of events fired | |
| */ | |
| _public.getEvents = function () { | |
| var arrayCopy = []; | |
| utils._each(eventsFired, function (value) { | |
| var newProp = _extends({}, value); | |
| arrayCopy.push(newProp); | |
| }); | |
| return arrayCopy; | |
| }; | |
| return _public; | |
| }(); | |
| /***/ }), | |
| /***/ 94: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) | |
| var $export = __webpack_require__(22); | |
| var $find = __webpack_require__(30)(6); | |
| var KEY = 'findIndex'; | |
| var forced = true; | |
| // Shouldn't skip holes | |
| if (KEY in []) Array(1)[KEY](function () { forced = false; }); | |
| $export($export.P + $export.F * forced, 'Array', { | |
| findIndex: function findIndex(callbackfn /* , that = undefined */) { | |
| return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); | |
| } | |
| }); | |
| __webpack_require__(24)(KEY); | |
| /***/ }) | |
| /******/ }); | |
| pbjsChunk([104],{ | |
| /***/ 39: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(40); | |
| module.exports = __webpack_require__(64); | |
| /***/ }), | |
| /***/ 40: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| var _userSync = __webpack_require__(13); | |
| var _require = __webpack_require__(1), | |
| registerBidder = _require.registerBidder; | |
| var _require2 = __webpack_require__(2), | |
| config = _require2.config; | |
| var BIDDER_CODE = '33across'; | |
| var END_POINT = 'https://ssc.33across.com/api/v1/hb'; | |
| var SYNC_ENDPOINT = 'https://de.tynt.com/deb/v2?m=xch&rt=html'; | |
| // All this assumes that only one bid is ever returned by ttx | |
| function _createBidResponse(response) { | |
| return { | |
| requestId: response.id, | |
| bidderCode: BIDDER_CODE, | |
| cpm: response.seatbid[0].bid[0].price, | |
| width: response.seatbid[0].bid[0].w, | |
| height: response.seatbid[0].bid[0].h, | |
| ad: response.seatbid[0].bid[0].adm, | |
| ttl: response.seatbid[0].bid[0].ttl || 60, | |
| creativeId: response.seatbid[0].bid[0].crid, | |
| currency: response.cur, | |
| netRevenue: true | |
| }; | |
| } | |
| // infer the necessary data from valid bid for a minimal ttxRequest and create HTTP request | |
| function _createServerRequest(bidRequest) { | |
| var ttxRequest = {}; | |
| var params = bidRequest.params; | |
| /* | |
| * Infer data for the request payload | |
| */ | |
| ttxRequest.imp = []; | |
| ttxRequest.imp[0] = { | |
| banner: { | |
| format: bidRequest.sizes.map(_getFormatSize) | |
| }, | |
| ext: { | |
| ttx: { | |
| prod: params.productId | |
| } | |
| } | |
| }; | |
| ttxRequest.site = { id: params.siteId }; | |
| // Go ahead send the bidId in request to 33exchange so it's kept track of in the bid response and | |
| // therefore in ad targetting process | |
| ttxRequest.id = bidRequest.bidId; | |
| // Finally, set the openRTB 'test' param if this is to be a test bid | |
| if (params.test === 1) { | |
| ttxRequest.test = 1; | |
| } | |
| /* | |
| * Now construt the full server request | |
| */ | |
| var options = { | |
| contentType: 'application/json', | |
| withCredentials: false | |
| }; | |
| // Allow the ability to configure the HB endpoint for testing purposes. | |
| var ttxSettings = config.getConfig('ttxSettings'); | |
| var url = ttxSettings && ttxSettings.url || END_POINT; | |
| // Return the server request | |
| return { | |
| 'method': 'POST', | |
| 'url': url, | |
| 'data': JSON.stringify(ttxRequest), | |
| 'options': options | |
| }; | |
| } | |
| function _getFormatSize(sizeArr) { | |
| return { | |
| w: sizeArr[0], | |
| h: sizeArr[1], | |
| ext: {} | |
| }; | |
| } | |
| // Register one sync per bid since each ad unit may potenitally be linked to a uniqe guid | |
| // Sync type will always be 'iframe' for 33Across | |
| function _registerUserSyncs(requestData) { | |
| var ttxRequest = void 0; | |
| try { | |
| ttxRequest = JSON.parse(requestData); | |
| } catch (err) { | |
| // No point in trying to register sync since the requisite data cannot be parsed. | |
| return; | |
| } | |
| var ttxSettings = config.getConfig('ttxSettings'); | |
| var syncUrl = ttxSettings && ttxSettings.syncUrl || SYNC_ENDPOINT; | |
| syncUrl = syncUrl + '&id=' + ttxRequest.site.id; | |
| _userSync.userSync.registerSync('iframe', BIDDER_CODE, syncUrl); | |
| } | |
| function isBidRequestValid(bid) { | |
| if (bid.bidder !== BIDDER_CODE || typeof bid.params === 'undefined') { | |
| return false; | |
| } | |
| if (typeof bid.params.siteId === 'undefined' || typeof bid.params.productId === 'undefined') { | |
| return false; | |
| } | |
| return true; | |
| } | |
| // NOTE: At this point, 33exchange only accepts request for a single impression | |
| function buildRequests(bidRequests) { | |
| return bidRequests.map(_createServerRequest); | |
| } | |
| // NOTE: At this point, the response from 33exchange will only ever contain one bid i.e. the highest bid | |
| function interpretResponse(serverResponse, bidRequest) { | |
| // Register user sync first | |
| if (bidRequest && bidRequest.data) { | |
| _registerUserSyncs(bidRequest.data); | |
| } | |
| var bidResponses = []; | |
| // If there are bids, look at the first bid of the first seatbid (see NOTE above for assumption about ttx) | |
| if (serverResponse.body.seatbid.length > 0 && serverResponse.body.seatbid[0].bid.length > 0) { | |
| bidResponses.push(_createBidResponse(serverResponse.body)); | |
| } | |
| return bidResponses; | |
| } | |
| var spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: isBidRequestValid, | |
| buildRequests: buildRequests, | |
| interpretResponse: interpretResponse | |
| }; | |
| registerBidder(spec); | |
| module.exports = spec; | |
| /***/ }), | |
| /***/ 64: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[39]); | |
| pbjsChunk([103],{ | |
| /***/ 65: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(66); | |
| module.exports = __webpack_require__(67); | |
| /***/ }), | |
| /***/ 66: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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 _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 A4G_BIDDER_CODE = 'a4g'; | |
| var A4G_CURRENCY = 'USD'; | |
| var A4G_DEFAULT_BID_URL = '//ads.ad4game.com/v1/bid'; | |
| var A4G_TTL = 120; | |
| var LOCATION_PARAM_NAME = 'siteurl'; | |
| var ID_PARAM_NAME = 'id'; | |
| var IFRAME_PARAM_NAME = 'if'; | |
| var ZONE_ID_PARAM_NAME = 'zoneId'; | |
| var SIZE_PARAM_NAME = 'size'; | |
| var ARRAY_PARAM_SEPARATOR = ';'; | |
| var ARRAY_SIZE_SEPARATOR = ','; | |
| var SIZE_SEPARATOR = 'x'; | |
| var spec = exports.spec = { | |
| code: A4G_BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return bid.params && !!bid.params.zoneId; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var _data; | |
| var deliveryUrl = ''; | |
| var idParams = []; | |
| var sizeParams = []; | |
| var zoneIds = []; | |
| utils._each(validBidRequests, function (bid) { | |
| if (!deliveryUrl && typeof bid.params.deliveryUrl === 'string') { | |
| deliveryUrl = bid.params.deliveryUrl; | |
| } | |
| idParams.push(bid.bidId); | |
| sizeParams.push(bid.sizes.map(function (size) { | |
| return size.join(SIZE_SEPARATOR); | |
| }).join(ARRAY_SIZE_SEPARATOR)); | |
| zoneIds.push(bid.params.zoneId); | |
| }); | |
| if (!deliveryUrl) { | |
| deliveryUrl = A4G_DEFAULT_BID_URL; | |
| } | |
| return { | |
| method: 'GET', | |
| url: deliveryUrl, | |
| data: (_data = {}, _defineProperty(_data, IFRAME_PARAM_NAME, 0), _defineProperty(_data, LOCATION_PARAM_NAME, utils.getTopWindowUrl()), _defineProperty(_data, SIZE_PARAM_NAME, sizeParams.join(ARRAY_PARAM_SEPARATOR)), _defineProperty(_data, ID_PARAM_NAME, idParams.join(ARRAY_PARAM_SEPARATOR)), _defineProperty(_data, ZONE_ID_PARAM_NAME, zoneIds.join(ARRAY_PARAM_SEPARATOR)), _data) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponses, request) { | |
| var bidResponses = []; | |
| utils._each(serverResponses.body, function (response) { | |
| if (response.cpm > 0) { | |
| var bidResponse = { | |
| requestId: response.id, | |
| creativeId: response.id, | |
| adId: response.id, | |
| cpm: response.cpm, | |
| width: response.width, | |
| height: response.height, | |
| currency: A4G_CURRENCY, | |
| netRevenue: true, | |
| ttl: A4G_TTL, | |
| ad: response.ad | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| }); | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 67: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[65]); | |
| pbjsChunk([102],{ | |
| /***/ 68: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(69); | |
| module.exports = __webpack_require__(70); | |
| /***/ }), | |
| /***/ 69: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'adbutler'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| pageID: Math.floor(Math.random() * 10e6), | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.accountID && bid.params.zoneID); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var i; | |
| var zoneID; | |
| var bidRequest; | |
| var accountID; | |
| var keyword; | |
| var domain; | |
| var requestURI; | |
| var serverRequests = []; | |
| var zoneCounters = {}; | |
| for (i = 0; i < validBidRequests.length; i++) { | |
| bidRequest = validBidRequests[i]; | |
| zoneID = utils.getBidIdParameter('zoneID', bidRequest.params); | |
| accountID = utils.getBidIdParameter('accountID', bidRequest.params); | |
| keyword = utils.getBidIdParameter('keyword', bidRequest.params); | |
| domain = utils.getBidIdParameter('domain', bidRequest.params); | |
| if (!(zoneID in zoneCounters)) { | |
| zoneCounters[zoneID] = 0; | |
| } | |
| if (typeof domain === 'undefined' || domain.length === 0) { | |
| domain = 'servedbyadbutler.com'; | |
| } | |
| requestURI = location.protocol + '//' + domain + '/adserve/;type=hbr;'; | |
| requestURI += 'ID=' + encodeURIComponent(accountID) + ';'; | |
| requestURI += 'setID=' + encodeURIComponent(zoneID) + ';'; | |
| requestURI += 'pid=' + encodeURIComponent(spec.pageID) + ';'; | |
| requestURI += 'place=' + encodeURIComponent(zoneCounters[zoneID]) + ';'; | |
| // append the keyword for targeting if one was passed in | |
| if (keyword !== '') { | |
| requestURI += 'kw=' + encodeURIComponent(keyword) + ';'; | |
| } | |
| zoneCounters[zoneID]++; | |
| serverRequests.push({ | |
| method: 'GET', | |
| url: requestURI, | |
| data: {}, | |
| bidRequest: bidRequest | |
| }); | |
| } | |
| return serverRequests; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidObj = bidRequest.bidRequest; | |
| var bidResponses = []; | |
| var bidResponse = {}; | |
| var isCorrectSize = false; | |
| var isCorrectCPM = true; | |
| var CPM; | |
| var minCPM; | |
| var maxCPM; | |
| var width; | |
| var height; | |
| serverResponse = serverResponse.body; | |
| if (serverResponse && serverResponse.status === 'SUCCESS' && bidObj) { | |
| CPM = serverResponse.cpm; | |
| minCPM = utils.getBidIdParameter('minCPM', bidObj.params); | |
| maxCPM = utils.getBidIdParameter('maxCPM', bidObj.params); | |
| width = parseInt(serverResponse.width); | |
| height = parseInt(serverResponse.height); | |
| // Ensure response CPM is within the given bounds | |
| if (minCPM !== '' && CPM < parseFloat(minCPM)) { | |
| isCorrectCPM = false; | |
| } | |
| if (maxCPM !== '' && CPM > parseFloat(maxCPM)) { | |
| isCorrectCPM = false; | |
| } | |
| // Ensure that response ad matches one of the placement sizes. | |
| utils._each(bidObj.sizes, function (size) { | |
| if (width === size[0] && height === size[1]) { | |
| isCorrectSize = true; | |
| } | |
| }); | |
| if (isCorrectCPM && isCorrectSize) { | |
| bidResponse.requestId = bidObj.bidId; | |
| bidResponse.bidderCode = spec.code; | |
| bidResponse.creativeId = serverResponse.placement_id; | |
| bidResponse.cpm = CPM; | |
| bidResponse.width = width; | |
| bidResponse.height = height; | |
| bidResponse.ad = serverResponse.ad_code; | |
| bidResponse.ad += spec.addTrackingPixels(serverResponse.tracking_pixels); | |
| bidResponse.currency = 'USD'; | |
| bidResponse.netRevenue = true; | |
| bidResponse.ttl = _config.config.getConfig('_bidderTimeout'); | |
| bidResponse.referrer = utils.getTopWindowUrl(); | |
| bidResponses.push(bidResponse); | |
| } | |
| } | |
| return bidResponses; | |
| }, | |
| addTrackingPixels: function addTrackingPixels(trackingPixels) { | |
| var trackingPixelMarkup = ''; | |
| utils._each(trackingPixels, function (pixelURL) { | |
| var trackingPixel = '<img height="0" width="0" border="0" style="display:none;" src="'; | |
| trackingPixel += pixelURL; | |
| trackingPixel += '">'; | |
| trackingPixelMarkup += trackingPixel; | |
| }); | |
| return trackingPixelMarkup; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 70: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[68]); | |
| pbjsChunk([101],{ | |
| /***/ 71: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(72); | |
| module.exports = __webpack_require__(73); | |
| /***/ }), | |
| /***/ 72: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| var BIDDER_CODE = 'adform'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.mid; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var i, l, j, k, bid, _key, _value, reqParams; | |
| var request = []; | |
| var globalParams = [['adxDomain', 'adx.adform.net'], ['fd', 1], ['url', null], ['tid', null]]; | |
| var netRevenue = 'net'; | |
| var bids = JSON.parse(JSON.stringify(validBidRequests)); | |
| for (i = 0, l = bids.length; i < l; i++) { | |
| bid = bids[i]; | |
| if (bid.params.priceType === 'gross') { | |
| netRevenue = 'gross'; | |
| } | |
| for (j = 0, k = globalParams.length; j < k; j++) { | |
| _key = globalParams[j][0]; | |
| _value = bid[_key] || bid.params[_key]; | |
| if (_value) { | |
| bid[_key] = bid.params[_key] = null; | |
| globalParams[j][1] = _value; | |
| } | |
| } | |
| reqParams = bid.params; | |
| reqParams.transactionId = bid.transactionId; | |
| request.push(formRequestUrl(reqParams)); | |
| } | |
| request.unshift('//' + globalParams[0][1] + '/adx/?rp=4'); | |
| request.push('stid=' + validBidRequests[0].auctionId); | |
| for (i = 1, l = globalParams.length; i < l; i++) { | |
| _key = globalParams[i][0]; | |
| _value = globalParams[i][1]; | |
| if (_value) { | |
| request.push(_key + '=' + encodeURIComponent(_value)); | |
| } | |
| } | |
| return { | |
| method: 'GET', | |
| url: request.join('&'), | |
| bids: validBidRequests, | |
| netRevenue: netRevenue, | |
| bidder: 'adform' | |
| }; | |
| function formRequestUrl(reqData) { | |
| var key; | |
| var url = []; | |
| for (key in reqData) { | |
| if (reqData.hasOwnProperty(key) && reqData[key]) { | |
| url.push(key, '=', reqData[key], '&'); | |
| } | |
| } | |
| return encodeURIComponent(btoa(url.join('').slice(0, -1))); | |
| } | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var VALID_RESPONSES = { | |
| banner: 1, | |
| vast_content: 1, | |
| vast_url: 1 | |
| }; | |
| var bidObject, response, bid, type; | |
| var bidRespones = []; | |
| var bids = bidRequest.bids; | |
| var responses = serverResponse.body; | |
| for (var i = 0; i < responses.length; i++) { | |
| response = responses[i]; | |
| type = response.response === 'banner' ? _mediaTypes.BANNER : _mediaTypes.VIDEO; | |
| bid = bids[i]; | |
| if (VALID_RESPONSES[response.response] && (verifySize(response, bid.sizes) || type === _mediaTypes.VIDEO)) { | |
| bidObject = { | |
| requestId: bid.bidId, | |
| cpm: response.win_bid, | |
| width: response.width, | |
| height: response.height, | |
| creativeId: bid.bidId, | |
| dealId: response.deal_id, | |
| currency: response.win_cur, | |
| netRevenue: bidRequest.netRevenue !== 'gross', | |
| ttl: 360, | |
| ad: response.banner, | |
| bidderCode: bidRequest.bidder, | |
| transactionId: bid.transactionId, | |
| vastUrl: response.vast_url, | |
| vastXml: response.vast_content, | |
| mediaType: type | |
| }; | |
| bidRespones.push(bidObject); | |
| } | |
| } | |
| return bidRespones; | |
| function verifySize(adItem, validSizes) { | |
| for (var j = 0, k = validSizes.length; j < k; j++) { | |
| if (adItem.width === validSizes[j][0] && adItem.height === validSizes[j][1]) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 73: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[71]); | |
| pbjsChunk([100],{ | |
| /***/ 74: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(75); | |
| module.exports = __webpack_require__(76); | |
| /***/ }), | |
| /***/ 75: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __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; } } | |
| // import {config} from 'src/config'; | |
| var ADG_BIDDER_CODE = 'adgeneration'; | |
| var spec = exports.spec = { | |
| code: ADG_BIDDER_CODE, | |
| aliases: ['adg'], // short code | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.NATIVE], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.id; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var serverRequests = []; | |
| for (var i = 0, len = validBidRequests.length; i < len; i++) { | |
| var validReq = validBidRequests[i]; | |
| var DEBUG_URL = 'http://api-test.scaleout.jp/adsv/v1'; | |
| var URL = 'https://d.socdm.com/adsv/v1'; | |
| var url = validReq.params.debug ? DEBUG_URL : URL; | |
| var data = ''; | |
| data = utils.tryAppendQueryString(data, 'posall', 'SSPLOC'); | |
| var id = utils.getBidIdParameter('id', validReq.params); | |
| data = utils.tryAppendQueryString(data, 'id', id); | |
| data = utils.tryAppendQueryString(data, 'sdktype', '0'); | |
| data = utils.tryAppendQueryString(data, 'hb', 'true'); | |
| data = utils.tryAppendQueryString(data, 't', 'json3'); | |
| data = utils.tryAppendQueryString(data, 'transactionid', validReq.transactionId); | |
| // native以外ã«videoç‰ã®å¯¾å¿œãŒå…¥ã£ãŸå ´åˆã¯è¦ä¿®æ£ | |
| if (!validReq.mediaTypes || !validReq.mediaTypes.native) { | |
| data = utils.tryAppendQueryString(data, 'imark', '1'); | |
| } | |
| // remove the trailing "&" | |
| if (data.lastIndexOf('&') === data.length - 1) { | |
| data = data.substring(0, data.length - 1); | |
| } | |
| serverRequests.push({ | |
| method: 'GET', | |
| url: url, | |
| data: data, | |
| bidRequest: validBidRequests[i] | |
| }); | |
| } | |
| return serverRequests; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {ServerResponse} serverResponse A successful response from the server. | |
| * @param {BidRequest} bidRequest | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequests) { | |
| var body = serverResponse.body; | |
| var bidResponses = []; | |
| var bidRequest = {}; | |
| if (body.results && body.results.length > 0) { | |
| bidRequest = bidRequests.bidRequest; | |
| var bidResponse = { | |
| requestId: bidRequest.bidId, | |
| cpm: body.cpm || 0, | |
| width: bidRequest.sizes[0][0], | |
| height: bidRequest.sizes[0][1], | |
| creativeId: body.creativeid || '', | |
| dealId: body.dealid || '', | |
| currency: 'JPY', | |
| netRevenue: true, | |
| ttl: body.ttl || 10, | |
| referrer: utils.getTopWindowUrl() | |
| }; | |
| if (bidRequest.mediaTypes && bidRequest.mediaTypes.native) { | |
| bidResponse.native = createNativeAd(body); | |
| bidResponse.mediaType = _mediaTypes.NATIVE; | |
| } else { | |
| // banner | |
| bidResponse.ad = createAd(body, bidRequest); | |
| } | |
| bidResponses.push(bidResponse); | |
| } | |
| return bidResponses; // noAdã¯ç©ºã‚’返㙠| |
| }, | |
| /** | |
| * Register the user sync pixels which should be dropped after the auction. | |
| * | |
| * @param {SyncOptions} syncOptions Which user syncs are allowed? | |
| * @param {ServerResponse[]} serverResponses List of server's responses. | |
| * @return {UserSync[]} The user syncs which should be dropped. | |
| */ | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| var syncs = []; | |
| return syncs; | |
| } | |
| }; | |
| function createAd(body, bidRequest) { | |
| var ad = body.ad; | |
| if (body.vastxml && body.vastxml.length > 0) { | |
| ad = '<body><div id="apvad-' + bidRequest.bidId + '"></div>' + createAPVTag() + insertVASTMethod(bidRequest.bidId, body.vastxml) + '</body>'; | |
| } | |
| ad = appendChildToBody(ad, body.beacon); | |
| if (removeWrapper(ad)) return removeWrapper(ad); | |
| return ad; | |
| } | |
| function createNativeAd(body) { | |
| var native = {}; | |
| if (body.native_ad && body.native_ad.assets.length > 0) { | |
| var assets = body.native_ad.assets; | |
| for (var i = 0, len = assets.length; i < len; i++) { | |
| switch (assets[i].id) { | |
| case 1: | |
| native.title = assets[i].title.text; | |
| break; | |
| case 2: | |
| native.image = { | |
| url: assets[i].img.url, | |
| height: assets[i].img.h, | |
| width: assets[i].img.w | |
| }; | |
| break; | |
| case 3: | |
| native.icon = { | |
| url: assets[i].img.url, | |
| height: assets[i].img.h, | |
| width: assets[i].img.w | |
| }; | |
| break; | |
| case 4: | |
| native.sponsoredBy = assets[i].data.value; | |
| break; | |
| case 5: | |
| native.body = assets[i].data.value; | |
| break; | |
| case 6: | |
| native.cta = assets[i].data.value; | |
| break; | |
| } | |
| } | |
| native.clickUrl = body.native_ad.link.url; | |
| native.clickTrackers = body.native_ad.link.clicktrackers || []; | |
| native.impressionTrackers = body.native_ad.imptrackers || []; | |
| if (body.beaconurl && body.beaconurl != '') { | |
| native.impressionTrackers.push(body.beaconurl); | |
| } | |
| } | |
| return native; | |
| } | |
| function appendChildToBody(ad, data) { | |
| return ad.replace(/<\/\s?body>/, data + '</body>'); | |
| } | |
| function createAPVTag() { | |
| var APVURL = 'https://cdn.apvdr.com/js/VideoAd.min.js'; | |
| var apvScript = document.createElement('script'); | |
| apvScript.type = 'text/javascript'; | |
| apvScript.id = 'apv'; | |
| apvScript.src = APVURL; | |
| return apvScript.outerHTML; | |
| } | |
| function insertVASTMethod(targetId, vastXml) { | |
| var apvVideoAdParam = { | |
| s: targetId | |
| }; | |
| var script = document.createElement('script'); | |
| script.type = 'text/javascript'; | |
| script.innerHTML = '(function(){ new APV.VideoAd(' + JSON.stringify(apvVideoAdParam) + ').load(\'' + vastXml.replace(/\r?\n/g, '') + '\'); })();'; | |
| return script.outerHTML; | |
| } | |
| /** | |
| * | |
| * @param ad | |
| */ | |
| function removeWrapper(ad) { | |
| var bodyIndex = ad.indexOf('<body>'); | |
| var lastBodyIndex = ad.lastIndexOf('</body>'); | |
| if (bodyIndex === -1 || lastBodyIndex === -1) return false; | |
| return ad.substr(bodyIndex, lastBodyIndex).replace('<body>', '').replace('</body>', ''); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 76: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[74]); | |
| pbjsChunk([2],{ | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }), | |
| /***/ 77: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(78); | |
| module.exports = __webpack_require__(79); | |
| /***/ }), | |
| /***/ 78: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.storage = undefined; | |
| 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 _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; }; | |
| exports.getUmtSource = getUmtSource; | |
| exports.ExpiringQueue = ExpiringQueue; | |
| var _AnalyticsAdapter = __webpack_require__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _constants = __webpack_require__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _url = __webpack_require__(12); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _ajax = __webpack_require__(6); | |
| 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 ANALYTICS_VERSION = '1.0.0'; | |
| var DEFAULT_QUEUE_TIMEOUT = 4000; | |
| var DEFAULT_HOST = 'tag.adkernel.com'; | |
| var ADK_HB_EVENTS = { | |
| AUCTION_INIT: 'auctionInit', | |
| BID_REQUEST: 'bidRequested', | |
| BID_RESPONSE: 'bidResponse', | |
| BID_WON: 'bidWon', | |
| AUCTION_END: 'auctionEnd', | |
| TIMEOUT: 'adapterTimedOut' | |
| }; | |
| function buildRequestTemplate(pubId) { | |
| var url = utils.getTopWindowUrl(); | |
| var ref = utils.getTopWindowReferrer(); | |
| var topLocation = utils.getTopWindowLocation(); | |
| return { | |
| ver: ANALYTICS_VERSION, | |
| domain: topLocation.hostname, | |
| path: topLocation.pathname, | |
| accId: pubId, | |
| env: { | |
| screen: { | |
| w: window.screen.width, | |
| h: window.screen.height | |
| }, | |
| lang: navigator.language | |
| }, | |
| src: getUmtSource(url, ref) | |
| }; | |
| } | |
| var analyticsAdapter = _extends((0, _AnalyticsAdapter2['default'])({ analyticsType: 'endpoint' }), { | |
| track: function track(_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| if (!analyticsAdapter.context) { | |
| return; | |
| } | |
| var handler = null; | |
| switch (eventType) { | |
| case _constants2['default'].EVENTS.AUCTION_INIT: | |
| if (analyticsAdapter.context.queue) { | |
| analyticsAdapter.context.queue.init(); | |
| } | |
| handler = trackAuctionInit; | |
| break; | |
| case _constants2['default'].EVENTS.BID_REQUESTED: | |
| handler = trackBidRequest; | |
| break; | |
| case _constants2['default'].EVENTS.BID_RESPONSE: | |
| handler = trackBidResponse; | |
| break; | |
| case _constants2['default'].EVENTS.BID_WON: | |
| handler = trackBidWon; | |
| break; | |
| case _constants2['default'].EVENTS.BID_TIMEOUT: | |
| handler = trackBidTimeout; | |
| break; | |
| case _constants2['default'].EVENTS.AUCTION_END: | |
| handler = trackAuctionEnd; | |
| break; | |
| } | |
| if (handler) { | |
| var events = handler(args); | |
| if (analyticsAdapter.context.queue) { | |
| analyticsAdapter.context.queue.push(events); | |
| } | |
| if (eventType === _constants2['default'].EVENTS.AUCTION_END) { | |
| sendAll(); | |
| } | |
| } | |
| } | |
| }); | |
| analyticsAdapter.context = {}; | |
| analyticsAdapter.originEnableAnalytics = analyticsAdapter.enableAnalytics; | |
| analyticsAdapter.enableAnalytics = function (config) { | |
| if (!config.options.pubId) { | |
| utils.logError('PubId is not defined. Analytics won\'t work'); | |
| return; | |
| } | |
| analyticsAdapter.context = { | |
| host: config.options.host || DEFAULT_HOST, | |
| pubId: config.options.pubId, | |
| requestTemplate: buildRequestTemplate(config.options.pubId), | |
| queue: new ExpiringQueue(sendAll, config.options.queueTimeout || DEFAULT_QUEUE_TIMEOUT) | |
| }; | |
| analyticsAdapter.originEnableAnalytics(config); | |
| }; | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: analyticsAdapter, | |
| code: 'adkernelAdn' | |
| }); | |
| exports['default'] = analyticsAdapter; | |
| function sendAll() { | |
| var events = analyticsAdapter.context.queue.popAll(); | |
| if (events.length !== 0) { | |
| var req = _extends({}, analyticsAdapter.context.requestTemplate, { hb_ev: events }); | |
| (0, _ajax.ajax)('//' + analyticsAdapter.context.host + '/hb-analytics', function () {}, JSON.stringify(req)); | |
| } | |
| } | |
| function trackAuctionInit() { | |
| analyticsAdapter.context.auctionTimeStart = Date.now(); | |
| var event = createHbEvent(undefined, ADK_HB_EVENTS.AUCTION_INIT); | |
| return [event]; | |
| } | |
| function trackBidRequest(args) { | |
| return args.bids.map(function (bid) { | |
| return createHbEvent(args.bidderCode, ADK_HB_EVENTS.BID_REQUEST, bid.placementCode); | |
| }); | |
| } | |
| function trackBidResponse(args) { | |
| var event = createHbEvent(args.bidderCode, ADK_HB_EVENTS.BID_RESPONSE, args.adUnitCode, args.cpm, args.timeToRespond / 1000); | |
| return [event]; | |
| } | |
| function trackBidWon(args) { | |
| var event = createHbEvent(args.bidderCode, ADK_HB_EVENTS.BID_WON, args.adUnitCode, args.cpm); | |
| return [event]; | |
| } | |
| function trackAuctionEnd(args) { | |
| var event = createHbEvent(undefined, ADK_HB_EVENTS.AUCTION_END, undefined, undefined, (Date.now() - analyticsAdapter.context.auctionTimeStart) / 1000); | |
| return [event]; | |
| } | |
| function trackBidTimeout(args) { | |
| return args.map(function (bidderName) { | |
| return createHbEvent(bidderName, ADK_HB_EVENTS.TIMEOUT); | |
| }); | |
| } | |
| function createHbEvent(adapter, event) { | |
| var tagid = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; | |
| var value = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; | |
| var time = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; | |
| var ev = { event: event }; | |
| if (adapter) { | |
| ev.adapter = adapter; | |
| } | |
| if (tagid) { | |
| ev.tagid = tagid; | |
| } | |
| if (value) { | |
| ev.val = value; | |
| } | |
| if (time) { | |
| ev.time = time; | |
| } | |
| return ev; | |
| } | |
| var UTM_TAGS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'utm_c1', 'utm_c2', 'utm_c3', 'utm_c4', 'utm_c5']; | |
| var ADKERNEL_PREBID_KEY = 'adk_dpt_analytics'; | |
| var DIRECT = '(direct)'; | |
| var REFERRAL = '(referral)'; | |
| var ORGANIC = '(organic)'; | |
| var storage = exports.storage = { | |
| getItem: function getItem(name) { | |
| return localStorage.getItem(name); | |
| }, | |
| setItem: function setItem(name, value) { | |
| localStorage.setItem(name, value); | |
| } | |
| }; | |
| function getUmtSource(pageUrl, referrer) { | |
| var prevUtm = getPreviousTrafficSource(); | |
| var currUtm = getCurrentTrafficSource(pageUrl, referrer); | |
| var _chooseActualUtm = chooseActualUtm(prevUtm, currUtm), | |
| _chooseActualUtm2 = _slicedToArray(_chooseActualUtm, 2), | |
| updated = _chooseActualUtm2[0], | |
| actual = _chooseActualUtm2[1]; | |
| if (updated) { | |
| storeUtm(actual); | |
| } | |
| return actual; | |
| function getPreviousTrafficSource() { | |
| var val = storage.getItem(ADKERNEL_PREBID_KEY); | |
| if (!val) { | |
| return getDirect(); | |
| } | |
| return JSON.parse(val); | |
| } | |
| function getCurrentTrafficSource(pageUrl, referrer) { | |
| var source = getUTM(pageUrl); | |
| if (source) { | |
| return source; | |
| } | |
| if (referrer) { | |
| var se = getSearchEngine(referrer); | |
| if (se) { | |
| return asUtm(se, ORGANIC, ORGANIC); | |
| } | |
| var parsedUrl = (0, _url.parse)(pageUrl); | |
| var _getReferrer = getReferrer(referrer), | |
| _getReferrer2 = _slicedToArray(_getReferrer, 2), | |
| refHost = _getReferrer2[0], | |
| refPath = _getReferrer2[1]; | |
| if (refHost && refHost !== parsedUrl.hostname) { | |
| return asUtm(refHost, REFERRAL, REFERRAL, '', refPath); | |
| } | |
| } | |
| return getDirect(); | |
| } | |
| function getSearchEngine(pageUrl) { | |
| var engines = { | |
| 'google': /^https?\:\/\/(?:www\.)?(?:google\.(?:com?\.)?(?:com|cat|[a-z]{2})|g.cn)\//i, | |
| 'yandex': /^https?\:\/\/(?:www\.)?ya(?:ndex\.(?:com|net)?\.?(?:asia|mobi|org|[a-z]{2})?|\.ru)\//i, | |
| 'bing': /^https?\:\/\/(?:www\.)?bing\.com\//i, | |
| 'duckduckgo': /^https?\:\/\/(?:www\.)?duckduckgo\.com\//i, | |
| 'ask': /^https?\:\/\/(?:www\.)?ask\.com\//i, | |
| 'yahoo': /^https?\:\/\/(?:[-a-z]+\.)?(?:search\.)?yahoo\.com\//i | |
| }; | |
| for (var engine in engines) { | |
| if (engines.hasOwnProperty(engine) && engines[engine].test(pageUrl)) { | |
| return engine; | |
| } | |
| } | |
| } | |
| function getReferrer(referrer) { | |
| var ref = (0, _url.parse)(referrer); | |
| return [ref.hostname, ref.pathname]; | |
| } | |
| function getUTM(pageUrl) { | |
| var urlParameters = (0, _url.parse)(pageUrl).search; | |
| if (!urlParameters['utm_campaign'] || !urlParameters['utm_source']) { | |
| return; | |
| } | |
| var utmArgs = []; | |
| utils._each(UTM_TAGS, function (utmTagName) { | |
| var utmValue = urlParameters[utmTagName] || ''; | |
| utmArgs.push(utmValue); | |
| }); | |
| return asUtm.apply(this, utmArgs); | |
| } | |
| function getDirect() { | |
| return asUtm(DIRECT, DIRECT, DIRECT); | |
| } | |
| function storeUtm(utm) { | |
| var val = JSON.stringify(utm); | |
| storage.setItem(ADKERNEL_PREBID_KEY, val); | |
| } | |
| function asUtm(source, medium, campaign) { | |
| var term = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; | |
| var content = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; | |
| var c1 = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ''; | |
| var c2 = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : ''; | |
| var c3 = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : ''; | |
| var c4 = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : ''; | |
| var c5 = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : ''; | |
| var result = { | |
| source: source, | |
| medium: medium, | |
| campaign: campaign | |
| }; | |
| if (term) { | |
| result.term = term; | |
| } | |
| if (content) { | |
| result.content = content; | |
| } | |
| if (c1) { | |
| result.c1 = c1; | |
| } | |
| if (c2) { | |
| result.c2 = c2; | |
| } | |
| if (c3) { | |
| result.c3 = c3; | |
| } | |
| if (c4) { | |
| result.c4 = c4; | |
| } | |
| if (c5) { | |
| result.c5 = c5; | |
| } | |
| return result; | |
| } | |
| function chooseActualUtm(prev, curr) { | |
| if (ord(prev) < ord(curr)) { | |
| return [true, curr]; | |
| }if (ord(prev) > ord(curr)) { | |
| return [false, prev]; | |
| } else { | |
| if (prev.campaign === REFERRAL && prev.content !== curr.content) { | |
| return [true, curr]; | |
| } else if (prev.campaign === ORGANIC && prev.source !== curr.source) { | |
| return [true, curr]; | |
| } else if (isCampaignTraffic(prev) && (prev.campaign !== curr.campaign || prev.source !== curr.source)) { | |
| return [true, curr]; | |
| } | |
| } | |
| return [false, prev]; | |
| } | |
| function ord(utm) { | |
| switch (utm.campaign) { | |
| case DIRECT: | |
| return 0; | |
| case ORGANIC: | |
| return 1; | |
| case REFERRAL: | |
| return 2; | |
| default: | |
| return 3; | |
| } | |
| } | |
| function isCampaignTraffic(utm) { | |
| return [DIRECT, REFERRAL, ORGANIC].indexOf(utm.campaign) === -1; | |
| } | |
| } | |
| /** | |
| * Expiring queue implementation. Fires callback on elapsed timeout since last last update or creation. | |
| * @param callback | |
| * @param ttl | |
| * @constructor | |
| */ | |
| function ExpiringQueue(callback, ttl) { | |
| var queue = []; | |
| var timeoutId = void 0; | |
| this.push = function (event) { | |
| if (event instanceof Array) { | |
| queue.push.apply(queue, event); | |
| } else { | |
| queue.push(event); | |
| } | |
| reset(); | |
| }; | |
| this.popAll = function () { | |
| var result = queue; | |
| queue = []; | |
| reset(); | |
| return result; | |
| }; | |
| /** | |
| * For test/debug purposes only | |
| * @return {Array} | |
| */ | |
| this.peekAll = function () { | |
| return queue; | |
| }; | |
| this.init = reset; | |
| function reset() { | |
| if (timeoutId) { | |
| clearTimeout(timeoutId); | |
| } | |
| timeoutId = setTimeout(function () { | |
| if (queue.length) { | |
| callback(); | |
| } | |
| }, ttl); | |
| } | |
| } | |
| /***/ }), | |
| /***/ 79: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[77]); | |
| pbjsChunk([99],{ | |
| /***/ 80: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(81); | |
| module.exports = __webpack_require__(82); | |
| /***/ }), | |
| /***/ 81: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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 DEFAULT_ADKERNEL_DSP_DOMAIN = 'tag.adkernel.com'; | |
| var VIDEO_TARGETING = ['mimes', 'protocols', 'api']; | |
| var DEFAULT_MIMES = ['video/mp4', 'video/webm', 'application/x-shockwave-flash', 'application/javascript']; | |
| var DEFAULT_PROTOCOLS = [2, 3, 5, 6]; | |
| var DEFAULT_APIS = [1, 2]; | |
| function isRtbDebugEnabled() { | |
| return utils.getTopWindowLocation().href.indexOf('adk_debug=true') !== -1; | |
| } | |
| function buildImp(bidRequest) { | |
| var sizes = bidRequest.sizes; | |
| var imp = { | |
| id: bidRequest.bidId, | |
| tagid: bidRequest.placementCode | |
| }; | |
| if (bidRequest.mediaType === 'video' || utils.deepAccess(bidRequest, 'mediaTypes.video')) { | |
| imp.video = { | |
| w: sizes[0], | |
| h: sizes[1], | |
| mimes: DEFAULT_MIMES, | |
| protocols: DEFAULT_PROTOCOLS, | |
| api: DEFAULT_APIS | |
| }; | |
| if (bidRequest.params.video) { | |
| Object.keys(bidRequest.params.video).filter(function (param) { | |
| return (0, _includes2['default'])(VIDEO_TARGETING, param); | |
| }).forEach(function (param) { | |
| return imp.video[param] = bidRequest.params.video[param]; | |
| }); | |
| } | |
| } else { | |
| imp.banner = { | |
| format: utils.parseSizesInput(bidRequest.sizes) | |
| }; | |
| } | |
| return imp; | |
| } | |
| function buildRequestParams(auctionId, transactionId, tags) { | |
| var loc = utils.getTopWindowLocation(); | |
| return { | |
| id: auctionId, | |
| tid: transactionId, | |
| site: { | |
| page: loc.href, | |
| ref: utils.getTopWindowReferrer(), | |
| secure: ~~(loc.protocol === 'https:') | |
| }, | |
| imp: tags | |
| }; | |
| } | |
| function buildBid(tag) { | |
| var bid = { | |
| requestId: tag.impid, | |
| bidderCode: spec.code, | |
| cpm: tag.bid, | |
| width: tag.w, | |
| height: tag.h, | |
| creativeId: tag.crid, | |
| currency: 'USD', | |
| ttl: 720, | |
| netRevenue: true | |
| }; | |
| if (tag.tag) { | |
| bid.ad = '<!DOCTYPE html><html><head><title></title><body style=\'margin:0px;padding:0px;\'>' + tag.tag + '</body></head>'; | |
| bid.mediaType = _mediaTypes.BANNER; | |
| } else if (tag.vast_url) { | |
| bid.vastUrl = tag.vast_url; | |
| bid.mediaType = _mediaTypes.VIDEO; | |
| } | |
| return bid; | |
| } | |
| var spec = exports.spec = { | |
| code: 'adkernelAdn', | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO], | |
| isBidRequestValid: function isBidRequestValid(bidRequest) { | |
| return 'params' in bidRequest && (typeof bidRequest.params.host === 'undefined' || typeof bidRequest.params.host === 'string') && typeof bidRequest.params.pubId === 'number'; | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var transactionId = void 0; | |
| var auctionId = void 0; | |
| var dispatch = bidRequests.map(buildImp).reduce(function (acc, curr, index) { | |
| var bidRequest = bidRequests[index]; | |
| var pubId = bidRequest.params.pubId; | |
| var host = bidRequest.params.host || DEFAULT_ADKERNEL_DSP_DOMAIN; | |
| acc[host] = acc[host] || {}; | |
| acc[host][pubId] = acc[host][pubId] || []; | |
| acc[host][pubId].push(curr); | |
| transactionId = bidRequest.transactionId; | |
| auctionId = bidRequest.bidderRequestId; | |
| return acc; | |
| }, {}); | |
| var requests = []; | |
| Object.keys(dispatch).forEach(function (host) { | |
| Object.keys(dispatch[host]).forEach(function (pubId) { | |
| var request = buildRequestParams(auctionId, transactionId, dispatch[host][pubId]); | |
| requests.push({ | |
| method: 'POST', | |
| url: '//' + host + '/tag?account=' + pubId + '&pb=1' + (isRtbDebugEnabled() ? '&debug=1' : ''), | |
| data: JSON.stringify(request) | |
| }); | |
| }); | |
| }); | |
| return requests; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| var response = serverResponse.body; | |
| if (!response.tags) { | |
| return []; | |
| } | |
| if (response.debug) { | |
| utils.logInfo('ADKERNEL DEBUG:\n' + response.debug); | |
| } | |
| return response.tags.map(buildBid); | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| if (!syncOptions.iframeEnabled || !serverResponses || serverResponses.length === 0) { | |
| return []; | |
| } | |
| return serverResponses.filter(function (rps) { | |
| return 'syncpages' in rps.body; | |
| }).map(function (rsp) { | |
| return rsp.body.syncpages; | |
| }).reduce(function (a, b) { | |
| return a.concat(b); | |
| }, []).map(function (sync_url) { | |
| return { | |
| type: 'iframe', | |
| url: sync_url | |
| }; | |
| }); | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 82: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[80]); | |
| pbjsChunk([98],{ | |
| /***/ 83: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(84); | |
| module.exports = __webpack_require__(85); | |
| /***/ }), | |
| /***/ 84: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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 VIDEO_TARGETING = ['mimes', 'minduration', 'maxduration', 'protocols', 'startdelay', 'linearity', 'boxingallowed', 'playbackmethod', 'delivery', 'pos', 'api', 'ext']; | |
| var VERSION = '1.1'; | |
| /** | |
| * Adapter for requesting bids from AdKernel white-label display platform | |
| */ | |
| var spec = exports.spec = { | |
| code: 'adkernel', | |
| aliases: ['headbidding'], | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO], | |
| isBidRequestValid: function isBidRequestValid(bidRequest) { | |
| return 'params' in bidRequest && typeof bidRequest.params.host !== 'undefined' && 'zoneId' in bidRequest.params && !isNaN(Number(bidRequest.params.zoneId)); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var auctionId = void 0; | |
| var dispatch = bidRequests.map(buildImp).reduce(function (acc, curr, index) { | |
| var bidRequest = bidRequests[index]; | |
| var zoneId = bidRequest.params.zoneId; | |
| var host = bidRequest.params.host; | |
| acc[host] = acc[host] || {}; | |
| acc[host][zoneId] = acc[host][zoneId] || []; | |
| acc[host][zoneId].push(curr); | |
| auctionId = bidRequest.bidderRequestId; | |
| return acc; | |
| }, {}); | |
| var requests = []; | |
| Object.keys(dispatch).forEach(function (host) { | |
| Object.keys(dispatch[host]).forEach(function (zoneId) { | |
| var request = buildRtbRequest(dispatch[host][zoneId], auctionId); | |
| requests.push({ | |
| method: 'GET', | |
| url: window.location.protocol + '//' + host + '/rtbg', | |
| data: { | |
| zone: Number(zoneId), | |
| ad_type: 'rtb', | |
| v: VERSION, | |
| r: JSON.stringify(request) | |
| } | |
| }); | |
| }); | |
| }); | |
| return requests; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, request) { | |
| var response = serverResponse.body; | |
| if (!response.seatbid) { | |
| return []; | |
| } | |
| var rtbRequest = JSON.parse(request.data.r); | |
| var rtbImps = rtbRequest.imp; | |
| var rtbBids = response.seatbid.map(function (seatbid) { | |
| return seatbid.bid; | |
| }).reduce(function (a, b) { | |
| return a.concat(b); | |
| }, []); | |
| return rtbBids.map(function (rtbBid) { | |
| var imp = (0, _find2['default'])(rtbImps, function (imp) { | |
| return imp.id === rtbBid.impid; | |
| }); | |
| var prBid = { | |
| requestId: rtbBid.impid, | |
| cpm: rtbBid.price, | |
| creativeId: rtbBid.crid, | |
| currency: 'USD', | |
| ttl: 360, | |
| netRevenue: true | |
| }; | |
| if ('banner' in imp) { | |
| prBid.mediaType = _mediaTypes.BANNER; | |
| prBid.width = rtbBid.w; | |
| prBid.height = rtbBid.h; | |
| prBid.ad = formatAdMarkup(rtbBid); | |
| } | |
| if ('video' in imp) { | |
| prBid.mediaType = _mediaTypes.VIDEO; | |
| prBid.vastUrl = rtbBid.nurl; | |
| prBid.width = imp.video.w; | |
| prBid.height = imp.video.h; | |
| } | |
| return prBid; | |
| }); | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| if (!syncOptions.iframeEnabled || !serverResponses || serverResponses.length === 0) { | |
| return []; | |
| } | |
| return serverResponses.filter(function (rsp) { | |
| return rsp.body && rsp.body.ext && rsp.body.ext.adk_usersync; | |
| }).map(function (rsp) { | |
| return rsp.body.ext.adk_usersync; | |
| }).reduce(function (a, b) { | |
| return a.concat(b); | |
| }, []).map(function (sync_url) { | |
| return { type: 'iframe', url: sync_url }; | |
| }); | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /** | |
| * Builds parameters object for single impression | |
| */ | |
| function buildImp(bid) { | |
| var sizes = bid.sizes; | |
| var imp = { | |
| 'id': bid.bidId, | |
| 'tagid': bid.placementCode | |
| }; | |
| if (bid.mediaType === 'video') { | |
| imp.video = { w: sizes[0], h: sizes[1] }; | |
| if (bid.params.video) { | |
| Object.keys(bid.params.video).filter(function (param) { | |
| return (0, _includes2['default'])(VIDEO_TARGETING, param); | |
| }).forEach(function (param) { | |
| return imp.video[param] = bid.params.video[param]; | |
| }); | |
| } | |
| } else { | |
| imp.banner = { | |
| format: sizes.map(function (s) { | |
| return { 'w': s[0], 'h': s[1] }; | |
| }), | |
| topframe: 0 | |
| }; | |
| } | |
| if (utils.getTopWindowLocation().protocol === 'https:') { | |
| imp.secure = 1; | |
| } | |
| return imp; | |
| } | |
| /** | |
| * Builds complete rtb request | |
| * @param imps collection of impressions | |
| * @param auctionId | |
| */ | |
| function buildRtbRequest(imps, auctionId) { | |
| var req = { | |
| 'id': auctionId, | |
| 'imp': imps, | |
| 'site': createSite(), | |
| 'at': 1, | |
| 'device': { | |
| 'ip': 'caller', | |
| 'ua': 'caller', | |
| 'js': 1, | |
| 'language': getLanguage() | |
| }, | |
| 'ext': { | |
| 'adk_usersync': 1 | |
| } | |
| }; | |
| if (utils.getDNT()) { | |
| req.device.dnt = 1; | |
| } | |
| return req; | |
| } | |
| function getLanguage() { | |
| var language = navigator.language ? 'language' : 'userLanguage'; | |
| return navigator[language].split('-')[0]; | |
| } | |
| /** | |
| * Creates site description object | |
| */ | |
| function createSite() { | |
| var location = utils.getTopWindowLocation(); | |
| return { | |
| 'domain': location.hostname, | |
| 'page': location.href.split('?')[0] | |
| }; | |
| } | |
| /** | |
| * Format creative with optional nurl call | |
| * @param bid rtb Bid object | |
| */ | |
| function formatAdMarkup(bid) { | |
| var adm = bid.adm; | |
| if ('nurl' in bid) { | |
| adm += utils.createTrackPixelHtml(bid.nurl + '&px=1'); | |
| } | |
| return '<!DOCTYPE html><html><head><title></title><body style=\'margin:0px;padding:0px;\'>' + adm + '</body></head>'; | |
| } | |
| /***/ }), | |
| /***/ 85: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[83]); | |
| pbjsChunk([97],{ | |
| /***/ 86: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(87); | |
| module.exports = __webpack_require__(88); | |
| /***/ }), | |
| /***/ 87: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'admixer'; | |
| var ENDPOINT_URL = '//inv-nets.admixer.net/prebid.1.0.aspx'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: [], | |
| supportedMediaTypes: ['banner', 'video'], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.zone; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {bidderRequest} - bidderRequest.bids[] is an array of AdUnits and bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidderRequest) { | |
| var payload = { | |
| imps: [], | |
| referrer: utils.getTopWindowUrl() | |
| }; | |
| bidderRequest.forEach(function (bid) { | |
| if (bid.bidder === BIDDER_CODE) { | |
| payload.imps.push(bid); | |
| } | |
| }); | |
| var payloadString = JSON.stringify(payload); | |
| return { | |
| method: 'GET', | |
| url: ENDPOINT_URL, | |
| data: 'data=' + payloadString | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| // loop through serverResponses { | |
| try { | |
| serverResponse = serverResponse.body; | |
| serverResponse.forEach(function (bidResponse) { | |
| var bidResp = { | |
| requestId: bidResponse.bidId, | |
| cpm: bidResponse.cpm, | |
| width: bidResponse.width, | |
| height: bidResponse.height, | |
| ad: bidResponse.ad, | |
| ttl: bidResponse.ttl, | |
| creativeId: bidResponse.creativeId, | |
| netRevenue: bidResponse.netRevenue, | |
| currency: bidResponse.currency, | |
| vastUrl: bidResponse.vastUrl | |
| }; | |
| bidResponses.push(bidResp); | |
| }); | |
| } catch (e) { | |
| utils.logError(e); | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 88: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[86]); | |
| pbjsChunk([96],{ | |
| /***/ 89: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(90); | |
| module.exports = __webpack_require__(91); | |
| /***/ }), | |
| /***/ 90: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'adocean'; | |
| function buildEndpointUrl(emiter, payload) { | |
| var payloadString = ''; | |
| utils._each(payload, function (v, k) { | |
| if (payloadString.length) { | |
| payloadString += '&'; | |
| } | |
| payloadString += k + '=' + encodeURIComponent(v); | |
| }); | |
| return 'https://' + emiter + '/ad.json?' + payloadString; | |
| } | |
| function buildRequest(masterBidRequests, masterId) { | |
| var firstBid = masterBidRequests[0]; | |
| var payload = { | |
| id: masterId | |
| }; | |
| var bidIdMap = {}; | |
| utils._each(masterBidRequests, function (v) { | |
| bidIdMap[v.params.slaveId] = v.bidId; | |
| }); | |
| return { | |
| method: 'GET', | |
| url: buildEndpointUrl(firstBid.params.emiter, payload), | |
| data: {}, | |
| bidIdMap: bidIdMap | |
| }; | |
| } | |
| function assignToMaster(bidRequest, bidRequestsByMaster) { | |
| var masterId = bidRequest.params.masterId; | |
| bidRequestsByMaster[masterId] = bidRequestsByMaster[masterId] || []; | |
| bidRequestsByMaster[masterId].push(bidRequest); | |
| } | |
| function _interpretResponse(placementResponse, bidRequest, bids) { | |
| if (!placementResponse.error) { | |
| var adCode = '<script type="application/javascript">(function(){var wu="' + (placementResponse.winUrl || '') + '",su="' + (placementResponse.statsUrl || '') + '".replace(/\\[TIMESTAMP\\]/,(new Date()).getTime());'; | |
| adCode += 'if(navigator.sendBeacon){if(wu){navigator.sendBeacon(wu)||((new Image(1,1)).src=wu)};if(su){navigator.sendBeacon(su)||((new Image(1,1)).src=su)}}'; | |
| adCode += 'else{if(wu){(new Image(1,1)).src=wu;}if(su){(new Image(1,1)).src=su;}}'; | |
| adCode += '})();<\/script>'; | |
| adCode += decodeURIComponent(placementResponse.code); | |
| var bid = { | |
| ad: adCode, | |
| cpm: parseFloat(placementResponse.price), | |
| currency: placementResponse.currency, | |
| height: parseInt(placementResponse.height, 10), | |
| requestId: bidRequest.bidIdMap[placementResponse.id], | |
| width: parseInt(placementResponse.width, 10), | |
| netRevenue: false, | |
| ttl: parseInt(placementResponse.ttl), | |
| creativeId: placementResponse.crid | |
| }; | |
| bids.push(bid); | |
| } | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.slaveId && bid.params.masterId && bid.params.emiter); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var bidRequestsByMaster = {}; | |
| var requests = []; | |
| utils._each(validBidRequests, function (v) { | |
| assignToMaster(v, bidRequestsByMaster); | |
| }); | |
| requests = utils._map(bidRequestsByMaster, function (v, k) { | |
| return buildRequest(v, k); | |
| }); | |
| return requests; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bids = []; | |
| if (utils.isArray(serverResponse.body)) { | |
| utils._each(serverResponse.body, function (placementResponse) { | |
| _interpretResponse(placementResponse, bidRequest, bids); | |
| }); | |
| } | |
| return bids; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 91: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[89]); | |
| pbjsChunk([95],{ | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }), | |
| /***/ 92: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(93); | |
| /***/ }), | |
| /***/ 93: | |
| /***/ (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 _AnalyticsAdapter = __webpack_require__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _constants = __webpack_require__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _utils = __webpack_require__(0); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| var _findIndex = __webpack_require__(21); | |
| var _findIndex2 = _interopRequireDefault(_findIndex); | |
| 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; } | |
| 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); } } | |
| // Events used in adomik analytics adapter | |
| var auctionInit = _constants2['default'].EVENTS.AUCTION_INIT; | |
| var auctionEnd = _constants2['default'].EVENTS.AUCTION_END; | |
| var bidRequested = _constants2['default'].EVENTS.BID_REQUESTED; | |
| var bidResponse = _constants2['default'].EVENTS.BID_RESPONSE; | |
| var bidWon = _constants2['default'].EVENTS.BID_WON; | |
| var bidTimeout = _constants2['default'].EVENTS.BID_TIMEOUT; | |
| var adomikAdapter = _extends((0, _AnalyticsAdapter2['default'])({}), { | |
| // Track every event needed | |
| track: function track(_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| switch (eventType) { | |
| case auctionInit: | |
| adomikAdapter.initializeBucketEvents(); | |
| adomikAdapter.currentContext.id = args.auctionId; | |
| break; | |
| case bidTimeout: | |
| adomikAdapter.currentContext.timeouted = true; | |
| break; | |
| case bidResponse: | |
| adomikAdapter.bucketEvents.push({ | |
| type: 'response', | |
| event: adomikAdapter.buildBidResponse(args) | |
| }); | |
| break; | |
| case bidWon: | |
| adomikAdapter.sendWonEvent({ | |
| id: args.adId, | |
| placementCode: args.adUnitCode | |
| }); | |
| break; | |
| case bidRequested: | |
| args.bids.forEach(function (bid) { | |
| adomikAdapter.bucketEvents.push({ | |
| type: 'request', | |
| event: { | |
| bidder: bid.bidder.toUpperCase(), | |
| placementCode: bid.placementCode | |
| } | |
| }); | |
| }); | |
| break; | |
| case auctionEnd: | |
| if (adomikAdapter.bucketEvents.length > 0) { | |
| adomikAdapter.sendTypedEvent(); | |
| } | |
| break; | |
| } | |
| } | |
| }); | |
| adomikAdapter.initializeBucketEvents = function () { | |
| adomikAdapter.bucketEvents = []; | |
| }; | |
| adomikAdapter.sendTypedEvent = function () { | |
| var groupedTypedEvents = adomikAdapter.buildTypedEvents(); | |
| var bulkEvents = { | |
| uid: adomikAdapter.currentContext.uid, | |
| ahbaid: adomikAdapter.currentContext.id, | |
| hostname: window.location.hostname, | |
| eventsByPlacementCode: groupedTypedEvents.map(function (typedEventsByType) { | |
| var sizes = []; | |
| var eventKeys = ['request', 'response', 'winner']; | |
| var events = {}; | |
| eventKeys.forEach(function (eventKey) { | |
| events[eventKey + 's'] = []; | |
| if (typedEventsByType[eventKey] !== undefined) { | |
| typedEventsByType[eventKey].forEach(function (typedEvent) { | |
| if (typedEvent.event.size !== undefined) { | |
| var size = adomikAdapter.sizeUtils.handleSize(sizes, typedEvent.event.size); | |
| if (size !== null) { | |
| sizes = [].concat(_toConsumableArray(sizes), [size]); | |
| } | |
| } | |
| events[eventKey + 's'] = [].concat(_toConsumableArray(events[eventKey + 's']), [typedEvent.event]); | |
| }); | |
| } | |
| }); | |
| return { | |
| placementCode: typedEventsByType.placementCode, | |
| sizes: sizes, | |
| events: events | |
| }; | |
| }) | |
| }; | |
| var stringBulkEvents = JSON.stringify(bulkEvents); | |
| (0, _utils.logInfo)('Events sent to adomik prebid analytic ' + stringBulkEvents); | |
| // Encode object in base64 | |
| var encodedBuf = window.btoa(stringBulkEvents); | |
| // Create final url and split it in 1600 characters max (+endpoint length) | |
| var encodedUri = encodeURIComponent(encodedBuf); | |
| var splittedUrl = encodedUri.match(/.{1,1600}/g); | |
| splittedUrl.forEach(function (split, i) { | |
| var partUrl = split + '&id=' + adomikAdapter.currentContext.id + '&part=' + i + '&on=' + (splittedUrl.length - 1); | |
| var img = new Image(1, 1); | |
| img.src = 'https://' + adomikAdapter.currentContext.url + '/?q=' + partUrl; | |
| }); | |
| }; | |
| adomikAdapter.sendWonEvent = function (wonEvent) { | |
| var stringWonEvent = JSON.stringify(wonEvent); | |
| (0, _utils.logInfo)('Won event sent to adomik prebid analytic ' + wonEvent); | |
| // Encode object in base64 | |
| var encodedBuf = window.btoa(stringWonEvent); | |
| var encodedUri = encodeURIComponent(encodedBuf); | |
| var img = new Image(1, 1); | |
| img.src = 'https://' + adomikAdapter.currentContext.url + '/?q=' + encodedUri + '&id=' + adomikAdapter.currentContext.id + '&won=true'; | |
| }; | |
| adomikAdapter.buildBidResponse = function (bid) { | |
| return { | |
| bidder: bid.bidderCode.toUpperCase(), | |
| placementCode: bid.adUnitCode, | |
| id: bid.adId, | |
| status: bid.statusMessage === 'Bid available' ? 'VALID' : 'EMPTY_OR_ERROR', | |
| cpm: parseFloat(bid.cpm), | |
| size: { | |
| width: Number(bid.width), | |
| height: Number(bid.height) | |
| }, | |
| timeToRespond: bid.timeToRespond, | |
| afterTimeout: adomikAdapter.currentContext.timeouted | |
| }; | |
| }; | |
| adomikAdapter.sizeUtils = { | |
| sizeAlreadyExists: function sizeAlreadyExists(sizes, typedEventSize) { | |
| return (0, _find2['default'])(sizes, function (size) { | |
| return size.height === typedEventSize.height && size.width === typedEventSize.width; | |
| }); | |
| }, | |
| formatSize: function formatSize(typedEventSize) { | |
| return { | |
| width: Number(typedEventSize.width), | |
| height: Number(typedEventSize.height) | |
| }; | |
| }, | |
| handleSize: function handleSize(sizes, typedEventSize) { | |
| var formattedSize = null; | |
| if (adomikAdapter.sizeUtils.sizeAlreadyExists(sizes, typedEventSize) === undefined) { | |
| formattedSize = adomikAdapter.sizeUtils.formatSize(typedEventSize); | |
| } | |
| return formattedSize; | |
| } | |
| }; | |
| adomikAdapter.buildTypedEvents = function () { | |
| var groupedTypedEvents = []; | |
| adomikAdapter.bucketEvents.forEach(function (typedEvent, i) { | |
| var _ref2 = [typedEvent.event.placementCode, typedEvent.type], | |
| placementCode = _ref2[0], | |
| type = _ref2[1]; | |
| var existTypedEvent = (0, _findIndex2['default'])(groupedTypedEvents, function (groupedTypedEvent) { | |
| return groupedTypedEvent.placementCode === placementCode; | |
| }); | |
| if (existTypedEvent === -1) { | |
| groupedTypedEvents.push(_defineProperty({ | |
| placementCode: placementCode | |
| }, type, [typedEvent])); | |
| existTypedEvent = groupedTypedEvents.length - 1; | |
| } | |
| if (groupedTypedEvents[existTypedEvent][type]) { | |
| groupedTypedEvents[existTypedEvent][type] = [].concat(_toConsumableArray(groupedTypedEvents[existTypedEvent][type]), [typedEvent]); | |
| } else { | |
| groupedTypedEvents[existTypedEvent][type] = [typedEvent]; | |
| } | |
| }); | |
| return groupedTypedEvents; | |
| }; | |
| adomikAdapter.adapterEnableAnalytics = adomikAdapter.enableAnalytics; | |
| adomikAdapter.enableAnalytics = function (config) { | |
| adomikAdapter.currentContext = {}; | |
| var initOptions = config.options; | |
| if (initOptions) { | |
| adomikAdapter.currentContext = { | |
| uid: initOptions.id, | |
| url: initOptions.url, | |
| id: '', | |
| timeouted: false | |
| }; | |
| (0, _utils.logInfo)('Adomik Analytics enabled with config', initOptions); | |
| adomikAdapter.adapterEnableAnalytics(config); | |
| } | |
| }; | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: adomikAdapter, | |
| code: 'adomik' | |
| }); | |
| exports['default'] = adomikAdapter; | |
| /***/ }) | |
| },[92]); | |
| pbjsChunk([94],{ | |
| /***/ 95: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(96); | |
| module.exports = __webpack_require__(97); | |
| /***/ }), | |
| /***/ 96: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _Renderer = __webpack_require__(16); | |
| var _findIndex = __webpack_require__(21); | |
| var _findIndex2 = _interopRequireDefault(_findIndex); | |
| 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 _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 URL = '//hb.adtelligent.com/auction/'; | |
| var OUTSTREAM_SRC = '//player.adtelligent.com/outstream-unit/2.01/outstream.min.js'; | |
| var BIDDER_CODE = 'adtelligent'; | |
| var OUTSTREAM = 'outstream'; | |
| var DISPLAY = 'display'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.VIDEO, _mediaTypes.BANNER], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return bid && bid.params && bid.params.aid; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests | |
| * @param bidRequests | |
| * @param bidderRequest | |
| */ | |
| buildRequests: function buildRequests(bidRequests, bidderRequest) { | |
| return { | |
| data: bidToTag(bidRequests), | |
| bidderRequest: bidderRequest, | |
| method: 'GET', | |
| url: URL | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids | |
| * @param serverResponse | |
| * @param bidderRequest | |
| * @return {Bid[]} An array of bids which were nested inside the server | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, _ref) { | |
| var bidderRequest = _ref.bidderRequest; | |
| serverResponse = serverResponse.body; | |
| var bids = []; | |
| if (!utils.isArray(serverResponse)) { | |
| return parseRTBResponse(serverResponse, bidderRequest); | |
| } | |
| serverResponse.forEach(function (serverBidResponse) { | |
| bids = utils.flatten(bids, parseRTBResponse(serverBidResponse, bidderRequest)); | |
| }); | |
| return bids; | |
| } | |
| }; | |
| function parseRTBResponse(serverResponse, bidderRequest) { | |
| var isInvalidValidResp = !serverResponse || !serverResponse.bids || !serverResponse.bids.length; | |
| var bids = []; | |
| if (isInvalidValidResp) { | |
| var extMessage = serverResponse && serverResponse.ext && serverResponse.ext.message ? ': ' + serverResponse.ext.message : ''; | |
| var errorMessage = 'in response for ' + bidderRequest.bidderCode + ' adapter ' + extMessage; | |
| utils.logError(errorMessage); | |
| return bids; | |
| } | |
| serverResponse.bids.forEach(function (serverBid) { | |
| var requestId = (0, _findIndex2['default'])(bidderRequest.bids, function (bidRequest) { | |
| return bidRequest.bidId === serverBid.requestId; | |
| }); | |
| if (serverBid.cpm !== 0 && requestId !== -1) { | |
| var bid = createBid(serverBid, getMediaType(bidderRequest.bids[requestId])); | |
| bids.push(bid); | |
| } | |
| }); | |
| return bids; | |
| } | |
| function bidToTag(bidRequests) { | |
| var tag = { | |
| domain: utils.getTopWindowLocation().hostname | |
| }; | |
| for (var i = 0, length = bidRequests.length; i < length; i++) { | |
| _extends(tag, prepareRTBRequestParams(i, bidRequests[i])); | |
| } | |
| return tag; | |
| } | |
| /** | |
| * Parse mediaType | |
| * @param _index {number} | |
| * @param bid {object} | |
| * @returns {object} | |
| */ | |
| function prepareRTBRequestParams(_index, bid) { | |
| var _ref2; | |
| var mediaType = utils.deepAccess(bid, 'mediaTypes.video') ? _mediaTypes.VIDEO : DISPLAY; | |
| var index = !_index ? '' : '' + (_index + 1); | |
| return _ref2 = {}, _defineProperty(_ref2, 'callbackId' + index, bid.bidId), _defineProperty(_ref2, 'aid' + index, bid.params.aid), _defineProperty(_ref2, 'ad_type' + index, mediaType), _defineProperty(_ref2, 'sizes' + index, utils.parseSizesInput(bid.sizes).join()), _ref2; | |
| } | |
| /** | |
| * Prepare all parameters for request | |
| * @param bidderRequest {object} | |
| * @returns {object} | |
| */ | |
| function getMediaType(bidderRequest) { | |
| var videoMediaType = utils.deepAccess(bidderRequest, 'mediaTypes.video'); | |
| var context = utils.deepAccess(bidderRequest, 'mediaTypes.video.context'); | |
| return !videoMediaType ? DISPLAY : context === OUTSTREAM ? OUTSTREAM : _mediaTypes.VIDEO; | |
| } | |
| /** | |
| * Configure new bid by response | |
| * @param bidResponse {object} | |
| * @param mediaType {Object} | |
| * @returns {object} | |
| */ | |
| function createBid(bidResponse, mediaType) { | |
| var bid = { | |
| requestId: bidResponse.requestId, | |
| creativeId: bidResponse.cmpId, | |
| height: bidResponse.height, | |
| currency: bidResponse.cur, | |
| width: bidResponse.width, | |
| cpm: bidResponse.cpm, | |
| netRevenue: true, | |
| mediaType: mediaType, | |
| ttl: 3600 | |
| }; | |
| if (mediaType === DISPLAY) { | |
| return _extends(bid, { | |
| ad: bidResponse.ad | |
| }); | |
| } | |
| _extends(bid, { | |
| vastUrl: bidResponse.vastUrl | |
| }); | |
| if (mediaType === OUTSTREAM) { | |
| _extends(bid, { | |
| mediaType: 'video', | |
| adResponse: bidResponse, | |
| renderer: newRenderer(bidResponse.requestId) | |
| }); | |
| } | |
| return bid; | |
| } | |
| /** | |
| * Create Adtelligent renderer | |
| * @param requestId | |
| * @returns {*} | |
| */ | |
| function newRenderer(requestId) { | |
| var renderer = _Renderer.Renderer.install({ | |
| id: requestId, | |
| url: OUTSTREAM_SRC, | |
| loaded: false | |
| }); | |
| renderer.setRender(outstreamRender); | |
| return renderer; | |
| } | |
| /** | |
| * Initialise Adtelligent outstream | |
| * @param bid | |
| */ | |
| function outstreamRender(bid) { | |
| bid.renderer.push(function () { | |
| window.VOutstreamAPI.initOutstreams([{ | |
| width: bid.width, | |
| height: bid.height, | |
| vastUrl: bid.vastUrl, | |
| elId: bid.adUnitCode | |
| }]); | |
| }); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 97: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[95]); | |
| pbjsChunk([93],{ | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }), | |
| /***/ 98: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(99); | |
| /***/ }), | |
| /***/ 99: | |
| /***/ (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__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _constants = __webpack_require__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _url = __webpack_require__(12); | |
| var url = _interopRequireWildcard(_url); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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 emptyUrl = ''; | |
| var analyticsType = 'endpoint'; | |
| var adxcgAnalyticsVersion = 'v1.05'; | |
| var initOptions = void 0; | |
| var auctionTimestamp = void 0; | |
| var events = { | |
| bidRequests: [], | |
| bidResponses: [] | |
| }; | |
| var adxcgAnalyticsAdapter = _extends((0, _AnalyticsAdapter2['default'])({ | |
| emptyUrl: emptyUrl, | |
| analyticsType: analyticsType | |
| }), { | |
| track: function track(_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| if (typeof args !== 'undefined') { | |
| if (eventType === _constants2['default'].EVENTS.BID_TIMEOUT) { | |
| events.bidTimeout = args.map(function (item) { | |
| return item.bidder; | |
| }).filter(utils.uniques); | |
| } else if (eventType === _constants2['default'].EVENTS.AUCTION_INIT) { | |
| events.auctionInit = args; | |
| auctionTimestamp = args.timestamp; | |
| } else if (eventType === _constants2['default'].EVENTS.BID_REQUESTED) { | |
| events.bidRequests.push(args); | |
| } else if (eventType === _constants2['default'].EVENTS.BID_RESPONSE) { | |
| events.bidResponses.push(mapBidResponse(args)); | |
| } else if (eventType === _constants2['default'].EVENTS.BID_WON) { | |
| send({ | |
| bidWon: mapBidResponse(args) | |
| }); | |
| } | |
| } | |
| if (eventType === _constants2['default'].EVENTS.AUCTION_END) { | |
| send(events); | |
| } | |
| } | |
| }); | |
| function mapBidResponse(bidResponse) { | |
| return { | |
| adUnitCode: bidResponse.adUnitCode, | |
| statusMessage: bidResponse.statusMessage, | |
| bidderCode: bidResponse.bidderCode, | |
| adId: bidResponse.adId, | |
| mediaType: bidResponse.mediaType, | |
| creative_id: bidResponse.creative_id, | |
| width: bidResponse.width, | |
| height: bidResponse.height, | |
| cpm: bidResponse.cpm, | |
| timeToRespond: bidResponse.timeToRespond | |
| }; | |
| } | |
| function send(data) { | |
| data.initOptions = initOptions; | |
| data.auctionTimestamp = auctionTimestamp; | |
| var location = utils.getTopWindowLocation(); | |
| var secure = location.protocol == 'https:'; | |
| var adxcgAnalyticsRequestUrl = url.format({ | |
| protocol: secure ? 'https' : 'http', | |
| hostname: secure ? 'hbarxs.adxcg.net' : 'hbarx.adxcg.net', | |
| pathname: '/pbrx', | |
| search: { | |
| auctionTimestamp: auctionTimestamp, | |
| adxcgAnalyticsVersion: adxcgAnalyticsVersion, | |
| prebidVersion: pbjs.version | |
| } | |
| }); | |
| (0, _ajax.ajax)(adxcgAnalyticsRequestUrl, undefined, JSON.stringify(data), { method: 'POST' }); | |
| } | |
| adxcgAnalyticsAdapter.originEnableAnalytics = adxcgAnalyticsAdapter.enableAnalytics; | |
| adxcgAnalyticsAdapter.enableAnalytics = function (config) { | |
| initOptions = config.options; | |
| adxcgAnalyticsAdapter.originEnableAnalytics(config); | |
| }; | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: adxcgAnalyticsAdapter, | |
| code: 'adxcg' | |
| }); | |
| exports['default'] = adxcgAnalyticsAdapter; | |
| /***/ }) | |
| },[98]); | |
| pbjsChunk([92],{ | |
| /***/ 100: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(101); | |
| module.exports = __webpack_require__(102); | |
| /***/ }), | |
| /***/ 101: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _url = __webpack_require__(12); | |
| var url = _interopRequireWildcard(_url); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __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; } } | |
| /** | |
| * Adapter for requesting bids from adxcg.net | |
| * updated to latest prebid repo on 2017.10.20 | |
| */ | |
| var BIDDER_CODE = 'adxcg'; | |
| var SUPPORTED_AD_TYPES = [_mediaTypes.BANNER, _mediaTypes.VIDEO, _mediaTypes.NATIVE]; | |
| var SOURCE = 'pbjs10'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: SUPPORTED_AD_TYPES, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.adzoneid; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * an array of validBidRequests | |
| * Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests, bidderRequest) { | |
| utils.logMessage('buildRequests: ' + JSON.stringify(validBidRequests)); | |
| var adZoneIds = []; | |
| var prebidBidIds = []; | |
| var sizes = []; | |
| validBidRequests.forEach(function (bid) { | |
| adZoneIds.push(utils.getBidIdParameter('adzoneid', bid.params)); | |
| prebidBidIds.push(bid.bidId); | |
| sizes.push(utils.parseSizesInput(bid.sizes).join('|')); | |
| }); | |
| var location = utils.getTopWindowLocation(); | |
| var secure = location.protocol === 'https:'; | |
| var requestUrl = url.parse(location.href); | |
| requestUrl.search = null; | |
| requestUrl.hash = null; | |
| var adxcgRequestUrl = url.format({ | |
| protocol: secure ? 'https' : 'http', | |
| hostname: secure ? 'hbps.adxcg.net' : 'hbp.adxcg.net', | |
| pathname: '/get/adi', | |
| search: { | |
| renderformat: 'javascript', | |
| ver: 'r20171102PB10', | |
| adzoneid: adZoneIds.join(','), | |
| format: sizes.join(','), | |
| prebidBidIds: prebidBidIds.join(','), | |
| url: encodeURIComponent(url.format(requestUrl)), | |
| secure: secure ? '1' : '0', | |
| source: SOURCE, | |
| pbjs: '1.7.0-pre' | |
| } | |
| }); | |
| return { | |
| method: 'GET', | |
| url: adxcgRequestUrl | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {bidRequests[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequests) { | |
| var bids = []; | |
| serverResponse = serverResponse.body; | |
| if (serverResponse) { | |
| serverResponse.forEach(function (serverResponseOneItem) { | |
| var bid = {}; | |
| bid.requestId = serverResponseOneItem.bidId; | |
| bid.cpm = serverResponseOneItem.cpm; | |
| bid.creativeId = parseInt(serverResponseOneItem.creativeId); | |
| bid.currency = serverResponseOneItem.currency ? serverResponseOneItem.currency : 'USD'; | |
| bid.netRevenue = serverResponseOneItem.netRevenue ? serverResponseOneItem.netRevenue : true; | |
| bid.ttl = serverResponseOneItem.ttl ? serverResponseOneItem.ttl : 300; | |
| if (serverResponseOneItem.deal_id != null && serverResponseOneItem.deal_id.trim().length > 0) { | |
| bid.dealId = serverResponseOneItem.deal_id; | |
| } | |
| if (serverResponseOneItem.ad) { | |
| bid.ad = serverResponseOneItem.ad; | |
| } else if (serverResponseOneItem.vastUrl) { | |
| bid.vastUrl = serverResponseOneItem.vastUrl; | |
| bid.mediaType = 'video'; | |
| } else if (serverResponseOneItem.nativeResponse) { | |
| bid.mediaType = 'native'; | |
| var nativeResponse = serverResponseOneItem.nativeResponse; | |
| bid['native'] = { | |
| clickUrl: encodeURIComponent(nativeResponse.link.url), | |
| impressionTrackers: nativeResponse.imptrackers | |
| }; | |
| nativeResponse.assets.forEach(function (asset) { | |
| if (asset.title && asset.title.text) { | |
| bid['native'].title = asset.title.text; | |
| } | |
| if (asset.img && asset.img.url) { | |
| bid['native'].image = asset.img.url; | |
| } | |
| if (asset.data && asset.data.label === 'DESC' && asset.data.value) { | |
| bid['native'].body = asset.data.value; | |
| } | |
| if (asset.data && asset.data.label === 'SPONSORED' && asset.data.value) { | |
| bid['native'].sponsoredBy = asset.data.value; | |
| } | |
| }); | |
| } | |
| bid.width = serverResponseOneItem.width; | |
| bid.height = serverResponseOneItem.height; | |
| utils.logMessage('submitting bid[' + serverResponseOneItem.bidId + ']: ' + JSON.stringify(bid)); | |
| bids.push(bid); | |
| }); | |
| } else { | |
| utils.logMessage('empty bid response'); | |
| } | |
| return bids; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: '//cdn.adxcg.net/pb-sync.html' | |
| }]; | |
| } | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 102: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[100]); | |
| pbjsChunk([91],{ | |
| /***/ 103: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(104); | |
| module.exports = __webpack_require__(105); | |
| /***/ }), | |
| /***/ 104: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _url = __webpack_require__(12); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| 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; } } | |
| // import { config } from 'src/config'; | |
| var VERSION = '1.0'; | |
| var BIDDER_CODE = 'adyoulike'; | |
| var DEFAULT_DC = 'hb-api'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['ayl'], // short code | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| var sizes = getSize(bid.sizes); | |
| if (!bid.params || !bid.params.placement || !sizes.width || !sizes.height) { | |
| return false; | |
| } | |
| return true; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {bidderRequest} - bidderRequest.bids[] is an array of AdUnits and bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidderRequest) { | |
| var dcHostname = getHostname(bidderRequest); | |
| var payload = { | |
| Version: VERSION, | |
| Bids: bidderRequest.reduce(function (accumulator, bid) { | |
| var size = getSize(bid.sizes); | |
| accumulator[bid.bidId] = {}; | |
| accumulator[bid.bidId].PlacementID = bid.params.placement; | |
| accumulator[bid.bidId].TransactionID = bid.transactionId; | |
| accumulator[bid.bidId].Width = size.width; | |
| accumulator[bid.bidId].Height = size.height; | |
| return accumulator; | |
| }, {}), | |
| PageRefreshed: getPageRefreshed() | |
| }; | |
| var data = JSON.stringify(payload); | |
| var options = { | |
| withCredentials: false | |
| }; | |
| return { | |
| method: 'POST', | |
| url: createEndpoint(dcHostname), | |
| data: data, | |
| options: options | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| // For this adapter, serverResponse is a list | |
| serverResponse.body.forEach(function (response) { | |
| var bid = createBid(response); | |
| if (bid) { | |
| bidResponses.push(bid); | |
| } | |
| }); | |
| return bidResponses; | |
| } | |
| /* Get hostname from bids */ | |
| };function getHostname(bidderRequest) { | |
| var dcHostname = (0, _find2['default'])(bidderRequest, function (bid) { | |
| return bid.params.DC; | |
| }); | |
| if (dcHostname) { | |
| return '-' + dcHostname.params.DC; | |
| } | |
| return ''; | |
| } | |
| /* 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 information on page refresh */ | |
| function getPageRefreshed() { | |
| try { | |
| if (performance && performance.navigation) { | |
| return performance.navigation.type === performance.navigation.TYPE_RELOAD; | |
| } | |
| } catch (e) {} | |
| return false; | |
| } | |
| /* Create endpoint url */ | |
| function createEndpoint(host) { | |
| return (0, _url.format)({ | |
| protocol: document.location.protocol === 'https:' ? 'https' : 'http', | |
| host: '' + DEFAULT_DC + host + '.omnitagjs.com', | |
| pathname: '/hb-api/prebid/v1', | |
| 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; | |
| } | |
| /* 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(response) { | |
| if (!response || !response.Ad) { | |
| return; | |
| } | |
| return { | |
| requestId: response.BidID, | |
| bidderCode: spec.code, | |
| width: response.Width, | |
| height: response.Height, | |
| ad: response.Ad, | |
| ttl: 3600, | |
| creativeId: response.CreativeID, | |
| cpm: response.Price, | |
| netRevenue: true, | |
| currency: 'USD' | |
| }; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 105: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[103]); | |
| pbjsChunk([90],{ | |
| /***/ 106: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(107); | |
| module.exports = __webpack_require__(108); | |
| /***/ }), | |
| /***/ 107: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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=', '']), | |
| _templateObject2 = _taggedTemplateLiteral(['//', '/bidRequest?'], ['//', '/bidRequest?']), | |
| _templateObject3 = _taggedTemplateLiteral(['dcn=', '&pos=', '&cmd=bid', ''], ['dcn=', '&pos=', '&cmd=bid', '']); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| var _constants = __webpack_require__(3); | |
| 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 _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } | |
| var AOL_BIDDERS_CODES = { | |
| AOL: 'aol', | |
| ONEMOBILE: 'onemobile', | |
| ONEDISPLAY: 'onedisplay' | |
| }; | |
| var AOL_ENDPOINTS = { | |
| DISPLAY: { | |
| GET: 'display-get' | |
| }, | |
| MOBILE: { | |
| GET: 'mobile-get', | |
| POST: 'mobile-post' | |
| } | |
| }; | |
| var SYNC_TYPES = { | |
| IFRAME: { | |
| TAG: 'iframe', | |
| TYPE: 'iframe' | |
| }, | |
| IMAGE: { | |
| TAG: 'img', | |
| TYPE: 'image' | |
| } | |
| }; | |
| var pubapiTemplate = template(_templateObject, 'host', 'network', 'placement', 'pageid', 'sizeid', 'alias', 'bidfloor', 'keyValues', 'misc'); | |
| var nexageBaseApiTemplate = template(_templateObject2, 'host'); | |
| var nexageGetApiTemplate = template(_templateObject3, 'dcn', 'pos', 'ext'); | |
| var MP_SERVER_MAP = { | |
| us: 'adserver-us.adtech.advertising.com', | |
| eu: 'adserver-eu.adtech.advertising.com', | |
| as: 'adserver-as.adtech.advertising.com' | |
| }; | |
| var NEXAGE_SERVER = 'hb.nexage.com'; | |
| var ONE_DISPLAY_TTL = 60; | |
| var ONE_MOBILE_TTL = 3600; | |
| pbjs.aolGlobals = { | |
| pixelsDropped: false | |
| }; | |
| var showCpmAdjustmentWarning = function () { | |
| var showCpmWarning = true; | |
| return function () { | |
| var bidderSettings = pbjs.bidderSettings; | |
| if (showCpmWarning && bidderSettings && bidderSettings.aol && typeof bidderSettings.aol.bidCpmAdjustment === 'function') { | |
| utils.logWarn('bidCpmAdjustment is active for the AOL adapter. ' + 'As of Prebid 0.14, AOL can bid in net – please contact your accounts team to enable.'); | |
| showCpmWarning = false; // warning is shown at most once | |
| } | |
| }; | |
| }(); | |
| function isInteger(value) { | |
| return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; | |
| } | |
| function template(strings) { | |
| for (var _len = arguments.length, keys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | |
| keys[_key - 1] = arguments[_key]; | |
| } | |
| return function () { | |
| for (var _len2 = arguments.length, values = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | |
| values[_key2] = arguments[_key2]; | |
| } | |
| var dict = values[values.length - 1] || {}; | |
| var result = [strings[0]]; | |
| keys.forEach(function (key, i) { | |
| var value = isInteger(key) ? values[key] : dict[key]; | |
| result.push(value, strings[i + 1]); | |
| }); | |
| return result.join(''); | |
| }; | |
| } | |
| function isSecureProtocol() { | |
| return document.location.protocol === 'https:'; | |
| } | |
| function parsePixelItems(pixels) { | |
| var itemsRegExp = /(img|iframe)[\s\S]*?src\s*=\s*("|')(.*?)\2/gi; | |
| var tagNameRegExp = /\w*(?=\s)/; | |
| var srcRegExp = /src=("|')(.*?)\1/; | |
| var pixelsItems = []; | |
| if (pixels) { | |
| var matchedItems = pixels.match(itemsRegExp); | |
| if (matchedItems) { | |
| matchedItems.forEach(function (item) { | |
| var tagName = item.match(tagNameRegExp)[0]; | |
| var url = item.match(srcRegExp)[2]; | |
| if (tagName && tagName) { | |
| pixelsItems.push({ | |
| type: tagName === SYNC_TYPES.IMAGE.TAG ? SYNC_TYPES.IMAGE.TYPE : SYNC_TYPES.IFRAME.TYPE, | |
| url: url | |
| }); | |
| } | |
| }); | |
| } | |
| } | |
| return pixelsItems; | |
| } | |
| function _buildMarketplaceUrl(bid) { | |
| var params = bid.params; | |
| var serverParam = params.server; | |
| var regionParam = params.region || 'us'; | |
| var server = void 0; | |
| if (!MP_SERVER_MAP.hasOwnProperty(regionParam)) { | |
| utils.logWarn('Unknown region \'' + regionParam + '\' for AOL bidder.'); | |
| regionParam = 'us'; // Default region. | |
| } | |
| if (serverParam) { | |
| server = serverParam; | |
| } else { | |
| server = MP_SERVER_MAP[regionParam]; | |
| } | |
| // Set region param, used by AOL analytics. | |
| params.region = regionParam; | |
| return pubapiTemplate({ | |
| host: server, | |
| network: params.network, | |
| placement: parseInt(params.placement), | |
| pageid: params.pageId || 0, | |
| sizeid: params.sizeId || 0, | |
| alias: params.alias || utils.getUniqueIdentifierStr(), | |
| bidfloor: formatMarketplaceBidFloor(params.bidFloor), | |
| keyValues: formatMarketplaceKeyValues(params.keyValues), | |
| misc: new Date().getTime() // cache busting | |
| }); | |
| } | |
| function formatMarketplaceBidFloor(bidFloor) { | |
| return typeof bidFloor !== 'undefined' ? ';bidfloor=' + bidFloor.toString() : ''; | |
| } | |
| function formatMarketplaceKeyValues(keyValues) { | |
| var formattedKeyValues = ''; | |
| utils._each(keyValues, function (value, key) { | |
| formattedKeyValues += ';kv' + key + '=' + encodeURIComponent(value); | |
| }); | |
| return formattedKeyValues; | |
| } | |
| function _buildOneMobileBaseUrl(bid) { | |
| return nexageBaseApiTemplate({ | |
| host: bid.params.host || NEXAGE_SERVER | |
| }); | |
| } | |
| function _buildOneMobileGetUrl(bid) { | |
| var _bid$params = bid.params, | |
| dcn = _bid$params.dcn, | |
| pos = _bid$params.pos; | |
| var nexageApi = _buildOneMobileBaseUrl(bid); | |
| if (dcn && pos) { | |
| var ext = ''; | |
| if (isSecureProtocol()) { | |
| bid.params.ext = bid.params.ext || {}; | |
| bid.params.ext.secure = 1; | |
| } | |
| utils._each(bid.params.ext, function (value, key) { | |
| ext += '&' + key + '=' + encodeURIComponent(value); | |
| }); | |
| nexageApi += nexageGetApiTemplate({ dcn: dcn, pos: pos, ext: ext }); | |
| } | |
| return nexageApi; | |
| } | |
| function _isMarketplaceBidder(bidder) { | |
| return bidder === AOL_BIDDERS_CODES.AOL || bidder === AOL_BIDDERS_CODES.ONEDISPLAY; | |
| } | |
| function _isNexageBidder(bidder) { | |
| return bidder === AOL_BIDDERS_CODES.AOL || bidder === AOL_BIDDERS_CODES.ONEMOBILE; | |
| } | |
| function _isNexageRequestPost(bid) { | |
| if (_isNexageBidder(bid.bidder) && bid.params.id && bid.params.imp && bid.params.imp[0]) { | |
| var imp = bid.params.imp[0]; | |
| return imp.id && imp.tagid && (imp.banner && imp.banner.w && imp.banner.h || imp.video && imp.video.mimes && imp.video.minduration && imp.video.maxduration); | |
| } | |
| } | |
| function _isNexageRequestGet(bid) { | |
| return _isNexageBidder(bid.bidder) && bid.params.dcn && bid.params.pos; | |
| } | |
| function isMarketplaceBid(bid) { | |
| return _isMarketplaceBidder(bid.bidder) && bid.params.placement && bid.params.network; | |
| } | |
| function isMobileBid(bid) { | |
| return _isNexageRequestGet(bid) || _isNexageRequestPost(bid); | |
| } | |
| function resolveEndpointCode(bid) { | |
| if (_isNexageRequestGet(bid)) { | |
| return AOL_ENDPOINTS.MOBILE.GET; | |
| } else if (_isNexageRequestPost(bid)) { | |
| return AOL_ENDPOINTS.MOBILE.POST; | |
| } else if (isMarketplaceBid(bid)) { | |
| return AOL_ENDPOINTS.DISPLAY.GET; | |
| } | |
| } | |
| function formatBidRequest(endpointCode, bid) { | |
| var bidRequest = void 0; | |
| switch (endpointCode) { | |
| case AOL_ENDPOINTS.DISPLAY.GET: | |
| bidRequest = { | |
| url: _buildMarketplaceUrl(bid), | |
| method: 'GET', | |
| ttl: ONE_DISPLAY_TTL | |
| }; | |
| break; | |
| case AOL_ENDPOINTS.MOBILE.GET: | |
| bidRequest = { | |
| url: _buildOneMobileGetUrl(bid), | |
| method: 'GET', | |
| ttl: ONE_MOBILE_TTL | |
| }; | |
| break; | |
| case AOL_ENDPOINTS.MOBILE.POST: | |
| bidRequest = { | |
| url: _buildOneMobileBaseUrl(bid), | |
| method: 'POST', | |
| ttl: ONE_MOBILE_TTL, | |
| data: bid.params, | |
| options: { | |
| contentType: 'application/json', | |
| customHeaders: { | |
| 'x-openrtb-version': '2.2' | |
| } | |
| } | |
| }; | |
| break; | |
| } | |
| bidRequest.bidderCode = bid.bidder; | |
| bidRequest.bidId = bid.bidId; | |
| bidRequest.userSyncOn = bid.params.userSyncOn; | |
| return bidRequest; | |
| } | |
| var spec = exports.spec = { | |
| code: AOL_BIDDERS_CODES.AOL, | |
| aliases: [AOL_BIDDERS_CODES.ONEMOBILE, AOL_BIDDERS_CODES.ONEDISPLAY], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return isMarketplaceBid(bid) || isMobileBid(bid); | |
| }, | |
| buildRequests: function buildRequests(bids) { | |
| return bids.map(function (bid) { | |
| var endpointCode = resolveEndpointCode(bid); | |
| if (endpointCode) { | |
| return formatBidRequest(endpointCode, bid); | |
| } | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(_ref, bidRequest) { | |
| var body = _ref.body; | |
| showCpmAdjustmentWarning(); | |
| if (!body) { | |
| utils.logError('Empty bid response', bidRequest.bidderCode, body); | |
| } else { | |
| var _bid = this._parseBidResponse(body, bidRequest); | |
| if (_bid) { | |
| return _bid; | |
| } | |
| } | |
| }, | |
| _formatPixels: function _formatPixels(pixels) { | |
| var formattedPixels = pixels.replace(/<\/?script( type=('|")text\/javascript('|")|)?>/g, ''); | |
| return '<script>var w=window,prebid;' + 'for(var i=0;i<10;i++){w = w.parent;prebid=w.pbjs;' + 'if(prebid && prebid.aolGlobals && !prebid.aolGlobals.pixelsDropped){' + 'try{prebid.aolGlobals.pixelsDropped=true;' + formattedPixels + 'break;}' + 'catch(e){continue;}' + '}}</script>'; | |
| }, | |
| _parseBidResponse: function _parseBidResponse(response, bidRequest) { | |
| var bidData = void 0; | |
| try { | |
| bidData = response.seatbid[0].bid[0]; | |
| } catch (e) { | |
| return; | |
| } | |
| var cpm = void 0; | |
| if (bidData.ext && bidData.ext.encp) { | |
| cpm = bidData.ext.encp; | |
| } else { | |
| cpm = bidData.price; | |
| if (cpm === null || isNaN(cpm)) { | |
| utils.logError('Invalid price in bid response', AOL_BIDDERS_CODES.AOL, bid); | |
| return; | |
| } | |
| } | |
| var ad = bidData.adm; | |
| if (response.ext && response.ext.pixels) { | |
| if (_config.config.getConfig('aol.userSyncOn') !== _constants.EVENTS.BID_RESPONSE) { | |
| ad += this._formatPixels(response.ext.pixels); | |
| } | |
| } | |
| return { | |
| bidderCode: bidRequest.bidderCode, | |
| requestId: bidRequest.bidId, | |
| ad: ad, | |
| cpm: cpm, | |
| width: bidData.w, | |
| height: bidData.h, | |
| creativeId: bidData.crid, | |
| pubapiId: response.id, | |
| currency: response.cur, | |
| dealId: bidData.dealid, | |
| netRevenue: true, | |
| ttl: bidRequest.ttl | |
| }; | |
| }, | |
| getUserSyncs: function getUserSyncs(options, bidResponses) { | |
| var bidResponse = bidResponses[0]; | |
| if (_config.config.getConfig('aol.userSyncOn') === _constants.EVENTS.BID_RESPONSE) { | |
| if (!pbjs.aolGlobals.pixelsDropped && bidResponse.ext && bidResponse.ext.pixels) { | |
| pbjs.aolGlobals.pixelsDropped = true; | |
| return parsePixelItems(bidResponse.ext.pixels); | |
| } | |
| } | |
| return []; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 108: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[106]); | |
| pbjsChunk([89],{ | |
| /***/ 109: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(110); | |
| /***/ }), | |
| /***/ 110: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| var _AnalyticsAdapter = __webpack_require__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| /** | |
| * appnexus.js - AppNexus Prebid Analytics Adapter | |
| */ | |
| var appnexusAdapter = (0, _AnalyticsAdapter2['default'])({ | |
| global: 'AppNexusPrebidAnalytics', | |
| handler: 'on', | |
| analyticsType: 'bundle' | |
| }); | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: appnexusAdapter, | |
| code: 'appnexus' | |
| }); | |
| exports['default'] = appnexusAdapter; | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[109]); | |
| pbjsChunk([88],{ | |
| /***/ 111: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(112); | |
| module.exports = __webpack_require__(113); | |
| /***/ }), | |
| /***/ 112: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _Renderer = __webpack_require__(16); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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 _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 BIDDER_CODE = 'appnexus'; | |
| var URL = '//ib.adnxs.com/ut/v3/prebid'; | |
| 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', | |
| requiredParams: { required: true }, | |
| minimumParams: { sizes: [{}] } | |
| }, | |
| icon: { | |
| serverName: 'icon', | |
| requiredParams: { required: true }, | |
| minimumParams: { sizes: [{}] } | |
| }, | |
| sponsoredBy: 'sponsored_by' | |
| }; | |
| var SOURCE = 'pbjs'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['appnexusAst', 'brealtime', 'pagescience', 'defymedia', 'gourmetads', 'matomy', 'featureforward', 'oftmedia', 'districtm'], | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO, _mediaTypes.NATIVE], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.placementId || bid.params.member && bid.params.invCode); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} bidRequests A non-empty list of bid requests which should be sent to the Server. | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidRequests, bidderRequest) { | |
| var tags = bidRequests.map(bidToTag); | |
| var userObjBid = (0, _find2['default'])(bidRequests, hasUserInfo); | |
| var userObj = void 0; | |
| if (userObjBid) { | |
| userObj = {}; | |
| Object.keys(userObjBid.params.user).filter(function (param) { | |
| return (0, _includes2['default'])(USER_PARAMS, param); | |
| }).forEach(function (param) { | |
| return userObj[param] = userObjBid.params.user[param]; | |
| }); | |
| } | |
| var memberIdBid = (0, _find2['default'])(bidRequests, hasMemberId); | |
| var member = memberIdBid ? parseInt(memberIdBid.params.member, 10) : 0; | |
| var payload = { | |
| tags: [].concat(_toConsumableArray(tags)), | |
| user: userObj, | |
| sdk: { | |
| source: SOURCE, | |
| version: '1.7.0-pre' | |
| } | |
| }; | |
| if (member > 0) { | |
| payload.member_id = member; | |
| } | |
| var payloadString = JSON.stringify(payload); | |
| return { | |
| method: 'POST', | |
| url: URL, | |
| data: payloadString, | |
| bidderRequest: bidderRequest | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, _ref) { | |
| var _this = this; | |
| var bidderRequest = _ref.bidderRequest; | |
| serverResponse = serverResponse.body; | |
| var bids = []; | |
| if (!serverResponse || serverResponse.error) { | |
| var errorMessage = 'in response for ' + bidderRequest.bidderCode + ' adapter'; | |
| if (serverResponse && serverResponse.error) { | |
| errorMessage += ': ' + serverResponse.error; | |
| } | |
| utils.logError(errorMessage); | |
| return bids; | |
| } | |
| if (serverResponse.tags) { | |
| serverResponse.tags.forEach(function (serverBid) { | |
| var rtbBid = getRtbBid(serverBid); | |
| if (rtbBid) { | |
| if (rtbBid.cpm !== 0 && (0, _includes2['default'])(_this.supportedMediaTypes, rtbBid.ad_type)) { | |
| var bid = newBid(serverBid, rtbBid, bidderRequest); | |
| bid.mediaType = parseMediaType(rtbBid); | |
| bids.push(bid); | |
| } | |
| } | |
| }); | |
| } | |
| return bids; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: '//acdn.adnxs.com/ib/static/usersync/v3/async_usersync.html' | |
| }]; | |
| } | |
| } | |
| }; | |
| function newRenderer(adUnitCode, rtbBid) { | |
| var rendererOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | |
| var renderer = _Renderer.Renderer.install({ | |
| id: rtbBid.renderer_id, | |
| url: rtbBid.renderer_url, | |
| config: rendererOptions, | |
| loaded: false | |
| }); | |
| try { | |
| renderer.setRender(outstreamRender); | |
| } catch (err) { | |
| utils.logWarn('Prebid Error calling setRender on renderer', err); | |
| } | |
| 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('#' + adUnitCode).style.display = 'none'; | |
| } | |
| }); | |
| return renderer; | |
| } | |
| /* 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; | |
| } | |
| /** | |
| * Unpack the Server's Bid into a Prebid-compatible one. | |
| * @param serverBid | |
| * @param rtbBid | |
| * @param bidderRequest | |
| * @return Bid | |
| */ | |
| function newBid(serverBid, rtbBid, bidderRequest) { | |
| var bid = { | |
| requestId: serverBid.uuid, | |
| cpm: rtbBid.cpm, | |
| creativeId: rtbBid.creative_id, | |
| dealId: rtbBid.deal_id, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 300, | |
| appnexus: { | |
| buyerMemberId: rtbBid.buyer_member_id | |
| } | |
| }; | |
| if (rtbBid.rtb.video) { | |
| _extends(bid, { | |
| width: rtbBid.rtb.video.player_width, | |
| height: rtbBid.rtb.video.player_height, | |
| vastUrl: rtbBid.rtb.video.asset_url, | |
| ttl: 3600 | |
| }); | |
| // This supports Outstream Video | |
| if (rtbBid.renderer_url) { | |
| var rendererOptions = utils.deepAccess(bidderRequest.bids[0], 'renderer.options'); | |
| _extends(bid, { | |
| adResponse: serverBid, | |
| renderer: newRenderer(bid.adUnitCode, rtbBid, rendererOptions) | |
| }); | |
| bid.adResponse.ad = bid.adResponse.ads[0]; | |
| bid.adResponse.ad.video = bid.adResponse.ad.rtb.video; | |
| } | |
| } else if (rtbBid.rtb[_mediaTypes.NATIVE]) { | |
| var nativeAd = rtbBid.rtb[_mediaTypes.NATIVE]; | |
| bid[_mediaTypes.NATIVE] = { | |
| title: nativeAd.title, | |
| body: nativeAd.desc, | |
| cta: nativeAd.ctatext, | |
| sponsoredBy: nativeAd.sponsored, | |
| clickUrl: nativeAd.link.url, | |
| clickTrackers: nativeAd.link.click_trackers, | |
| impressionTrackers: nativeAd.impression_trackers | |
| }; | |
| if (nativeAd.main_img) { | |
| bid['native'].image = { | |
| url: nativeAd.main_img.url, | |
| height: nativeAd.main_img.height, | |
| width: nativeAd.main_img.width | |
| }; | |
| } | |
| if (nativeAd.icon) { | |
| bid['native'].icon = { | |
| url: nativeAd.icon.url, | |
| height: nativeAd.icon.height, | |
| width: nativeAd.icon.width | |
| }; | |
| } | |
| } else { | |
| _extends(bid, { | |
| width: rtbBid.rtb.banner.width, | |
| height: rtbBid.rtb.banner.height, | |
| ad: rtbBid.rtb.banner.content | |
| }); | |
| try { | |
| var url = rtbBid.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; | |
| } | |
| function bidToTag(bid) { | |
| var tag = {}; | |
| tag.sizes = transformSizes(bid.sizes); | |
| tag.primary_size = tag.sizes[0]; | |
| tag.ad_types = []; | |
| 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.use_pmt_rule = bid.params.usePaymentRule || false; | |
| tag.prebid = true; | |
| tag.disable_psa = true; | |
| 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 = transformSizes(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 === _mediaTypes.NATIVE || utils.deepAccess(bid, 'mediaTypes.' + _mediaTypes.NATIVE)) { | |
| tag.ad_types.push(_mediaTypes.NATIVE); | |
| if (bid.nativeParams) { | |
| var nativeRequest = buildNativeRequest(bid.nativeParams); | |
| tag[_mediaTypes.NATIVE] = { layouts: [nativeRequest] }; | |
| } | |
| } | |
| var videoMediaType = utils.deepAccess(bid, 'mediaTypes.' + _mediaTypes.VIDEO); | |
| var context = utils.deepAccess(bid, 'mediaTypes.video.context'); | |
| if (bid.mediaType === _mediaTypes.VIDEO || videoMediaType) { | |
| tag.ad_types.push(_mediaTypes.VIDEO); | |
| } | |
| // instream gets vastUrl, outstream gets vastXml | |
| if (bid.mediaType === _mediaTypes.VIDEO || videoMediaType && context !== 'outstream') { | |
| 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 (0, _includes2['default'])(VIDEO_TARGETING, param); | |
| }).forEach(function (param) { | |
| return tag.video[param] = bid.params.video[param]; | |
| }); | |
| } | |
| if (utils.isEmpty(bid.mediaType) && utils.isEmpty(bid.mediaTypes) || bid.mediaType === _mediaTypes.BANNER || bid.mediaTypes && bid.mediaTypes[_mediaTypes.BANNER]) { | |
| tag.ad_types.push(_mediaTypes.BANNER); | |
| } | |
| return tag; | |
| } | |
| /* Turn bid request sizes into ut-compatible format */ | |
| function transformSizes(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 hasUserInfo(bid) { | |
| return !!bid.params.user; | |
| } | |
| function hasMemberId(bid) { | |
| return !!parseInt(bid.params.member, 10); | |
| } | |
| function getRtbBid(tag) { | |
| return tag && tag.ads && tag.ads.length && (0, _find2['default'])(tag.ads, function (ad) { | |
| return ad.rtb; | |
| }); | |
| } | |
| function buildNativeRequest(params) { | |
| var request = {}; | |
| // 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: '<server name>'} or | |
| // {tag: {serverName: '<server name>', requiredParams: {...}}} | |
| Object.keys(params).forEach(function (key) { | |
| // check if one of the <server name> 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; | |
| // required params are always passed on request | |
| var requiredParams = NATIVE_MAPPING[key] && NATIVE_MAPPING[key].requiredParams; | |
| request[requestKey] = _extends({}, requiredParams, params[key]); | |
| // minimum params are passed if no non-required params given on adunit | |
| var minimumParams = NATIVE_MAPPING[key] && NATIVE_MAPPING[key].minimumParams; | |
| if (requiredParams && minimumParams) { | |
| // subtract required keys from adunit keys | |
| var adunitKeys = Object.keys(params[key]); | |
| var requiredKeys = Object.keys(requiredParams); | |
| var remaining = adunitKeys.filter(function (key) { | |
| return !(0, _includes2['default'])(requiredKeys, key); | |
| }); | |
| // if none are left over, the minimum params needs to be sent | |
| if (remaining.length === 0) { | |
| request[requestKey] = _extends({}, request[requestKey], minimumParams); | |
| } | |
| } | |
| }); | |
| return request; | |
| } | |
| 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(null, bid)); | |
| }); | |
| } | |
| function handleOutstreamRendererEvents(bid, id, eventName) { | |
| bid.renderer.handleVideoEvent({ id: id, eventName: eventName }); | |
| } | |
| function parseMediaType(rtbBid) { | |
| var adType = rtbBid.ad_type; | |
| if (adType === _mediaTypes.VIDEO) { | |
| return _mediaTypes.VIDEO; | |
| } else if (adType === _mediaTypes.NATIVE) { | |
| return _mediaTypes.NATIVE; | |
| } else { | |
| return _mediaTypes.BANNER; | |
| } | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 113: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[111]); | |
| pbjsChunk([87],{ | |
| /***/ 114: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(115); | |
| module.exports = __webpack_require__(116); | |
| /***/ }), | |
| /***/ 115: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| 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 BIDDER_CODE = 'arteebee'; | |
| var DEFAULT_HOST = 'bidder.mamrtb.com'; | |
| var DEFAULT_SSP = 'arteebee'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.BANNER], | |
| isBidRequestValid: function isBidRequestValid(bidRequest) { | |
| return 'params' in bidRequest && bidRequest.params.pub !== undefined && bidRequest.params.source !== undefined; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var requests = []; | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| var prebidReq = makePrebidRequest(validBidRequests[i]); | |
| if (prebidReq) { | |
| requests.push(prebidReq); | |
| } | |
| } | |
| return requests; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var rtbResp = serverResponse.body; | |
| if (!rtbResp || !rtbResp.seatbid) { | |
| return []; | |
| } | |
| var bidResponses = []; | |
| for (var i = 0; i < rtbResp.seatbid.length; i++) { | |
| var seatbid = rtbResp.seatbid[i]; | |
| for (var j = 0; j < seatbid.bid.length; j++) { | |
| var bid = seatbid.bid[j]; | |
| var bidResponse = { | |
| requestId: bid.impid, | |
| cpm: bid.price, | |
| width: bid.w, | |
| height: bid.h, | |
| mediaType: _mediaTypes.BANNER, | |
| creativeId: bid.crid, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: bid.exp, | |
| ad: bid.adm | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| return []; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| function makePrebidRequest(req) { | |
| var host = req.params.host || DEFAULT_HOST; | |
| var ssp = req.params.ssp || DEFAULT_SSP; | |
| var url = window.location.protocol + '//' + host + '/rtb/bid/' + ssp + '?type=json®ister=0'; | |
| var payload = makeRtbRequest(req); | |
| var payloadString = JSON.stringify(payload); | |
| return { | |
| method: 'POST', | |
| url: url, | |
| data: payloadString | |
| }; | |
| } | |
| function makeRtbRequest(req) { | |
| var auctionId = req.requestId; | |
| var imp = []; | |
| imp.push(makeImp(req)); | |
| var rtbReq = { | |
| 'id': auctionId, | |
| 'imp': imp, | |
| 'site': makeSite(req), | |
| 'device': makeDevice(), | |
| 'at': 1, | |
| 'tmax': _config.config.getConfig('bidderTimeout') | |
| }; | |
| if (req.params.coppa) { | |
| rtbReq.regs = { coppa: 1 }; | |
| } | |
| if (req.params.test) { | |
| rtbReq.test = 1; | |
| } | |
| return rtbReq; | |
| } | |
| function makeImp(req) { | |
| var imp = { | |
| 'id': req.bidId, | |
| 'tagid': req.placementCode | |
| }; | |
| if (window.location.protocol === 'https:') { | |
| imp.secure = 1; | |
| } | |
| imp.banner = makeBanner(req); | |
| return imp; | |
| } | |
| function makeBanner(req) { | |
| var format = []; | |
| for (var i = 0; i < req.sizes.length; i++) { | |
| format.push({ | |
| w: req.sizes[i][0], | |
| h: req.sizes[i][1] | |
| }); | |
| } | |
| return { | |
| 'format': format | |
| }; | |
| } | |
| function makeSite(req) { | |
| var params = req.params; | |
| var site = { | |
| 'id': params.source, | |
| 'page': utils.getTopWindowUrl(), | |
| 'ref': utils.getTopWindowReferrer(), | |
| 'publisher': makePublisher(req) | |
| }; | |
| return site; | |
| } | |
| function makePublisher(req) { | |
| var params = req.params; | |
| var publisher = { | |
| 'id': params.pub, | |
| 'domain': getDomain(_config.config.getConfig('publisherDomain')) | |
| }; | |
| return publisher; | |
| } | |
| function getDomain(url) { | |
| var a = document.createElement('a'); | |
| a.href = url; | |
| return a.host; | |
| } | |
| function makeDevice() { | |
| var device = { | |
| 'ua': 'caller', | |
| 'ip': 'caller', | |
| 'js': 1 | |
| }; | |
| return device; | |
| } | |
| /***/ }), | |
| /***/ 116: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[114]); | |
| pbjsChunk([86],{ | |
| /***/ 117: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(118); | |
| module.exports = __webpack_require__(119); | |
| /***/ }), | |
| /***/ 118: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'atomx'; | |
| function getDomain() { | |
| var domain = ''; | |
| try { | |
| if (domain === '' && window.top == window) { | |
| domain = window.location.href; | |
| } | |
| if (domain === '' && window.top == window.parent) { | |
| domain = document.referrer; | |
| } | |
| if (domain == '') { | |
| var atomxt = 'atomxtest'; | |
| // It should be impossible to change the window.location.ancestorOrigins. | |
| window.location.ancestorOrigins[0] = atomxt; | |
| if (window.location.ancestorOrigins[0] != atomxt) { | |
| var ancestorOrigins = window.location.ancestorOrigins; | |
| // If the length is 0 we are a javascript tag running in the main domain. | |
| // But window.top != window or window.location.hostname is empty. | |
| if (ancestorOrigins.length == 0) { | |
| // This browser is so fucked up, just return an empty string. | |
| return ''; | |
| } | |
| // ancestorOrigins is an array where [0] is our own window.location | |
| // and [length-1] is the top window.location. | |
| domain = ancestorOrigins[ancestorOrigins.length - 1]; | |
| } | |
| } | |
| } catch (unused) {} | |
| if (domain === '') { | |
| domain = document.referrer; | |
| } | |
| if (domain === '') { | |
| domain = window.location.href; | |
| } | |
| return domain.substr(0, 512); | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return bid.params && !!bid.params.id; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| return validBidRequests.map(function (bidRequest) { | |
| return { | |
| method: 'GET', | |
| url: location.protocol + '//p.ato.mx/placement', | |
| data: { | |
| v: 12, | |
| id: bidRequest.params.id, | |
| size: utils.parseSizesInput(bidRequest.sizes)[0], | |
| prebid: bidRequest.bidId, | |
| b: 0, | |
| h: '7t3y9', | |
| type: 'javascript', | |
| screen: window.screen.width + 'x' + window.screen.height + 'x' + window.screen.colorDepth, | |
| timezone: new Date().getTimezoneOffset(), | |
| domain: getDomain(), | |
| r: document.referrer.substr(0, 512) | |
| } | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var body = serverResponse.body; | |
| var res = { | |
| requestId: body.code, | |
| cpm: body.cpm * 1000, | |
| width: body.width, | |
| height: body.height, | |
| creativeId: body.creative_id, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 60 | |
| }; | |
| if (body.adm) { | |
| res.ad = body.adm; | |
| } else { | |
| res.adUrl = body.url; | |
| } | |
| return [res]; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| return []; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 119: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[117]); | |
| pbjsChunk([85],{ | |
| /***/ 120: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(121); | |
| module.exports = __webpack_require__(122); | |
| /***/ }), | |
| /***/ 121: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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; }; /** | |
| * @file AudienceNetwork adapter. | |
| */ | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| var _url = __webpack_require__(12); | |
| var _utils = __webpack_require__(0); | |
| var _findIndex = __webpack_require__(21); | |
| var _findIndex2 = _interopRequireDefault(_findIndex); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var code = 'audienceNetwork'; | |
| var currency = 'USD'; | |
| var method = 'GET'; | |
| var url = 'https://an.facebook.com/v2/placementbid.json'; | |
| var supportedMediaTypes = ['banner', 'video']; | |
| var netRevenue = true; | |
| var hb_bidder = 'fan'; | |
| var pbv = '1.7.0-pre'; | |
| /** | |
| * Does this bid request contain valid parameters? | |
| * @param {Object} bid | |
| * @returns {Boolean} | |
| */ | |
| var isBidRequestValid = function isBidRequestValid(bid) { | |
| return _typeof(bid.params) === 'object' && typeof bid.params.placementId === 'string' && bid.params.placementId.length > 0 && Array.isArray(bid.sizes) && bid.sizes.length > 0 && (isFullWidth(bid.params.format) ? bid.sizes.map(flattenSize).every(function (size) { | |
| return size === '300x250'; | |
| }) : true) && (isValidNonSizedFormat(bid.params.format) || bid.sizes.map(flattenSize).some(isValidSize)); | |
| }; | |
| /** | |
| * Flattens a 2-element [W, H] array as a 'WxH' string, | |
| * otherwise passes value through. | |
| * @param {Array|String} size | |
| * @returns {String} | |
| */ | |
| var flattenSize = function flattenSize(size) { | |
| return Array.isArray(size) && size.length === 2 ? size[0] + 'x' + size[1] : size; | |
| }; | |
| /** | |
| * Expands a 'WxH' string as a 2-element [W, H] array | |
| * @param {String} size | |
| * @returns {Array} | |
| */ | |
| var expandSize = function expandSize(size) { | |
| return size.split('x').map(Number); | |
| }; | |
| /** | |
| * Is this a valid slot size? | |
| * @param {String} size | |
| * @returns {Boolean} | |
| */ | |
| var isValidSize = function isValidSize(size) { | |
| return (0, _includes2['default'])(['300x250', '320x50'], size); | |
| }; | |
| /** | |
| * Is this a valid, non-sized format? | |
| * @param {String} size | |
| * @returns {Boolean} | |
| */ | |
| var isValidNonSizedFormat = function isValidNonSizedFormat(format) { | |
| return (0, _includes2['default'])(['video', 'native'], format); | |
| }; | |
| /** | |
| * Is this a valid size and format? | |
| * @param {String} size | |
| * @returns {Boolean} | |
| */ | |
| var isValidSizeAndFormat = function isValidSizeAndFormat(size, format) { | |
| return isFullWidth(format) && flattenSize(size) === '300x250' || isValidNonSizedFormat(format) || isValidSize(flattenSize(size)); | |
| }; | |
| /** | |
| * Is this a video format? | |
| * @param {String} format | |
| * @returns {Boolean} | |
| */ | |
| var isVideo = function isVideo(format) { | |
| return format === 'video'; | |
| }; | |
| /** | |
| * Is this a fullwidth format? | |
| * @param {String} format | |
| * @returns {Boolean} | |
| */ | |
| var isFullWidth = function isFullWidth(format) { | |
| return format === 'fullwidth'; | |
| }; | |
| /** | |
| * Which SDK version should be used for this format? | |
| * @param {String} format | |
| * @returns {String} | |
| */ | |
| var sdkVersion = function sdkVersion(format) { | |
| return isVideo(format) ? '' : '5.5.web'; | |
| }; | |
| /** | |
| * Does the search part of the URL contain "anhb_testmode" | |
| * and therefore indicate testmode should be used? | |
| * @returns {String} "true" or "false" | |
| */ | |
| var isTestmode = function isTestmode() { | |
| return Boolean(window && window.location && typeof window.location.search === 'string' && window.location.search.indexOf('anhb_testmode') !== -1).toString(); | |
| }; | |
| /** | |
| * Generate ad HTML for injection into an iframe | |
| * @param {String} placementId | |
| * @param {String} format | |
| * @param {String} bidId | |
| * @returns {String} HTML | |
| */ | |
| var createAdHtml = function createAdHtml(placementId, format, bidId) { | |
| var nativeStyle = format === 'native' ? '<script>window.onload=function(){if(parent){var o=document.getElementsByTagName("head")[0];var s=parent.document.getElementsByTagName("style");for(var i=0;i<s.length;i++)o.appendChild(s[i].cloneNode(true));}}</script>' : ''; | |
| var nativeContainer = format === 'native' ? '<div class="thirdPartyRoot"><a class="fbAdLink"><div class="fbAdMedia thirdPartyMediaClass"></div><div class="fbAdSubtitle thirdPartySubtitleClass"></div><div class="fbDefaultNativeAdWrapper"><div class="fbAdCallToAction thirdPartyCallToActionClass"></div><div class="fbAdTitle thirdPartyTitleClass"></div></div></a></div>' : ''; | |
| return '<html><head>' + nativeStyle + '</head><body><div style="display:none;position:relative;">\n<script type=\'text/javascript\'>var data = {placementid:\'' + placementId + '\',format:\'' + format + '\',bidid:\'' + bidId + '\',onAdLoaded:function(e){console.log(\'Audience Network [' + placementId + '] ad loaded\');e.style.display = \'block\';},onAdError:function(c,m){console.log(\'Audience Network [' + placementId + '] error (\' + c + \') \' + m);}};\n(function(a,b,c){var d=\'https://www.facebook.com\',e=\'https://connect.facebook.net/en_US/fbadnw55.js\',f={iframeLoaded:true,xhrLoaded:true},g=a.data,h=function(){if(Date.now){return Date.now();}else return +new Date();},i=function(aa){var ba=d+\'/audience_network/client_event\',ca={cb:h(),event_name:\'ADNW_ADERROR\',ad_pivot_type:\'audience_network_mobile_web\',sdk_version:\'5.5.web\',app_id:g.placementid.split(\'_\')[0],publisher_id:g.placementid.split(\'_\')[1],error_message:aa},da=[];for(var ea in ca)da.push(encodeURIComponent(ea)+\'=\'+encodeURIComponent(ca[ea]));var fa=ba+\'?\'+da.join(\'&\'),ga=new XMLHttpRequest();ga.open(\'GET\',fa,true);ga.send();if(g.onAdError)g.onAdError(\'1000\',\'Internal error.\');},j=function(){if(b.currentScript){return b.currentScript;}else{var aa=b.getElementsByTagName(\'script\');return aa[aa.length-1];}},k=function(aa){try{return aa.document.referrer;}catch(ba){}return \'\';},l=function(){var aa=a,ba=[aa];try{while(aa!==aa.parent&&aa.parent.document)ba.push(aa=aa.parent);}catch(ca){}return ba.reverse();},m=function(){var aa=l();for(var ba=0;ba<aa.length;ba++){var ca=aa[ba],da=ca.ADNW||{};ca.ADNW=da;if(!ca.ADNW)continue;return da.v55=da.v55||{ads:[],window:ca};}throw new Error(\'no_writable_global\');},n=function(aa){var ba=aa.indexOf(\'/\',aa.indexOf(\'://\')+3);if(ba===-1)return aa;return aa.substring(0,ba);},o=function(aa){return aa.location.href||k(aa);},p=function(aa){if(aa.sdkLoaded)return;var ba=aa.window.document,ca=ba.createElement(\'iframe\');ca.name=\'fbadnw\';ca.style.display=\'none\';ba.body.appendChild(ca);var da=ca.contentDocument.createElement(\'script\');da.src=e;da.async=true;ca.contentDocument.body.appendChild(da);aa.sdkLoaded=true;},q=function(aa){var ba=/^https?:\\/\\/www\\.google(\\.com?)?\\.\\w{2,3}$/;return !!aa.match(ba);},r=function(aa){return !!aa.match(/cdn\\.ampproject\\.org$/);},s=function(){var aa=c.ancestorOrigins||[],ba=aa[aa.length-1]||c.origin,ca=aa[aa.length-2]||c.origin;if(q(ba)&&r(ca)){return n(ca);}else return n(ba);},t=function(aa){try{return JSON.parse(aa);}catch(ba){i(ba.message);throw ba;}},u=function(aa,ba,ca){if(!aa.iframe){var da=ca.createElement(\'iframe\');da.src=d+\'/audiencenetwork/iframe/\';da.style.display=\'none\';ca.body.appendChild(da);aa.iframe=da;aa.iframeAppendedTime=h();aa.iframeData={};}ba.iframe=aa.iframe;ba.iframeData=aa.iframeData;ba.tagJsIframeAppendedTime=aa.iframeAppendedTime||0;},v=function(aa){var ba=d+\'/audiencenetwork/xhr/?sdk=5.5.web\';for(var ca in aa)if(typeof aa[ca]!==\'function\')ba+=\'&\'+ca+\'=\'+encodeURIComponent(aa[ca]);var da=new XMLHttpRequest();da.open(\'GET\',ba,true);da.withCredentials=true;da.onreadystatechange=function(){if(da.readyState===4){var ea=t(da.response);aa.events.push({name:\'xhrLoaded\',source:aa.iframe.contentWindow,data:ea,postMessageTimestamp:h(),receivedTimestamp:h()});}};da.send();},w=function(aa,ba){var ca=d+\'/audiencenetwork/xhriframe/?sdk=5.5.web\';for(var da in ba)if(typeof ba[da]!==\'function\')ca+=\'&\'+da+\'=\'+encodeURIComponent(ba[da]);var ea=b.createElement(\'iframe\');ea.src=ca;ea.style.display=\'none\';b.body.appendChild(ea);ba.iframe=ea;ba.iframeData={};ba.tagJsIframeAppendedTime=h();},x=function(aa){var ba=function(event){try{var da=event.data;if(da.name in f)aa.events.push({name:da.name,source:event.source,data:da.data});}catch(ea){}},ca=aa.iframe.contentWindow.parent;ca.addEventListener(\'message\',ba,false);},y=function(aa){if(aa.context&&aa.context.sourceUrl)return true;try{return !!JSON.parse(decodeURI(aa.name)).ampcontextVersion;}catch(ba){return false;}},z=function(aa){var ba=h(),ca=l()[0],da=j().parentElement,ea=ca!=a.top,fa=ca.$sf&&ca.$sf.ext,ga=o(ca),ha=m();p(ha);var ia={amp:y(ca),events:[],tagJsInitTime:ba,rootElement:da,iframe:null,tagJsIframeAppendedTime:ha.iframeAppendedTime||0,url:ga,domain:s(),channel:n(o(ca)),width:screen.width,height:screen.height,pixelratio:a.devicePixelRatio,placementindex:ha.ads.length,crossdomain:ea,safeframe:!!fa,placementid:g.placementid,format:g.format||\'300x250\',testmode:!!g.testmode,onAdLoaded:g.onAdLoaded,onAdError:g.onAdError};if(g.bidid)ia.bidid=g.bidid;if(ea){w(ha,ia);}else{u(ha,ia,ca.document);v(ia);}; x(ia);ia.rootElement.dataset.placementid=ia.placementid;ha.ads.push(ia);};try{z();}catch(aa){i(aa.message||aa);throw aa;}})(window,document,location);\n</script>\n' + nativeContainer + '</div></body></html>'; | |
| }; | |
| /** | |
| * Get the current window location URL correctly encoded for use in a URL query string. | |
| * @returns {String} URI-encoded URL | |
| */ | |
| var getTopWindowUrlEncoded = function getTopWindowUrlEncoded() { | |
| return encodeURIComponent((0, _utils.getTopWindowUrl)()); | |
| }; | |
| /** | |
| * Convert each bid request to a single URL to fetch those bids. | |
| * @param {Array} bids - list of bids | |
| * @param {String} bids[].placementCode - Prebid placement identifier | |
| * @param {Object} bids[].params | |
| * @param {String} bids[].params.placementId - Audience Network placement identifier | |
| * @param {String} bids[].params.format - Optional format, one of 'video', 'native' or 'fullwidth' if set | |
| * @param {Array} bids[].sizes - list of desired advert sizes | |
| * @param {Array} bids[].sizes[] - Size arrays [h,w]: should include one of [300, 250], [320, 50]: first matched size is used | |
| * @returns {Array<Object>} List of URLs to fetch, plus formats and sizes for later use with interpretResponse | |
| */ | |
| var buildRequests = function buildRequests(bids) { | |
| // Build lists of placementids, adformats, sizes and SDK versions | |
| var placementids = []; | |
| var adformats = []; | |
| var sizes = []; | |
| var sdk = []; | |
| var requestIds = []; | |
| bids.forEach(function (bid) { | |
| return bid.sizes.map(flattenSize).filter(function (size) { | |
| return isValidSizeAndFormat(size, bid.params.format); | |
| }).slice(0, 1).forEach(function (size) { | |
| placementids.push(bid.params.placementId); | |
| adformats.push(bid.params.format || size); | |
| sizes.push(size); | |
| sdk.push(sdkVersion(bid.params.format)); | |
| requestIds.push(bid.bidId); | |
| }); | |
| }); | |
| // Build URL | |
| var testmode = isTestmode(); | |
| var pageurl = getTopWindowUrlEncoded(); | |
| var search = { | |
| placementids: placementids, | |
| adformats: adformats, | |
| testmode: testmode, | |
| pageurl: pageurl, | |
| sdk: sdk, | |
| pbv: pbv | |
| }; | |
| var video = (0, _findIndex2['default'])(adformats, isVideo); | |
| if (video !== -1) { | |
| var _expandSize = expandSize(sizes[video]); | |
| var _expandSize2 = _slicedToArray(_expandSize, 2); | |
| search.playerwidth = _expandSize2[0]; | |
| search.playerheight = _expandSize2[1]; | |
| } | |
| if ((0, _utils.isSafariBrowser)()) { | |
| search.cb = (0, _utils.generateUUID)(); | |
| } | |
| var data = (0, _url.formatQS)(search); | |
| return [{ adformats: adformats, data: data, method: method, requestIds: requestIds, sizes: sizes, url: url }]; | |
| }; | |
| /** | |
| * Convert a server response to a bid response. | |
| * @param {Object} response - object representing the response | |
| * @param {Object} response.body - response body, already converted from JSON | |
| * @param {Object} bidRequests - the original bid requests | |
| * @param {Array} bidRequest.adformats - list of formats for the original bid requests | |
| * @param {Array} bidRequest.sizes - list of sizes fot the original bid requests | |
| * @returns {Array<Object>} A list of bid response objects | |
| */ | |
| var interpretResponse = function interpretResponse(_ref, _ref2) { | |
| var body = _ref.body; | |
| var adformats = _ref2.adformats, | |
| requestIds = _ref2.requestIds, | |
| sizes = _ref2.sizes; | |
| var ttl = Number(_config.config.getConfig().bidderTimeout); | |
| var _body$bids = body.bids, | |
| bids = _body$bids === undefined ? {} : _body$bids; | |
| return Object.keys(bids) | |
| // extract Array of bid responses | |
| .map(function (placementId) { | |
| return bids[placementId]; | |
| }) | |
| // flatten | |
| .reduce(function (a, b) { | |
| return a.concat(b); | |
| }, []) | |
| // transform to bidResponse | |
| .map(function (bid, i) { | |
| var fb_bidid = bid.bid_id, | |
| creativeId = bid.placement_id, | |
| cpm = bid.bid_price_cents; | |
| var format = adformats[i]; | |
| var _expandSize3 = expandSize(flattenSize(sizes[i])), | |
| _expandSize4 = _slicedToArray(_expandSize3, 2), | |
| width = _expandSize4[0], | |
| height = _expandSize4[1]; | |
| var ad = createAdHtml(creativeId, format, fb_bidid); | |
| var requestId = requestIds[i]; | |
| var bidResponse = { | |
| // Prebid attributes | |
| requestId: requestId, | |
| cpm: cpm / 100, | |
| width: width, | |
| height: height, | |
| ad: ad, | |
| ttl: ttl, | |
| creativeId: creativeId, | |
| netRevenue: netRevenue, | |
| currency: currency, | |
| // Audience Network attributes | |
| hb_bidder: hb_bidder, | |
| fb_bidid: fb_bidid, | |
| fb_format: format, | |
| fb_placementid: creativeId | |
| }; | |
| // Video attributes | |
| if (isVideo(format)) { | |
| var pageurl = getTopWindowUrlEncoded(); | |
| bidResponse.mediaType = 'video'; | |
| bidResponse.vastUrl = 'https://an.facebook.com/v1/instream/vast.xml?placementid=' + creativeId + '&pageurl=' + pageurl + '&playerwidth=' + width + '&playerheight=' + height + '&bidid=' + fb_bidid; | |
| } | |
| return bidResponse; | |
| }); | |
| }; | |
| var spec = exports.spec = { | |
| code: code, | |
| supportedMediaTypes: supportedMediaTypes, | |
| isBidRequestValid: isBidRequestValid, | |
| buildRequests: buildRequests, | |
| interpretResponse: interpretResponse | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 122: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[120]); | |
| pbjsChunk([84],{ | |
| /***/ 123: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(124); | |
| module.exports = __webpack_require__(125); | |
| /***/ }), | |
| /***/ 124: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = exports.BANNER_ENDPOINT = exports.VIDEO_ENDPOINT = undefined; | |
| 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 utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| 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 ADAPTER_VERSION = '1.0'; | |
| var ADAPTER_NAME = 'BFIO_PREBID'; | |
| var VIDEO_ENDPOINT = exports.VIDEO_ENDPOINT = '//reachms.bfmio.com/bid.json?exchange_id='; | |
| var BANNER_ENDPOINT = exports.BANNER_ENDPOINT = '//display.bfmio.com/prebid_display'; | |
| var spec = exports.spec = { | |
| code: 'beachfront', | |
| supportedMediaTypes: [_mediaTypes.VIDEO, _mediaTypes.BANNER], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.appId && bid.params.bidfloor); | |
| }, | |
| buildRequests: function buildRequests(bids) { | |
| var requests = []; | |
| var videoBids = bids.filter(function (bid) { | |
| return isVideoBid(bid); | |
| }); | |
| var bannerBids = bids.filter(function (bid) { | |
| return !isVideoBid(bid); | |
| }); | |
| videoBids.forEach(function (bid) { | |
| requests.push({ | |
| method: 'POST', | |
| url: VIDEO_ENDPOINT + bid.params.appId, | |
| data: createVideoRequestData(bid), | |
| bidRequest: bid | |
| }); | |
| }); | |
| if (bannerBids.length) { | |
| requests.push({ | |
| method: 'POST', | |
| url: BANNER_ENDPOINT, | |
| data: createBannerRequestData(bannerBids), | |
| bidRequest: bannerBids | |
| }); | |
| } | |
| return requests; | |
| }, | |
| interpretResponse: function interpretResponse(response, _ref) { | |
| var bidRequest = _ref.bidRequest; | |
| response = response.body; | |
| if (isVideoBid(bidRequest)) { | |
| if (!response || !response.url || !response.bidPrice) { | |
| utils.logWarn('No valid video bids from ' + spec.code + ' bidder'); | |
| return []; | |
| } | |
| var size = getFirstSize(bidRequest); | |
| return { | |
| requestId: bidRequest.bidId, | |
| bidderCode: spec.code, | |
| vastUrl: response.url, | |
| cpm: response.bidPrice, | |
| width: size.w, | |
| height: size.h, | |
| creativeId: response.cmpId, | |
| mediaType: _mediaTypes.VIDEO, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 300 | |
| }; | |
| } else { | |
| if (!response || !response.length) { | |
| utils.logWarn('No valid banner bids from ' + spec.code + ' bidder'); | |
| return []; | |
| } | |
| return response.map(function (bid) { | |
| var request = (0, _find2['default'])(bidRequest, function (req) { | |
| return req.adUnitCode === bid.slot; | |
| }); | |
| return { | |
| requestId: request.bidId, | |
| bidderCode: spec.code, | |
| ad: bid.adm, | |
| creativeId: bid.crid, | |
| cpm: bid.price, | |
| width: bid.w, | |
| height: bid.h, | |
| mediaType: _mediaTypes.BANNER, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 300 | |
| }; | |
| }); | |
| } | |
| } | |
| }; | |
| function getSizes(bid) { | |
| return utils.parseSizesInput(bid.sizes).map(function (size) { | |
| var _size$split = size.split('x'), | |
| _size$split2 = _slicedToArray(_size$split, 2), | |
| width = _size$split2[0], | |
| height = _size$split2[1]; | |
| return { | |
| w: parseInt(width, 10) || undefined, | |
| h: parseInt(height, 10) || undefined | |
| }; | |
| }); | |
| } | |
| function getFirstSize(bid) { | |
| var sizes = getSizes(bid); | |
| return sizes.length ? sizes[0] : { w: undefined, h: undefined }; | |
| } | |
| function getOsVersion() { | |
| var clientStrings = [{ s: 'Android', r: /Android/ }, { s: 'iOS', r: /(iPhone|iPad|iPod)/ }, { s: 'Mac OS X', r: /Mac OS X/ }, { s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ }, { s: 'Linux', r: /(Linux|X11)/ }, { s: 'Windows 10', r: /(Windows 10.0|Windows NT 10.0)/ }, { s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/ }, { s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/ }, { s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/ }, { s: 'Windows Vista', r: /Windows NT 6.0/ }, { s: 'Windows Server 2003', r: /Windows NT 5.2/ }, { s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/ }, { s: 'UNIX', r: /UNIX/ }, { s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ }]; | |
| var cs = (0, _find2['default'])(clientStrings, function (cs) { | |
| return cs.r.test(navigator.userAgent); | |
| }); | |
| return cs ? cs.s : 'unknown'; | |
| } | |
| function isMobile() { | |
| return (/(ios|ipod|ipad|iphone|android)/i.test(navigator.userAgent) | |
| ); | |
| } | |
| function isConnectedTV() { | |
| return (/(smart[-]?tv|hbbtv|appletv|googletv|hdmi|netcast\.tv|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b)/i.test(navigator.userAgent) | |
| ); | |
| } | |
| function getDoNotTrack() { | |
| return navigator.doNotTrack === '1' || window.doNotTrack === '1' || navigator.msDoNoTrack === '1' || navigator.doNotTrack === 'yes'; | |
| } | |
| function isVideoBid(bid) { | |
| return bid.mediaTypes && bid.mediaTypes.video; | |
| } | |
| function createVideoRequestData(bid) { | |
| var size = getFirstSize(bid); | |
| var topLocation = utils.getTopWindowLocation(); | |
| return { | |
| isPrebid: true, | |
| appId: bid.params.appId, | |
| domain: document.location.hostname, | |
| id: utils.getUniqueIdentifierStr(), | |
| imp: [{ | |
| video: { | |
| w: size.w, | |
| h: size.h | |
| }, | |
| bidfloor: bid.params.bidfloor | |
| }], | |
| site: { | |
| page: topLocation.host | |
| }, | |
| device: { | |
| ua: navigator.userAgent, | |
| devicetype: isMobile() ? 1 : isConnectedTV() ? 3 : 2, | |
| geo: {} | |
| }, | |
| cur: ['USD'] | |
| }; | |
| } | |
| function createBannerRequestData(bids) { | |
| var topLocation = utils.getTopWindowLocation(); | |
| var referrer = utils.getTopWindowReferrer(); | |
| var slots = bids.map(function (bid) { | |
| return { | |
| slot: bid.adUnitCode, | |
| id: bid.params.appId, | |
| bidfloor: bid.params.bidfloor, | |
| sizes: getSizes(bid) | |
| }; | |
| }); | |
| return { | |
| slots: slots, | |
| page: topLocation.href, | |
| domain: topLocation.hostname, | |
| search: topLocation.search, | |
| secure: topLocation.protocol === 'https:' ? 1 : 0, | |
| referrer: referrer, | |
| ua: navigator.userAgent, | |
| deviceOs: getOsVersion(), | |
| isMobile: isMobile() ? 1 : 0, | |
| dnt: getDoNotTrack() ? 1 : 0, | |
| adapterVersion: ADAPTER_VERSION, | |
| adapterName: ADAPTER_NAME | |
| }; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 125: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[123]); | |
| pbjsChunk([83],{ | |
| /***/ 126: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(127); | |
| module.exports = __webpack_require__(128); | |
| /***/ }), | |
| /***/ 127: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| 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 BIDDER_CODE = 'bridgewell'; | |
| var REQUEST_ENDPOINT = '//rec.scupio.com/recweb/prebid.aspx'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| var valid = false; | |
| var typeOfCpmWeight = void 0; | |
| if (bid && bid.params) { | |
| if (bid.params.ChannelID) { | |
| // cpmWeight is optinal parameter and should above than zero | |
| typeOfCpmWeight = _typeof(bid.params.cpmWeight); | |
| if (typeOfCpmWeight === 'undefined') { | |
| bid.params.cpmWeight = 1; | |
| valid = true; | |
| } else if (typeOfCpmWeight === 'number' && bid.params.cpmWeight > 0) { | |
| valid = true; | |
| } else { | |
| valid = false; | |
| } | |
| } | |
| } | |
| return valid; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} validBidRequests - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var channelIDs = []; | |
| utils._each(validBidRequests, function (bid) { | |
| channelIDs.push(bid.params.ChannelID); | |
| }); | |
| return { | |
| method: 'GET', | |
| url: REQUEST_ENDPOINT, | |
| data: { | |
| 'ChannelID': channelIDs.join(',') | |
| }, | |
| validBidRequests: validBidRequests | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @param {*} bidRequest | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| // map responses to requests | |
| utils._each(bidRequest.validBidRequests, function (req) { | |
| var bidResponse = {}; | |
| if (!serverResponse.body) { | |
| return; | |
| } | |
| var matchedResponse = (0, _find2['default'])(serverResponse.body, function (res) { | |
| return !!res && !res.consumed && (0, _find2['default'])(req.sizes, function (size) { | |
| return res.width === size[0] && res.height === size[1]; | |
| }); | |
| }); | |
| if (matchedResponse) { | |
| matchedResponse.consumed = true; | |
| // check required parameters | |
| if (typeof matchedResponse.cpm !== 'number') { | |
| return; | |
| } else if (typeof matchedResponse.width !== 'number' || typeof matchedResponse.height !== 'number') { | |
| return; | |
| } else if (typeof matchedResponse.ad !== 'string') { | |
| return; | |
| } else if (typeof matchedResponse.net_revenue === 'undefined') { | |
| return; | |
| } else if (typeof matchedResponse.currency !== 'string') { | |
| return; | |
| } | |
| bidResponse.requestId = req.bidId; | |
| bidResponse.cpm = matchedResponse.cpm * req.params.cpmWeight; | |
| bidResponse.width = matchedResponse.width; | |
| bidResponse.height = matchedResponse.height; | |
| bidResponse.ad = matchedResponse.ad; | |
| bidResponse.ttl = matchedResponse.ttl; | |
| bidResponse.creativeId = matchedResponse.id; | |
| bidResponse.netRevenue = matchedResponse.net_revenue === 'true'; | |
| bidResponse.currency = matchedResponse.currency; | |
| bidResponses.push(bidResponse); | |
| } | |
| }); | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 128: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[126]); | |
| pbjsChunk([82],{ | |
| /***/ 129: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(130); | |
| module.exports = __webpack_require__(131); | |
| /***/ }), | |
| /***/ 130: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.c1xAdapter = 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 _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _userSync = __webpack_require__(13); | |
| 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 BIDDER_CODE = 'c1x'; | |
| var URL = 'https://ht.c1exchange.com/ht'; | |
| var PIXEL_ENDPOINT = '//px.c1exchange.com/pubpixel/'; | |
| 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: ' | |
| }; | |
| /** | |
| * Adapter for requesting bids from C1X header tag server. | |
| * v3.0 (c) C1X Inc., 2017 | |
| */ | |
| var c1xAdapter = exports.c1xAdapter = { | |
| code: BIDDER_CODE, | |
| // check the bids sent to c1x bidder | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| var siteId = bid.params.siteId || ''; | |
| if (!siteId) { | |
| utils.logError(LOG_MSG.noSite); | |
| } | |
| return !!(bid.adUnitCode && siteId); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var payload = {}; | |
| var tagObj = {}; | |
| var adunits = bidRequests.length; | |
| var rnd = new Date().getTime(); | |
| var c1xTags = bidRequests.map(bidToTag); | |
| var bidIdTags = bidRequests.map(bidToShortTag); // include only adUnitCode and bidId from request obj | |
| // flattened tags in a tag object | |
| tagObj = c1xTags.reduce(function (current, next) { | |
| return _extends(current, next); | |
| }); | |
| var pixelId = tagObj.pixelId; | |
| var useSSL = document.location.protocol; | |
| payload = { | |
| adunits: adunits.toString(), | |
| rnd: rnd.toString(), | |
| response: 'json', | |
| compress: 'gzip' | |
| }; | |
| _extends(payload, tagObj); | |
| var payloadString = stringifyPayload(payload); | |
| if (pixelId) { | |
| var pixelUrl = (useSSL ? 'https:' : 'http:') + PIXEL_ENDPOINT + pixelId; | |
| _userSync.userSync.registerSync('image', BIDDER_CODE, pixelUrl); | |
| } | |
| // ServerRequest object | |
| return { | |
| method: 'GET', | |
| url: URL, | |
| data: payloadString, | |
| bids: bidIdTags | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, requests) { | |
| serverResponse = serverResponse.body; | |
| requests = requests.bids || []; | |
| var currency = 'USD'; | |
| var bidResponses = []; | |
| var netRevenue = false; | |
| if (!serverResponse || serverResponse.error) { | |
| var errorMessage = serverResponse.error; | |
| utils.logError(LOG_MSG.invalidBid + errorMessage); | |
| return bidResponses; | |
| } else { | |
| serverResponse.forEach(function (bid) { | |
| if (bid.bid) { | |
| if (bid.bidType === 'NET_BID') { | |
| netRevenue = !netRevenue; | |
| } | |
| var curBid = { | |
| width: bid.width, | |
| height: bid.height, | |
| cpm: bid.cpm, | |
| ad: bid.ad, | |
| creativeId: bid.crid, | |
| currency: currency, | |
| ttl: 300, | |
| netRevenue: netRevenue | |
| }; | |
| for (var i = 0; i < requests.length; i++) { | |
| if (bid.adId === requests[i].adUnitCode) { | |
| curBid.requestId = requests[i].bidId; | |
| } | |
| } | |
| utils.logInfo(LOG_MSG.bidWin + bid.adId + ' size: ' + curBid.width + 'x' + curBid.height); | |
| bidResponses.push(curBid); | |
| } else { | |
| // no bid | |
| utils.logInfo(LOG_MSG.noBid + bid.adId); | |
| } | |
| }); | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| function bidToTag(bid, index) { | |
| var tag = {}; | |
| var adIndex = 'a' + (index + 1).toString(); // ad unit id for c1x | |
| var sizeKey = adIndex + 's'; | |
| var priceKey = adIndex + 'p'; | |
| // TODO: Multiple Floor Prices | |
| var sizesArr = bid.sizes; | |
| var floorPriceMap = bid.params.floorPriceMap || ''; | |
| tag['site'] = bid.params.siteId || ''; | |
| // prevent pixelId becoming undefined when publishers don't fill this param in ad units they have on the same page | |
| if (bid.params.pixelId) { | |
| tag['pixelId'] = bid.params.pixelId; | |
| } | |
| tag[adIndex] = bid.adUnitCode; | |
| tag[sizeKey] = sizesArr.reduce(function (prev, current) { | |
| return prev + (prev === '' ? '' : ',') + current.join('x'); | |
| }, ''); | |
| var newSizeArr = tag[sizeKey].split(','); | |
| if (floorPriceMap) { | |
| newSizeArr.forEach(function (size) { | |
| if (size in floorPriceMap) { | |
| tag[priceKey] = floorPriceMap[size].toString(); | |
| } // we only accept one cpm price in floorPriceMap | |
| }); | |
| } | |
| if (bid.params.pageurl) { | |
| tag['pageurl'] = bid.params.pageurl; | |
| } | |
| return tag; | |
| } | |
| function bidToShortTag(bid) { | |
| var tag = {}; | |
| tag.adUnitCode = bid.adUnitCode; | |
| tag.bidId = bid.bidId; | |
| return tag; | |
| } | |
| function stringifyPayload(payload) { | |
| var payloadString = ''; | |
| payloadString = JSON.stringify(payload).replace(/":"|","|{"|"}/g, function (foundChar) { | |
| if (foundChar == '":"') return '=';else if (foundChar == '","') return '&';else return ''; | |
| }); | |
| return payloadString; | |
| } | |
| (0, _bidderFactory.registerBidder)(c1xAdapter); | |
| /***/ }), | |
| /***/ 131: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[129]); | |
| pbjsChunk([81],{ | |
| /***/ 132: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(133); | |
| module.exports = __webpack_require__(134); | |
| /***/ }), | |
| /***/ 133: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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 BIDDER_CODE = 'colossusssp'; | |
| var URL = '//colossusssp.com/?c=o&m=multi'; | |
| var URL_SYNC = '//colossusssp.com/?c=o&m=cookie'; | |
| var sizeObj = { | |
| '468x60': 1, | |
| '728x90': 2, | |
| '300x600': 10, | |
| '300x250': 15, | |
| '300x100': 19, | |
| '320x50': 43, | |
| '300x50': 44, | |
| '300x300': 48, | |
| '300x1050': 54, | |
| '970x90': 55, | |
| '970x250': 57, | |
| '1000x90': 58, | |
| '320x80': 59, | |
| '640x480': 65, | |
| '320x480': 67, | |
| '320x320': 72, | |
| '320x160': 73, | |
| '480x300': 83, | |
| '970x310': 94, | |
| '970x210': 96, | |
| '480x320': 101, | |
| '768x1024': 102, | |
| '1000x300': 113, | |
| '320x100': 117, | |
| '800x250': 118, | |
| '200x600': 119 | |
| }; | |
| utils._each(sizeObj, function (item, key) { | |
| return sizeObj[item] = key; | |
| }); | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !isNaN(bid.params.placement_id) && (bid.params.sizes !== undefined && bid.params.sizes.length > 0 && bid.params.sizes.some(function (sizeIndex) { | |
| return sizeObj[sizeIndex] !== undefined; | |
| }) || bid.sizes !== undefined && bid.sizes.length > 0 && bid.sizes.map(function (size) { | |
| return size[0] + 'x' + size[1]; | |
| }).some(function (size) { | |
| return sizeObj[size] !== undefined; | |
| })); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} validBidRequests A non-empty list of valid bid requests that should be sent to the Server. | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var winTop = window; | |
| try { | |
| window.top.location.toString(); | |
| winTop = window.top; | |
| } catch (e) { | |
| utils.logMessage(e); | |
| }; | |
| var location = utils.getTopWindowLocation(); | |
| var placements = []; | |
| var request = { | |
| 'deviceWidth': winTop.screen.width, | |
| 'deviceHeight': winTop.screen.height, | |
| 'language': navigator && navigator.language ? navigator.language : '', | |
| 'secure': location.protocol === 'https:' ? 1 : 0, | |
| 'host': location.host, | |
| 'page': location.pathname, | |
| 'placements': placements | |
| }; | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| var bid = validBidRequests[i]; | |
| var placement = {}; | |
| placement['placementId'] = bid.params.placement_id; | |
| placement['bidId'] = bid.bidId; | |
| placement['sizes'] = bid.sizes; | |
| placements.push(placement); | |
| } | |
| return { | |
| method: 'POST', | |
| url: URL, | |
| data: request | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| var response = []; | |
| try { | |
| serverResponse = serverResponse.body; | |
| for (var i = 0; i < serverResponse.length; i++) { | |
| var resItem = serverResponse[i]; | |
| if (resItem.width && !isNaN(resItem.width) && resItem.height && !isNaN(resItem.height) && resItem.requestId && typeof resItem.requestId === 'string' && resItem.cpm && !isNaN(resItem.cpm) && resItem.ad && typeof resItem.ad === 'string' && resItem.ttl && !isNaN(resItem.ttl) && resItem.creativeId && typeof resItem.creativeId === 'string' && resItem.netRevenue && typeof resItem.netRevenue === 'boolean' && resItem.currency && typeof resItem.currency === 'string') { | |
| response.push(resItem); | |
| } | |
| } | |
| } catch (e) { | |
| utils.logMessage(e); | |
| }; | |
| return response; | |
| }, | |
| getUserSyncs: function getUserSyncs() { | |
| return [{ | |
| type: 'image', | |
| url: URL_SYNC | |
| }]; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 134: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[132]); | |
| pbjsChunk([80],{ | |
| /***/ 135: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(136); | |
| module.exports = __webpack_require__(137); | |
| /***/ }), | |
| /***/ 136: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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 BIDDER_CODE = 'contentignite'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| pageID: Math.floor(Math.random() * 10e6), | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.accountID && bid.params.zoneID); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var i = void 0; | |
| var zoneID = void 0; | |
| var bidRequest = void 0; | |
| var accountID = void 0; | |
| var keyword = void 0; | |
| var requestURI = void 0; | |
| var serverRequests = []; | |
| var zoneCounters = {}; | |
| for (i = 0; i < validBidRequests.length; i++) { | |
| bidRequest = validBidRequests[i]; | |
| zoneID = utils.getBidIdParameter('zoneID', bidRequest.params); | |
| accountID = utils.getBidIdParameter('accountID', bidRequest.params); | |
| keyword = utils.getBidIdParameter('keyword', bidRequest.params); | |
| if (!(zoneID in zoneCounters)) { | |
| zoneCounters[zoneID] = 0; | |
| } | |
| requestURI = location.protocol + '//serve.connectignite.com/adserve/;type=hbr;'; | |
| requestURI += 'ID=' + encodeURIComponent(accountID) + ';'; | |
| requestURI += 'setID=' + encodeURIComponent(zoneID) + ';'; | |
| requestURI += 'pid=' + spec.pageID + ';'; | |
| requestURI += 'place=' + encodeURIComponent(zoneCounters[zoneID]) + ';'; | |
| // append the keyword for targeting if one was passed in | |
| if (keyword !== '') { | |
| requestURI += 'kw=' + encodeURIComponent(keyword) + ';'; | |
| } | |
| zoneCounters[zoneID]++; | |
| serverRequests.push({ | |
| method: 'GET', | |
| url: requestURI, | |
| data: {}, | |
| bidRequest: bidRequest | |
| }); | |
| } | |
| return serverRequests; | |
| }, | |
| // tslint:disable-next-line:cyclomatic-complexity | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidObj = bidRequest.bidRequest; | |
| var bidResponses = []; | |
| var bidResponse = {}; | |
| var isCorrectSize = false; | |
| var isCorrectCPM = true; | |
| var cpm = void 0; | |
| var minCPM = void 0; | |
| var maxCPM = void 0; | |
| var width = void 0; | |
| var height = void 0; | |
| serverResponse = serverResponse.body; | |
| if (serverResponse && serverResponse.status === 'SUCCESS' && bidObj) { | |
| cpm = serverResponse.cpm; | |
| minCPM = utils.getBidIdParameter('minCPM', bidObj.params); | |
| maxCPM = utils.getBidIdParameter('maxCPM', bidObj.params); | |
| width = parseInt(serverResponse.width); | |
| height = parseInt(serverResponse.height); | |
| // Ensure response CPM is within the given bounds | |
| if (minCPM !== '' && cpm < parseFloat(minCPM)) { | |
| isCorrectCPM = false; | |
| utils.logWarn('ContentIgnite: CPM did not meet minCPM requirements.'); | |
| } else if (maxCPM !== '' && cpm > parseFloat(maxCPM)) { | |
| isCorrectCPM = false; | |
| utils.logWarn('ContentIgnite: CPM did not meet maxCPM requirements.'); | |
| } | |
| // Ensure that response ad matches one of the placement sizes. | |
| utils._each(bidObj.sizes, function (size) { | |
| if (width === size[0] && height === size[1]) { | |
| isCorrectSize = true; | |
| } else { | |
| utils.logWarn('ContentIgnite: Returned ad is of a different size to that requested.'); | |
| } | |
| }); | |
| if (isCorrectCPM && isCorrectSize) { | |
| bidResponse.requestId = bidObj.bidId; | |
| bidResponse.creativeId = serverResponse.placement_id; | |
| bidResponse.cpm = cpm; | |
| bidResponse.width = width; | |
| bidResponse.height = height; | |
| bidResponse.ad = serverResponse.ad_code; | |
| bidResponse.currency = 'USD'; | |
| bidResponse.netRevenue = true; | |
| bidResponse.ttl = _config.config.getConfig('_bidderTimeout'); | |
| bidResponse.referrer = utils.getTopWindowUrl(); | |
| bidResponses.push(bidResponse); | |
| } | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 137: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[135]); | |
| pbjsChunk([79],{ | |
| /***/ 138: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(139); | |
| module.exports = __webpack_require__(140); | |
| /***/ }), | |
| /***/ 139: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __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; } } | |
| var BIDDER_CODE = 'conversant'; | |
| var URL = '//media.msg.dotomi.com/s2s/header/24'; | |
| var SYNC_URL = '//media.msg.dotomi.com/w/user.sync'; | |
| var VERSION = '2.2.2'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['cnvr'], // short code | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid - The bid params to validate. | |
| * @return {boolean} True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (!bid || !bid.params) { | |
| utils.logWarn(BIDDER_CODE + ': Missing bid parameters'); | |
| return false; | |
| } | |
| if (!utils.isStr(bid.params.site_id)) { | |
| utils.logWarn(BIDDER_CODE + ': site_id must be specified as a string'); | |
| return false; | |
| } | |
| if (isVideoRequest(bid)) { | |
| if (!bid.params.mimes) { | |
| // Give a warning but let it pass | |
| utils.logWarn(BIDDER_CODE + ': mimes should be specified for videos'); | |
| } else if (!utils.isArray(bid.params.mimes) || !bid.params.mimes.every(function (s) { | |
| return utils.isStr(s); | |
| })) { | |
| utils.logWarn(BIDDER_CODE + ': mimes must be an array of strings'); | |
| return false; | |
| } | |
| } | |
| return true; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} validBidRequests - an array of bids | |
| * @return {ServerRequest} Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var loc = utils.getTopWindowLocation(); | |
| var page = loc.href; | |
| var isPageSecure = loc.protocol === 'https:' ? 1 : 0; | |
| var siteId = ''; | |
| var requestId = ''; | |
| var pubcid = null; | |
| var conversantImps = validBidRequests.map(function (bid) { | |
| var bidfloor = utils.getBidIdParameter('bidfloor', bid.params); | |
| var secure = isPageSecure || (utils.getBidIdParameter('secure', bid.params) ? 1 : 0); | |
| siteId = utils.getBidIdParameter('site_id', bid.params); | |
| requestId = bid.auctionId; | |
| var format = convertSizes(bid.sizes); | |
| var imp = { | |
| id: bid.bidId, | |
| secure: secure, | |
| bidfloor: bidfloor || 0, | |
| displaymanager: 'Prebid.js', | |
| displaymanagerver: VERSION | |
| }; | |
| copyOptProperty(bid.params, 'tag_id', imp, 'tagid'); | |
| if (isVideoRequest(bid)) { | |
| var video = { | |
| w: format[0].w, | |
| h: format[0].h | |
| }; | |
| copyOptProperty(bid.params, 'position', video, 'pos'); | |
| copyOptProperty(bid.params, 'mimes', video); | |
| copyOptProperty(bid.params, 'maxduration', video); | |
| copyOptProperty(bid.params, 'protocols', video); | |
| copyOptProperty(bid.params, 'api', video); | |
| imp.video = video; | |
| } else { | |
| var banner = { format: format }; | |
| copyOptProperty(bid.params, 'position', banner, 'pos'); | |
| imp.banner = banner; | |
| } | |
| if (bid.crumbs && bid.crumbs.pubcid) { | |
| pubcid = bid.crumbs.pubcid; | |
| } | |
| return imp; | |
| }); | |
| var payload = { | |
| id: requestId, | |
| imp: conversantImps, | |
| site: { | |
| id: siteId, | |
| mobile: document.querySelector('meta[name="viewport"][content*="width=device-width"]') !== null ? 1 : 0, | |
| page: page | |
| }, | |
| device: getDevice(), | |
| at: 1 | |
| }; | |
| if (pubcid) { | |
| payload.user = { | |
| ext: { | |
| fpc: pubcid | |
| } | |
| }; | |
| } | |
| return { | |
| method: 'POST', | |
| url: URL, | |
| data: payload | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| var requestMap = {}; | |
| serverResponse = serverResponse.body; | |
| if (bidRequest && bidRequest.data && bidRequest.data.imp) { | |
| utils._each(bidRequest.data.imp, function (imp) { | |
| return requestMap[imp.id] = imp; | |
| }); | |
| } | |
| if (serverResponse && utils.isArray(serverResponse.seatbid)) { | |
| utils._each(serverResponse.seatbid, function (bidList) { | |
| utils._each(bidList.bid, function (conversantBid) { | |
| var responseCPM = parseFloat(conversantBid.price); | |
| if (responseCPM > 0.0 && conversantBid.impid) { | |
| var responseAd = conversantBid.adm || ''; | |
| var responseNurl = conversantBid.nurl || ''; | |
| var request = requestMap[conversantBid.impid]; | |
| var bid = { | |
| requestId: conversantBid.impid, | |
| currency: serverResponse.cur || 'USD', | |
| cpm: responseCPM, | |
| creativeId: conversantBid.crid || '', | |
| ttl: 300, | |
| netRevenue: true | |
| }; | |
| if (request.video) { | |
| bid.vastUrl = responseAd; | |
| bid.mediaType = 'video'; | |
| bid.width = request.video.w; | |
| bid.height = request.video.h; | |
| } else { | |
| bid.ad = responseAd + '<img src="' + responseNurl + '" />'; | |
| bid.width = conversantBid.w; | |
| bid.height = conversantBid.h; | |
| } | |
| bidResponses.push(bid); | |
| } | |
| }); | |
| }); | |
| } | |
| return bidResponses; | |
| }, | |
| /** | |
| * Return use sync info | |
| * | |
| * @param {SyncOptions} syncOptions - Info about usersyncs that the adapter should obey | |
| * @return {UserSync} Adapter sync type and url | |
| */ | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.pixelEnabled) { | |
| return [{ | |
| type: 'image', | |
| url: SYNC_URL | |
| }]; | |
| } | |
| } | |
| }; | |
| /** | |
| * Determine do-not-track state | |
| * | |
| * @returns {boolean} | |
| */ | |
| function getDNT() { | |
| return navigator.doNotTrack === '1' || window.doNotTrack === '1' || navigator.msDoNoTrack === '1' || navigator.doNotTrack === 'yes'; | |
| } | |
| /** | |
| * Return openrtb device object that includes ua, width, and height. | |
| * | |
| * @returns {Device} Openrtb device object | |
| */ | |
| function getDevice() { | |
| var language = navigator.language ? 'language' : 'userLanguage'; | |
| return { | |
| h: screen.height, | |
| w: screen.width, | |
| dnt: getDNT() ? 1 : 0, | |
| language: navigator[language].split('-')[0], | |
| make: navigator.vendor ? navigator.vendor : '', | |
| ua: navigator.userAgent | |
| }; | |
| } | |
| /** | |
| * Convert arrays of widths and heights to an array of objects with w and h properties. | |
| * | |
| * [[300, 250], [300, 600]] => [{w: 300, h: 250}, {w: 300, h: 600}] | |
| * | |
| * @param {number[2][]|number[2]} bidSizes - arrays of widths and heights | |
| * @returns {object[]} Array of objects with w and h | |
| */ | |
| function convertSizes(bidSizes) { | |
| var format = void 0; | |
| if (bidSizes.length === 2 && typeof bidSizes[0] === 'number' && typeof bidSizes[1] === 'number') { | |
| format = [{ w: bidSizes[0], h: bidSizes[1] }]; | |
| } else { | |
| format = utils._map(bidSizes, function (d) { | |
| return { w: d[0], h: d[1] }; | |
| }); | |
| } | |
| return format; | |
| } | |
| /** | |
| * Check if it's a video bid request | |
| * | |
| * @param {BidRequest} bid - Bid request generated from ad slots | |
| * @returns {boolean} True if it's a video bid | |
| */ | |
| function isVideoRequest(bid) { | |
| return bid.mediaType === 'video' || !!utils.deepAccess(bid, 'mediaTypes.video'); | |
| } | |
| /** | |
| * Copy property if exists from src to dst | |
| * | |
| * @param {object} src | |
| * @param {string} srcName | |
| * @param {object} dst | |
| * @param {string} [dstName] - Optional. If not specified then srcName is used. | |
| */ | |
| function copyOptProperty(src, srcName, dst, dstName) { | |
| dstName = dstName || srcName; | |
| var obj = utils.getBidIdParameter(srcName, src); | |
| if (obj !== '') { | |
| dst[dstName] = obj; | |
| } | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 140: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[138]); | |
| pbjsChunk([111],{ | |
| /***/ 141: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(142); | |
| /***/ }), | |
| /***/ 142: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.currencyRates = exports.currencySupportEnabled = undefined; | |
| 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.setConfig = setConfig; | |
| exports.addBidResponseHook = addBidResponseHook; | |
| var _bidfactory = __webpack_require__(15); | |
| var _bidfactory2 = _interopRequireDefault(_bidfactory); | |
| var _constants = __webpack_require__(3); | |
| var _ajax = __webpack_require__(6); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| var _hook = __webpack_require__(20); | |
| 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 DEFAULT_CURRENCY_RATE_URL = 'http://currency.prebid.org/latest.json'; | |
| var CURRENCY_RATE_PRECISION = 4; | |
| var bidResponseQueue = []; | |
| var conversionCache = {}; | |
| var currencyRatesLoaded = false; | |
| var adServerCurrency = 'USD'; | |
| var currencySupportEnabled = exports.currencySupportEnabled = false; | |
| var currencyRates = exports.currencyRates = {}; | |
| var bidderCurrencyDefault = {}; | |
| var defaultRates; | |
| /** | |
| * Configuration function for currency | |
| * @param {string} [config.adServerCurrency = 'USD'] | |
| * ISO 4217 3-letter currency code that represents the target currency. (e.g. 'EUR'). If this value is present, | |
| * the currency conversion feature is activated. | |
| * @param {number} [config.granularityMultiplier = 1] | |
| * A decimal value representing how mcuh to scale the price granularity calculations. | |
| * @param {object} config.bidderCurrencyDefault | |
| * An optional argument to specify bid currencies for bid adapters. This option is provided for the transitional phase | |
| * before every bid adapter will specify its own bid currency. If the adapter specifies a bid currency, this value is | |
| * ignored for that bidder. | |
| * | |
| * example: | |
| * { | |
| * rubicon: 'USD' | |
| * } | |
| * @param {string} [config.conversionRateFile = 'http://currency.prebid.org/latest.json'] | |
| * Optional path to a file containing currency conversion data. Prebid.org hosts a file that is used as the default, | |
| * if not specified. | |
| * @param {object} [config.rates] | |
| * This optional argument allows you to specify the rates with a JSON object, subverting the need for a external | |
| * config.conversionRateFile parameter. If this argument is specified, the conversion rate file will not be loaded. | |
| * | |
| * example: | |
| * { | |
| * 'GBP': { 'CNY': 8.8282, 'JPY': 141.7, 'USD': 1.2824 }, | |
| * 'USD': { 'CNY': 6.8842, 'GBP': 0.7798, 'JPY': 110.49 } | |
| * } | |
| * @param {object} [config.defaultRates] | |
| * This optional currency rates definition follows the same format as config.rates, however it is only utilized if | |
| * there is an error loading the config.conversionRateFile. | |
| */ | |
| function setConfig(config) { | |
| var url = DEFAULT_CURRENCY_RATE_URL; | |
| if (_typeof(config.rates) === 'object') { | |
| currencyRates.conversions = config.rates; | |
| currencyRatesLoaded = true; | |
| } | |
| if (_typeof(config.defaultRates) === 'object') { | |
| defaultRates = config.defaultRates; | |
| } | |
| if (typeof config.adServerCurrency === 'string') { | |
| utils.logInfo('enabling currency support', arguments); | |
| adServerCurrency = config.adServerCurrency; | |
| if (config.conversionRateFile) { | |
| utils.logInfo('currency using override conversionRateFile:', config.conversionRateFile); | |
| url = config.conversionRateFile; | |
| } | |
| initCurrency(url); | |
| } else { | |
| // currency support is disabled, setting defaults | |
| utils.logInfo('disabling currency support'); | |
| resetCurrency(); | |
| } | |
| if (_typeof(config.bidderCurrencyDefault) === 'object') { | |
| bidderCurrencyDefault = config.bidderCurrencyDefault; | |
| } | |
| } | |
| _config.config.getConfig('currency', function (config) { | |
| return setConfig(config.currency); | |
| }); | |
| function errorSettingsRates(msg) { | |
| if (defaultRates) { | |
| currencyRates.conversions = defaultRates; | |
| currencyRatesLoaded = true; | |
| utils.logWarn(msg); | |
| utils.logWarn('Currency failed loading rates, falling back to currency.defaultRates'); | |
| } else { | |
| utils.logError(msg); | |
| } | |
| } | |
| function initCurrency(url) { | |
| conversionCache = {}; | |
| exports.currencySupportEnabled = currencySupportEnabled = true; | |
| utils.logInfo('Installing addBidResponse decorator for currency module', arguments); | |
| _hook.hooks['addBidResponse'].addHook(addBidResponseHook, 100); | |
| if (!currencyRates.conversions) { | |
| (0, _ajax.ajax)(url, { | |
| success: function success(response) { | |
| try { | |
| exports.currencyRates = currencyRates = JSON.parse(response); | |
| utils.logInfo('currencyRates set to ' + JSON.stringify(currencyRates)); | |
| currencyRatesLoaded = true; | |
| processBidResponseQueue(); | |
| } catch (e) { | |
| errorSettingsRates('Failed to parse currencyRates response: ' + response); | |
| } | |
| }, | |
| error: errorSettingsRates | |
| }); | |
| } | |
| } | |
| function resetCurrency() { | |
| utils.logInfo('Uninstalling addBidResponse decorator for currency module', arguments); | |
| _hook.hooks['addBidResponse'].removeHook(addBidResponseHook, 100); | |
| adServerCurrency = 'USD'; | |
| conversionCache = {}; | |
| exports.currencySupportEnabled = currencySupportEnabled = false; | |
| currencyRatesLoaded = false; | |
| exports.currencyRates = currencyRates = {}; | |
| bidderCurrencyDefault = {}; | |
| } | |
| function addBidResponseHook(adUnitCode, bid, fn) { | |
| if (!bid) { | |
| return fn.apply(this, arguments); // if no bid, call original and let it display warnings | |
| } | |
| var bidder = bid.bidderCode || bid.bidder; | |
| if (bidderCurrencyDefault[bidder]) { | |
| var currencyDefault = bidderCurrencyDefault[bidder]; | |
| if (bid.currency && currencyDefault !== bid.currency) { | |
| utils.logWarn('Currency default \'' + bidder + ': ' + currencyDefault + '\' ignored. adapter specified \'' + bid.currency + '\''); | |
| } else { | |
| bid.currency = currencyDefault; | |
| } | |
| } | |
| // default to USD if currency not set | |
| if (!bid.currency) { | |
| utils.logWarn('Currency not specified on bid. Defaulted to "USD"'); | |
| bid.currency = 'USD'; | |
| } | |
| // execute immediately if the bid is already in the desired currency | |
| if (bid.currency === adServerCurrency) { | |
| return fn.apply(this, arguments); | |
| } | |
| bidResponseQueue.push(wrapFunction(fn, this, arguments)); | |
| if (!currencySupportEnabled || currencyRatesLoaded) { | |
| processBidResponseQueue(); | |
| } | |
| } | |
| function processBidResponseQueue() { | |
| while (bidResponseQueue.length > 0) { | |
| bidResponseQueue.shift()(); | |
| } | |
| } | |
| function wrapFunction(fn, context, params) { | |
| return function () { | |
| var bid = params[1]; | |
| if (bid !== undefined && 'currency' in bid && 'cpm' in bid) { | |
| var fromCurrency = bid.currency; | |
| try { | |
| var conversion = getCurrencyConversion(fromCurrency); | |
| bid.originalCpm = bid.cpm; | |
| bid.originalCurrency = bid.currency; | |
| if (conversion !== 1) { | |
| bid.cpm = (parseFloat(bid.cpm) * conversion).toFixed(4); | |
| bid.currency = adServerCurrency; | |
| } | |
| } catch (e) { | |
| utils.logWarn('Returning NO_BID, getCurrencyConversion threw error: ', e); | |
| params[1] = _bidfactory2['default'].createBid(_constants.STATUS.NO_BID, { | |
| bidder: bid.bidderCode || bid.bidder, | |
| bidId: bid.adId | |
| }); | |
| } | |
| } | |
| return fn.apply(context, params); | |
| }; | |
| } | |
| function getCurrencyConversion(fromCurrency) { | |
| var conversionRate = null; | |
| var rates; | |
| if (fromCurrency in conversionCache) { | |
| conversionRate = conversionCache[fromCurrency]; | |
| utils.logMessage('Using conversionCache value ' + conversionRate + ' for fromCurrency ' + fromCurrency); | |
| } else if (currencySupportEnabled === false) { | |
| if (fromCurrency === 'USD') { | |
| conversionRate = 1; | |
| } else { | |
| throw new Error('Prebid currency support has not been enabled and fromCurrency is not USD'); | |
| } | |
| } else if (fromCurrency === adServerCurrency) { | |
| conversionRate = 1; | |
| } else { | |
| var toCurrency = adServerCurrency; | |
| if (fromCurrency in currencyRates.conversions) { | |
| // using direct conversion rate from fromCurrency to toCurrency | |
| rates = currencyRates.conversions[fromCurrency]; | |
| if (!(toCurrency in rates)) { | |
| // bid should fail, currency is not supported | |
| throw new Error('Specified adServerCurrency in config \'' + toCurrency + '\' not found in the currency rates file'); | |
| } | |
| conversionRate = rates[toCurrency]; | |
| utils.logInfo('getCurrencyConversion using direct ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate); | |
| } else if (toCurrency in currencyRates.conversions) { | |
| // using reciprocal of conversion rate from toCurrency to fromCurrency | |
| rates = currencyRates.conversions[toCurrency]; | |
| if (!(fromCurrency in rates)) { | |
| // bid should fail, currency is not supported | |
| throw new Error('Specified fromCurrency \'' + fromCurrency + '\' not found in the currency rates file'); | |
| } | |
| conversionRate = roundFloat(1 / rates[fromCurrency], CURRENCY_RATE_PRECISION); | |
| utils.logInfo('getCurrencyConversion using reciprocal ' + fromCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate); | |
| } else { | |
| // first defined currency base used as intermediary | |
| var anyBaseCurrency = Object.keys(currencyRates.conversions)[0]; | |
| if (!(fromCurrency in currencyRates.conversions[anyBaseCurrency])) { | |
| // bid should fail, currency is not supported | |
| throw new Error('Specified fromCurrency \'' + fromCurrency + '\' not found in the currency rates file'); | |
| } | |
| var toIntermediateConversionRate = 1 / currencyRates.conversions[anyBaseCurrency][fromCurrency]; | |
| if (!(toCurrency in currencyRates.conversions[anyBaseCurrency])) { | |
| // bid should fail, currency is not supported | |
| throw new Error('Specified adServerCurrency in config \'' + toCurrency + '\' not found in the currency rates file'); | |
| } | |
| var fromIntermediateConversionRate = currencyRates.conversions[anyBaseCurrency][toCurrency]; | |
| conversionRate = roundFloat(toIntermediateConversionRate * fromIntermediateConversionRate, CURRENCY_RATE_PRECISION); | |
| utils.logInfo('getCurrencyConversion using intermediate ' + fromCurrency + ' thru ' + anyBaseCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate); | |
| } | |
| } | |
| if (!(fromCurrency in conversionCache)) { | |
| utils.logMessage('Adding conversionCache value ' + conversionRate + ' for fromCurrency ' + fromCurrency); | |
| conversionCache[fromCurrency] = conversionRate; | |
| } | |
| return conversionRate; | |
| } | |
| function roundFloat(num, dec) { | |
| var d = 1; | |
| for (var i = 0; i < dec; i++) { | |
| d += '0'; | |
| } | |
| return Math.round(num * d) / d; | |
| } | |
| /***/ }) | |
| },[141]); | |
| pbjsChunk([78],{ | |
| /***/ 143: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(144); | |
| module.exports = __webpack_require__(145); | |
| /***/ }), | |
| /***/ 144: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'danmarket'; | |
| var ENDPOINT_URL = '//ads.danmarketplace.com/hb'; | |
| var TIME_TO_LIVE = 360; | |
| var ADAPTER_SYNC_URL = '//ads.danmarketplace.com/push_sync'; | |
| var LOG_ERROR_MESS = { | |
| noAuid: 'Bid from response has no auid parameter - ', | |
| noAdm: 'Bid from response has no adm parameter - ', | |
| noBid: 'Array of bid objects is empty', | |
| noPlacementCode: 'Can\'t find in requested bids the bid with auid - ', | |
| emptyUids: 'Uids should be not empty', | |
| emptySeatbid: 'Seatbid array from response has empty item', | |
| emptyResponse: 'Response is empty', | |
| hasEmptySeatbidArray: 'Response has empty seatbid array', | |
| hasNoArrayOfBids: 'Seatbid from response has no array of bid objects - ' | |
| }; | |
| /** | |
| * Dentsu Aegis Network Marketplace Bid Adapter. | |
| * Contact: [email protected] | |
| * | |
| */ | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['DANMarketplace', 'DAN_Marketplace', 'danmarketplace'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.uid; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var auids = []; | |
| var bidsMap = {}; | |
| var bids = validBidRequests || []; | |
| var priceType = 'net'; | |
| var reqId = void 0; | |
| bids.forEach(function (bid) { | |
| if (bid.params.priceType === 'gross') { | |
| priceType = 'gross'; | |
| } | |
| if (!bidsMap[bid.params.uid]) { | |
| bidsMap[bid.params.uid] = [bid]; | |
| auids.push(bid.params.uid); | |
| } else { | |
| bidsMap[bid.params.uid].push(bid); | |
| } | |
| reqId = bid.bidderRequestId; | |
| }); | |
| var payload = { | |
| u: utils.getTopWindowUrl(), | |
| pt: priceType, | |
| auids: auids.join(','), | |
| r: reqId | |
| }; | |
| return { | |
| method: 'GET', | |
| url: ENDPOINT_URL, | |
| data: payload, | |
| bidsMap: bidsMap | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| serverResponse = serverResponse && serverResponse.body; | |
| var bidResponses = []; | |
| var bidsMap = bidRequest.bidsMap; | |
| var priceType = bidRequest.data.pt; | |
| var errorMessage = void 0; | |
| if (!serverResponse) errorMessage = LOG_ERROR_MESS.emptyResponse;else if (serverResponse.seatbid && !serverResponse.seatbid.length) { | |
| errorMessage = LOG_ERROR_MESS.hasEmptySeatbidArray; | |
| } | |
| if (!errorMessage && serverResponse.seatbid) { | |
| serverResponse.seatbid.forEach(function (respItem) { | |
| _addBidResponse(_getBidFromResponse(respItem), bidsMap, priceType, bidResponses); | |
| }); | |
| } | |
| if (errorMessage) utils.logError(errorMessage); | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.pixelEnabled) { | |
| return [{ | |
| type: 'image', | |
| url: ADAPTER_SYNC_URL | |
| }]; | |
| } | |
| } | |
| }; | |
| function _getBidFromResponse(respItem) { | |
| if (!respItem) { | |
| utils.logError(LOG_ERROR_MESS.emptySeatbid); | |
| } else if (!respItem.bid) { | |
| utils.logError(LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); | |
| } else if (!respItem.bid[0]) { | |
| utils.logError(LOG_ERROR_MESS.noBid); | |
| } | |
| return respItem && respItem.bid && respItem.bid[0]; | |
| } | |
| function _addBidResponse(serverBid, bidsMap, priceType, bidResponses) { | |
| if (!serverBid) return; | |
| var errorMessage = void 0; | |
| if (!serverBid.auid) errorMessage = LOG_ERROR_MESS.noAuid + JSON.stringify(serverBid); | |
| if (!serverBid.adm) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);else { | |
| var awaitingBids = bidsMap[serverBid.auid]; | |
| if (awaitingBids) { | |
| awaitingBids.forEach(function (bid) { | |
| var bidResponse = { | |
| requestId: bid.bidId, // bid.bidderRequestId, | |
| cpm: serverBid.price, | |
| width: serverBid.w, | |
| height: serverBid.h, | |
| creativeId: serverBid.auid, // bid.bidId, | |
| currency: 'USD', | |
| netRevenue: priceType !== 'gross', | |
| ttl: TIME_TO_LIVE, | |
| ad: serverBid.adm, | |
| dealId: serverBid.dealid | |
| }; | |
| bidResponses.push(bidResponse); | |
| }); | |
| } else { | |
| errorMessage = LOG_ERROR_MESS.noPlacementCode + serverBid.auid; | |
| } | |
| } | |
| if (errorMessage) { | |
| utils.logError(errorMessage); | |
| } | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 145: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[143]); | |
| pbjsChunk([77],{ | |
| /***/ 146: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(147); | |
| /***/ }), | |
| /***/ 147: | |
| /***/ (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; }; /** | |
| * This module adds [DFP support]{@link https://www.doubleclickbygoogle.com/} for Video to Prebid. | |
| */ | |
| exports['default'] = buildDfpVideoUrl; | |
| var _adServerManager = __webpack_require__(148); | |
| var _targeting = __webpack_require__(37); | |
| var _url = __webpack_require__(12); | |
| var _utils = __webpack_require__(0); | |
| var _config = __webpack_require__(2); | |
| /** | |
| * @typedef {Object} DfpVideoParams | |
| * | |
| * This object contains the params needed to form a URL which hits the | |
| * [DFP API]{@link https://support.google.com/dfp_premium/answer/1068325?hl=en}. | |
| * | |
| * All params (except iu, mentioned below) should be considered optional. This module will choose reasonable | |
| * defaults for all of the other required params. | |
| * | |
| * The cust_params property, if present, must be an object. It will be merged with the rest of the | |
| * standard Prebid targeting params (hb_adid, hb_bidder, etc). | |
| * | |
| * @param {string} iu This param *must* be included, in order for us to create a valid request. | |
| * @param [string] description_url This field is required if you want Ad Exchange to bid on our ad unit... | |
| * but otherwise optional | |
| */ | |
| /** | |
| * @typedef {Object} DfpVideoOptions | |
| * | |
| * @param {Object} adUnit The adUnit which this bid is supposed to help fill. | |
| * @param [Object] bid The bid which should be considered alongside the rest of the adserver's demand. | |
| * If this isn't defined, then we'll use the winning bid for the adUnit. | |
| * | |
| * @param {DfpVideoParams} [params] Query params which should be set on the DFP request. | |
| * These will override this module's defaults whenever they conflict. | |
| * @param {string} [url] video adserver url | |
| */ | |
| /** Safe defaults which work on pretty much all video calls. */ | |
| var defaultParamConstants = { | |
| env: 'vp', | |
| gdfp_req: 1, | |
| output: 'xml_vast3', | |
| unviewed_position_start: 1 | |
| }; | |
| /** | |
| * Merge all the bid data and publisher-supplied options into a single URL, and then return it. | |
| * | |
| * @see [The DFP API]{@link https://support.google.com/dfp_premium/answer/1068325?hl=en#env} for details. | |
| * | |
| * @param {DfpVideoOptions} options Options which should be used to construct the URL. | |
| * | |
| * @return {string} A URL which calls DFP, letting options.bid | |
| * (or the auction's winning bid for this adUnit, if undefined) compete alongside the rest of the | |
| * demand in DFP. | |
| */ | |
| function buildDfpVideoUrl(options) { | |
| if (!options.params && !options.url) { | |
| (0, _utils.logError)('A params object or a url is required to use pbjs.adServers.dfp.buildVideoUrl'); | |
| return; | |
| } | |
| var adUnit = options.adUnit; | |
| var bid = options.bid || _targeting.targeting.getWinningBids(adUnit.code)[0]; | |
| var urlComponents = {}; | |
| if (options.url) { | |
| // when both `url` and `params` are given, parsed url will be overwriten | |
| // with any matching param components | |
| urlComponents = (0, _url.parse)(options.url); | |
| if ((0, _utils.isEmpty)(options.params)) { | |
| return buildUrlFromAdserverUrlComponents(urlComponents, bid); | |
| } | |
| } | |
| var derivedParams = { | |
| correlator: Date.now(), | |
| sz: (0, _utils.parseSizesInput)(adUnit.sizes).join('|'), | |
| url: location.href | |
| }; | |
| var adserverTargeting = bid && bid.adserverTargeting || {}; | |
| var customParams = _extends({}, adserverTargeting, { hb_uuid: bid && bid.videoCacheKey }, | |
| // hb_uuid will be deprecated and replaced by hb_cache_id | |
| { hb_cache_id: bid && bid.videoCacheKey }, options.params.cust_params); | |
| var queryParams = _extends({}, defaultParamConstants, urlComponents.search, derivedParams, options.params, { cust_params: encodeURIComponent((0, _url.formatQS)(customParams)) }); | |
| var descriptionUrl = getDescriptionUrl(bid, options, 'params'); | |
| if (descriptionUrl) { | |
| queryParams.description_url = descriptionUrl; | |
| } | |
| return (0, _url.format)({ | |
| protocol: 'https', | |
| host: 'pubads.g.doubleclick.net', | |
| pathname: '/gampad/ads', | |
| search: queryParams | |
| }); | |
| } | |
| /** | |
| * Builds a video url from a base dfp video url and a winning bid, appending | |
| * Prebid-specific key-values. | |
| * @param {Object} components base video adserver url parsed into components object | |
| * @param {AdapterBidResponse} bid winning bid object to append parameters from | |
| * @return {string} video url | |
| */ | |
| function buildUrlFromAdserverUrlComponents(components, bid) { | |
| var descriptionUrl = getDescriptionUrl(bid, components, 'search'); | |
| if (descriptionUrl) { | |
| components.search.description_url = descriptionUrl; | |
| } | |
| var adserverTargeting = bid && bid.adserverTargeting || {}; | |
| var customParams = _extends({}, adserverTargeting); | |
| components.search.cust_params = encodeURIComponent((0, _url.formatQS)(customParams)); | |
| return (0, _url.format)(components); | |
| } | |
| /** | |
| * Returns the encoded vast url if it exists on a bid object, only if prebid-cache | |
| * is disabled, and description_url is not already set on a given input | |
| * @param {AdapterBidResponse} bid object to check for vast url | |
| * @param {Object} components the object to check that description_url is NOT set on | |
| * @param {string} prop the property of components that would contain description_url | |
| * @return {string | undefined} The encoded vast url if it exists, or undefined | |
| */ | |
| function getDescriptionUrl(bid, components, prop) { | |
| if (_config.config.getConfig('cache.url')) { | |
| return; | |
| } | |
| if (!(0, _utils.deepAccess)(components, prop + '.description_url')) { | |
| var vastUrl = bid && bid.vastUrl; | |
| if (vastUrl) { | |
| return encodeURIComponent(vastUrl); | |
| } | |
| } else { | |
| (0, _utils.logError)('input cannnot contain description_url'); | |
| } | |
| } | |
| (0, _adServerManager.registerVideoSupport)('dfp', { | |
| buildVideoUrl: buildDfpVideoUrl | |
| }); | |
| /***/ }), | |
| /***/ 148: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.registerVideoSupport = registerVideoSupport; | |
| var _prebidGlobal = __webpack_require__(36); | |
| var _utils = __webpack_require__(0); | |
| var prebid = (0, _prebidGlobal.getGlobal)(); | |
| /** | |
| * This file defines the plugin points in prebid-core for AdServer-specific functionality. | |
| * | |
| * Its main job is to expose functions for AdServer modules to append functionality to the Prebid public API. | |
| * For a given Ad Server with name "adServerName", these functions will only change the API in the | |
| * pbjs.adServers[adServerName] namespace. | |
| */ | |
| /** | |
| * @typedef {Object} CachedVideoBid | |
| * | |
| * @property {string} videoCacheId The ID which can be used to retrieve this video from prebid-server. | |
| * This is the same ID given to the callback in the videoCache's store function. | |
| */ | |
| /** | |
| * @function VideoAdUrlBuilder | |
| * | |
| * @param {CachedVideoBid} bid The winning Bid which the ad server should show, assuming it beats out | |
| * the competition. | |
| * | |
| * @param {Object} options Options required by the Ad Server to make a valid AdServer URL. | |
| * This object will have different properties depending on the specific ad server supported. | |
| * For more information, see the docs inside the ad server module you're supporting. | |
| * | |
| * @return {string} A URL which can be passed into the Video player to play an ad. | |
| */ | |
| /** | |
| * @typedef {Object} VideoSupport | |
| * | |
| * @function {VideoAdUrlBuilder} buildVideoAdUrl | |
| */ | |
| /** | |
| * Enable video support for the Ad Server. | |
| * | |
| * @property {string} name The identifying name for this adserver. | |
| * @property {VideoSupport} videoSupport An object with the functions needed to support video in Prebid. | |
| */ | |
| function registerVideoSupport(name, videoSupport) { | |
| prebid.adServers = prebid.adServers || {}; | |
| prebid.adServers[name] = prebid.adServers[name] || {}; | |
| if (prebid.adServers[name].buildVideoUrl) { | |
| (0, _utils.logWarn)('Multiple calls to registerVideoSupport for AdServer ' + name + '. Expect surprising behavior.'); | |
| return; | |
| } | |
| prebid.adServers[name].buildVideoUrl = videoSupport.buildVideoUrl; | |
| } | |
| /***/ }) | |
| },[146]); | |
| pbjsChunk([1],{ | |
| /***/ 151: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(152); | |
| module.exports = __webpack_require__(153); | |
| /***/ }), | |
| /***/ 152: | |
| /***/ (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__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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__(3); | |
| var analyticsType = 'endpoint'; | |
| var EPL_HOST = 'https://ads.us.e-planning.net/hba/1/'; | |
| function auctionEndHandler(args) { | |
| return { auctionId: args.auctionId }; | |
| } | |
| function auctionInitHandler(args) { | |
| return { | |
| auctionId: args.auctionId, | |
| time: args.timestamp | |
| }; | |
| } | |
| function bidRequestedHandler(args) { | |
| return { | |
| auctionId: args.auctionId, | |
| time: args.start, | |
| bidder: args.bidderCode, | |
| bids: args.bids.map(function (bid) { | |
| return { | |
| time: bid.startTime, | |
| bidder: bid.bidder, | |
| placementCode: bid.placementCode, | |
| auctionId: bid.auctionId, | |
| sizes: bid.sizes | |
| }; | |
| }) | |
| }; | |
| } | |
| function bidResponseHandler(args) { | |
| return { | |
| bidder: args.bidder, | |
| size: args.size, | |
| auctionId: args.auctionId, | |
| cpm: args.cpm, | |
| time: args.responseTimestamp | |
| }; | |
| } | |
| function bidWonHandler(args) { | |
| return { | |
| auctionId: args.auctionId, | |
| size: args.width + 'x' + args.height | |
| }; | |
| } | |
| function bidTimeoutHandler(args) { | |
| return args.map(function (bid) { | |
| return { | |
| bidder: bid.bidder, | |
| auctionId: bid.auctionId | |
| }; | |
| }); | |
| } | |
| function callHandler(evtype, args) { | |
| var handler = null; | |
| if (evtype === CONSTANTS.EVENTS.AUCTION_INIT) { | |
| handler = auctionInitHandler; | |
| eplAnalyticsAdapter.context.events = []; | |
| } else if (evtype === CONSTANTS.EVENTS.AUCTION_END) { | |
| handler = auctionEndHandler; | |
| } else if (evtype === CONSTANTS.EVENTS.BID_REQUESTED) { | |
| handler = bidRequestedHandler; | |
| } else if (evtype === CONSTANTS.EVENTS.BID_RESPONSE) { | |
| handler = bidResponseHandler; | |
| } else if (evtype === CONSTANTS.EVENTS.BID_TIMEOUT) { | |
| handler = bidTimeoutHandler; | |
| } else if (evtype === CONSTANTS.EVENTS.BID_WON) { | |
| handler = bidWonHandler; | |
| } | |
| if (handler) { | |
| eplAnalyticsAdapter.context.events.push({ ec: evtype, p: handler(args) }); | |
| } | |
| } | |
| var eplAnalyticsAdapter = _extends((0, _AnalyticsAdapter2['default'])({ | |
| EPL_HOST: EPL_HOST, | |
| analyticsType: analyticsType | |
| }), { | |
| track: function track(_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| if (typeof args !== 'undefined') { | |
| callHandler(eventType, args); | |
| } | |
| if (eventType === CONSTANTS.EVENTS.AUCTION_END) { | |
| try { | |
| var strjson = JSON.stringify(eplAnalyticsAdapter.context.events); | |
| (0, _ajax.ajax)(eplAnalyticsAdapter.context.host + eplAnalyticsAdapter.context.ci + '?d=' + encodeURIComponent(strjson)); | |
| } catch (err) {} | |
| } | |
| } | |
| }); | |
| eplAnalyticsAdapter.originEnableAnalytics = eplAnalyticsAdapter.enableAnalytics; | |
| eplAnalyticsAdapter.enableAnalytics = function (config) { | |
| if (!config.options.ci) { | |
| utils.logError('Client ID (ci) option is not defined. Analytics won\'t work'); | |
| return; | |
| } | |
| eplAnalyticsAdapter.context = { | |
| events: [], | |
| host: config.options.host || EPL_HOST, | |
| ci: config.options.ci | |
| }; | |
| eplAnalyticsAdapter.originEnableAnalytics(config); | |
| }; | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: eplAnalyticsAdapter, | |
| code: 'eplanning' | |
| }); | |
| exports['default'] = eplAnalyticsAdapter; | |
| /***/ }), | |
| /***/ 153: | |
| /***/ (function(module, exports) { | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[151]); | |
| pbjsChunk([76],{ | |
| /***/ 154: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(155); | |
| module.exports = __webpack_require__(156); | |
| /***/ }), | |
| /***/ 155: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'eplanning'; | |
| var rnd = Math.random(); | |
| var DEFAULT_SV = 'ads.us.e-planning.net'; | |
| var DEFAULT_ISV = 'i.e-planning.net'; | |
| var PARAMS = ['ci', 'sv', 't']; | |
| var DOLLARS = 'USD'; | |
| var NET_REVENUE = true; | |
| var TTL = 120; | |
| var NULL_SIZE = '1x1'; | |
| var FILE = 'file'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return Boolean(bid.params.ci) || Boolean(bid.params.t); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var method = 'GET'; | |
| var dfpClientId = '1'; | |
| var sec = 'ROS'; | |
| var url = void 0; | |
| var params = void 0; | |
| var urlConfig = getUrlConfig(bidRequests); | |
| if (urlConfig.t) { | |
| url = urlConfig.isv + '/layers/t_pbjs_2.json'; | |
| params = {}; | |
| } else { | |
| url = '//' + (urlConfig.sv || DEFAULT_SV) + '/hb/1/' + urlConfig.ci + '/' + dfpClientId + '/' + (utils.getTopWindowLocation().hostname || FILE) + '/' + sec; | |
| var referrerUrl = utils.getTopWindowReferrer(); | |
| var spacesString = getSpacesString(bidRequests); | |
| params = { | |
| rnd: rnd, | |
| e: spacesString, | |
| ur: utils.getTopWindowUrl() || FILE, | |
| r: 'pbjs', | |
| pbv: '1.7.0-pre', | |
| ncb: '1' | |
| }; | |
| if (referrerUrl) { | |
| params.fr = referrerUrl; | |
| } | |
| } | |
| return { | |
| method: method, | |
| url: url, | |
| data: params, | |
| adUnitToBidId: getBidIdMap(bidRequests) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, request) { | |
| var response = serverResponse.body; | |
| var bidResponses = []; | |
| if (response && !utils.isEmpty(response.sp)) { | |
| response.sp.forEach(function (space) { | |
| if (!utils.isEmpty(space.a)) { | |
| space.a.forEach(function (ad) { | |
| var bidResponse = { | |
| requestId: request.adUnitToBidId[space.k], | |
| cpm: ad.pr, | |
| width: ad.w, | |
| height: ad.h, | |
| ad: ad.adm, | |
| ttl: TTL, | |
| creativeId: ad.crid, | |
| netRevenue: NET_REVENUE, | |
| currency: DOLLARS | |
| }; | |
| bidResponses.push(bidResponse); | |
| }); | |
| } | |
| }); | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| var syncs = []; | |
| var response = !utils.isEmpty(serverResponses) && serverResponses[0].body; | |
| if (response && !utils.isEmpty(response.cs)) { | |
| var responseSyncs = response.cs; | |
| responseSyncs.forEach(function (sync) { | |
| if (typeof sync === 'string' && syncOptions.pixelEnabled) { | |
| syncs.push({ | |
| type: 'image', | |
| url: sync | |
| }); | |
| } else if ((typeof sync === 'undefined' ? 'undefined' : _typeof(sync)) === 'object' && sync.ifr && syncOptions.iframeEnabled) { | |
| syncs.push({ | |
| type: 'iframe', | |
| url: sync.u | |
| }); | |
| } | |
| }); | |
| } | |
| return syncs; | |
| } | |
| }; | |
| function cleanName(name) { | |
| return name.replace(/_|\.|-|\//g, '').replace(/\)\(|\(|\)/g, '_').replace(/^_+|_+$/g, ''); | |
| } | |
| function getUrlConfig(bidRequests) { | |
| if (isTestRequest(bidRequests)) { | |
| return getTestConfig(bidRequests.filter(function (br) { | |
| return br.params.t; | |
| })); | |
| } | |
| var config = {}; | |
| bidRequests.forEach(function (bid) { | |
| PARAMS.forEach(function (param) { | |
| if (bid.params[param] && !config[param]) { | |
| config[param] = bid.params[param]; | |
| } | |
| }); | |
| }); | |
| if (config.sv) { | |
| config.sv = '//' + config.sv; | |
| } | |
| return config; | |
| } | |
| function isTestRequest(bidRequests) { | |
| var isTest = false; | |
| bidRequests.forEach(function (bid) { | |
| return isTest = bid.params.t; | |
| }); | |
| return isTest; | |
| } | |
| function getTestConfig(bidRequests) { | |
| var isv = void 0; | |
| bidRequests.forEach(function (br) { | |
| return isv = isv || br.params.isv; | |
| }); | |
| return { | |
| t: true, | |
| isv: '//' + (isv || DEFAULT_ISV) | |
| }; | |
| } | |
| function getSpacesString(bids) { | |
| var spacesString = bids.map(function (bid) { | |
| return cleanName(bid.adUnitCode) + ':' + (bid.sizes && bid.sizes.length ? utils.parseSizesInput(bid.sizes).join(',') : NULL_SIZE); | |
| }).join('+'); | |
| return spacesString; | |
| } | |
| function getBidIdMap(bidRequests) { | |
| var map = {}; | |
| bidRequests.forEach(function (bid) { | |
| return map[cleanName(bid.adUnitCode)] = bid.bidId; | |
| }); | |
| return map; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 156: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[154]); | |
| pbjsChunk([110],{ | |
| /***/ 157: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(158); | |
| /***/ }), | |
| /***/ 158: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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 MODULE_NAME = 'express'; | |
| /** | |
| * Express Module | |
| * | |
| * The express module allows the initiation of Prebid.js auctions automatically based on calls such as gpt.defineSlot. | |
| * It works by monkey-patching the gpt methods and overloading their functionality. In order for this module to be | |
| * used gpt must be included in the page, this module must be included in the Prebid.js bundle, and a call to | |
| * pbjs.express() must be made. | |
| * | |
| * @param {Object[]} [adUnits = pbjs.adUnits] - an array of adUnits for express to operate on. | |
| */ | |
| pbjs.express = function () { | |
| var adUnits = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : pbjs.adUnits; | |
| utils.logMessage('loading ' + MODULE_NAME); | |
| if (adUnits.length === 0) { | |
| utils.logWarn('no valid adUnits found, not loading ' + MODULE_NAME); | |
| } | |
| // store gpt slots in a more performant hash lookup by elementId (adUnit code) | |
| var gptSlotCache = {}; | |
| // put adUnits in a more performant hash lookup by code. | |
| var adUnitsCache = adUnits.reduce(function (cache, adUnit) { | |
| if (adUnit.code && adUnit.bids) { | |
| cache[adUnit.code] = adUnit; | |
| } else { | |
| utils.logError('misconfigured adUnit', null, adUnit); | |
| } | |
| return cache; | |
| }, {}); | |
| window.googletag = window.googletag || {}; | |
| window.googletag.cmd = window.googletag.cmd || []; | |
| window.googletag.cmd.push(function () { | |
| // verify all necessary gpt functions exist | |
| var gpt = window.googletag; | |
| var pads = gpt.pubads; | |
| if (!gpt.display || !gpt.enableServices || typeof pads !== 'function' || !pads().refresh || !pads().disableInitialLoad || !pads().getSlots || !pads().enableSingleRequest) { | |
| utils.logError('could not bind to gpt googletag api'); | |
| return; | |
| } | |
| utils.logMessage('running'); | |
| // function to convert google tag slot sizes to [[w,h],...] | |
| function mapGptSlotSizes(aGPTSlotSizes) { | |
| var aSlotSizes = []; | |
| for (var i = 0; i < aGPTSlotSizes.length; i++) { | |
| try { | |
| aSlotSizes.push([aGPTSlotSizes[i].getWidth(), aGPTSlotSizes[i].getHeight()]); | |
| } catch (e) { | |
| utils.logWarn('slot size ' + aGPTSlotSizes[i].toString() + ' not supported by' + MODULE_NAME); | |
| } | |
| } | |
| return aSlotSizes; | |
| } | |
| // a helper function to verify slots or get slots if not present | |
| function defaultSlots(slots) { | |
| return Array.isArray(slots) ? slots.slice() : googletag.pubads().getSlots().slice(); | |
| } | |
| // maps gpt slots to adUnits, matches are copied to new array and removed from passed array. | |
| function pickAdUnits(gptSlots) { | |
| 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]; | |
| var elemId = gptSlot.getSlotElementId(); | |
| var adUnit = adUnitsCache[elemId]; | |
| if (adUnit) { | |
| gptSlotCache[elemId] = gptSlot; // store by elementId | |
| adUnit.sizes = adUnit.sizes || mapGptSlotSizes(gptSlot.getSizes()); | |
| adUnits.push(adUnit); | |
| gptSlots.splice(i, 1); | |
| } | |
| } | |
| return adUnits; | |
| } | |
| // store original gpt functions that will be overridden | |
| var fGptDisplay = gpt.display; | |
| var fGptEnableServices = gpt.enableServices; | |
| var fGptRefresh = pads().refresh; | |
| var fGptDisableInitialLoad = pads().disableInitialLoad; | |
| var fGptEnableSingleRequest = pads().enableSingleRequest; | |
| // override googletag.enableServices() | |
| // - make sure fGptDisableInitialLoad() has been called so we can | |
| // better control when slots are displayed, then call original | |
| // fGptEnableServices() | |
| gpt.enableServices = function () { | |
| if (!bInitialLoadDisabled) { | |
| fGptDisableInitialLoad.apply(pads()); | |
| } | |
| return fGptEnableServices.apply(gpt, arguments); | |
| }; | |
| // override googletag.display() | |
| // - call the real fGptDisplay(). this won't initiate auctions because we've disabled initial load | |
| // - define all corresponding rubicon slots | |
| // - if disableInitialLoad() has been called by the pub, done | |
| // - else run an auction and call the real fGptRefresh() to | |
| // initiate the DFP request | |
| gpt.display = function (sElementId) { | |
| utils.logInfo('display:', sElementId); | |
| // call original gpt display() function | |
| fGptDisplay.apply(gpt, arguments); | |
| // if not SRA mode, get only the gpt slot corresponding to sEementId | |
| var aGptSlots; | |
| if (!bEnabledSRA) { | |
| aGptSlots = googletag.pubads().getSlots().filter(function (oGptSlot) { | |
| return oGptSlot.getSlotElementId() === sElementId; | |
| }); | |
| } | |
| aGptSlots = defaultSlots(aGptSlots).filter(function (gptSlot) { | |
| return !gptSlot._displayed; | |
| }); | |
| aGptSlots.forEach(function (gptSlot) { | |
| gptSlot._displayed = true; | |
| }); | |
| var adUnits = pickAdUnits( /* mutated: */aGptSlots); | |
| if (!bInitialLoadDisabled) { | |
| if (aGptSlots.length) { | |
| fGptRefresh.apply(pads(), [aGptSlots]); | |
| } | |
| if (adUnits.length) { | |
| pbjs.requestBids({ | |
| adUnits: adUnits, | |
| bidsBackHandler: function bidsBackHandler() { | |
| pbjs.setTargetingForGPTAsync(); | |
| fGptRefresh.apply(pads(), [adUnits.map(function (adUnit) { | |
| return gptSlotCache[adUnit.code]; | |
| })]); | |
| } | |
| }); | |
| } | |
| } | |
| }; | |
| // override gpt refresh() function | |
| // - run auctions for provided gpt slots, then initiate ad-server call | |
| pads().refresh = function (aGptSlots, options) { | |
| utils.logInfo('refresh:', aGptSlots); | |
| // get already displayed adUnits from aGptSlots if provided, else all defined gptSlots | |
| aGptSlots = defaultSlots(aGptSlots); | |
| var adUnits = pickAdUnits( /* mutated: */aGptSlots).filter(function (adUnit) { | |
| return gptSlotCache[adUnit.code]._displayed; | |
| }); | |
| if (aGptSlots.length) { | |
| fGptRefresh.apply(pads(), [aGptSlots, options]); | |
| } | |
| if (adUnits.length) { | |
| pbjs.requestBids({ | |
| adUnits: adUnits, | |
| bidsBackHandler: function bidsBackHandler() { | |
| pbjs.setTargetingForGPTAsync(); | |
| fGptRefresh.apply(pads(), [adUnits.map(function (adUnit) { | |
| return gptSlotCache[adUnit.code]; | |
| }), options]); | |
| } | |
| }); | |
| } | |
| }; | |
| // override gpt disableInitialLoad function | |
| // Register that initial load was called, meaning calls to display() | |
| // should not initiate an ad-server request. Instead a call to | |
| // refresh() will be needed to iniate the request. | |
| // We will assume the pub is using this the correct way, calling it | |
| // before enableServices() | |
| var bInitialLoadDisabled = false; | |
| pads().disableInitialLoad = function () { | |
| bInitialLoadDisabled = true; | |
| return fGptDisableInitialLoad.apply(window.googletag.pubads(), arguments); | |
| }; | |
| // override gpt useSingleRequest function | |
| // Register that SRA has been turned on | |
| // We will assume the pub is using this the correct way, calling it | |
| // before enableServices() | |
| var bEnabledSRA = false; | |
| pads().enableSingleRequest = function () { | |
| bEnabledSRA = true; | |
| return fGptEnableSingleRequest.apply(window.googletag.pubads(), arguments); | |
| }; | |
| }); | |
| }; | |
| /***/ }) | |
| },[157]); | |
| pbjsChunk([75],{ | |
| /***/ 159: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(160); | |
| module.exports = __webpack_require__(161); | |
| /***/ }), | |
| /***/ 160: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'fairtrade'; | |
| var ENDPOINT_URL = '//pool.fair-trademedia.com/hb'; | |
| var TIME_TO_LIVE = 360; | |
| var ADAPTER_SYNC_URL = '//pool.fair-trademedia.com/push_sync'; | |
| var LOG_ERROR_MESS = { | |
| noAuid: 'Bid from response has no auid parameter - ', | |
| noAdm: 'Bid from response has no adm parameter - ', | |
| noBid: 'Array of bid objects is empty', | |
| noPlacementCode: 'Can\'t find in requested bids the bid with auid - ', | |
| emptyUids: 'Uids should be not empty', | |
| emptySeatbid: 'Seatbid array from response has empty item', | |
| emptyResponse: 'Response is empty', | |
| hasEmptySeatbidArray: 'Response has empty seatbid array', | |
| hasNoArrayOfBids: 'Seatbid from response has no array of bid objects - ' | |
| }; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.uid; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} validBidRequests - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var auids = []; | |
| var bidsMap = {}; | |
| var bids = validBidRequests || []; | |
| var priceType = 'net'; | |
| var reqId = void 0; | |
| bids.forEach(function (bid) { | |
| if (bid.params.priceType === 'gross') { | |
| priceType = 'gross'; | |
| } | |
| reqId = bid.bidderRequestId; | |
| if (!bidsMap[bid.params.uid]) { | |
| bidsMap[bid.params.uid] = [bid]; | |
| auids.push(bid.params.uid); | |
| } else { | |
| bidsMap[bid.params.uid].push(bid); | |
| } | |
| }); | |
| var payload = { | |
| u: utils.getTopWindowUrl(), | |
| pt: priceType, | |
| auids: auids.join(','), | |
| r: reqId | |
| }; | |
| return { | |
| method: 'GET', | |
| url: ENDPOINT_URL, | |
| data: payload, | |
| bidsMap: bidsMap | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @param {*} bidRequest | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| serverResponse = serverResponse && serverResponse.body; | |
| var bidResponses = []; | |
| var bidsMap = bidRequest.bidsMap; | |
| var priceType = bidRequest.data.pt; | |
| var errorMessage = void 0; | |
| if (!serverResponse) errorMessage = LOG_ERROR_MESS.emptyResponse;else if (serverResponse.seatbid && !serverResponse.seatbid.length) { | |
| errorMessage = LOG_ERROR_MESS.hasEmptySeatbidArray; | |
| } | |
| if (!errorMessage && serverResponse.seatbid) { | |
| serverResponse.seatbid.forEach(function (respItem) { | |
| _addBidResponse(_getBidFromResponse(respItem), bidsMap, priceType, bidResponses); | |
| }); | |
| } | |
| if (errorMessage) utils.logError(errorMessage); | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.pixelEnabled) { | |
| return [{ | |
| type: 'image', | |
| url: ADAPTER_SYNC_URL | |
| }]; | |
| } | |
| } | |
| }; | |
| function _getBidFromResponse(respItem) { | |
| if (!respItem) { | |
| utils.logError(LOG_ERROR_MESS.emptySeatbid); | |
| } else if (!respItem.bid) { | |
| utils.logError(LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); | |
| } else if (!respItem.bid[0]) { | |
| utils.logError(LOG_ERROR_MESS.noBid); | |
| } | |
| return respItem && respItem.bid && respItem.bid[0]; | |
| } | |
| function _addBidResponse(serverBid, bidsMap, priceType, bidResponses) { | |
| if (!serverBid) return; | |
| var errorMessage = void 0; | |
| if (!serverBid.auid) errorMessage = LOG_ERROR_MESS.noAuid + JSON.stringify(serverBid); | |
| if (!serverBid.adm) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);else { | |
| var awaitingBids = bidsMap[serverBid.auid]; | |
| if (awaitingBids) { | |
| awaitingBids.forEach(function (bid) { | |
| var bidResponse = { | |
| requestId: bid.bidId, // bid.bidderRequestId, | |
| cpm: serverBid.price, | |
| width: serverBid.w, | |
| height: serverBid.h, | |
| creativeId: serverBid.auid, // bid.bidId, | |
| currency: 'USD', | |
| netRevenue: priceType !== 'gross', | |
| ttl: TIME_TO_LIVE, | |
| ad: serverBid.adm, | |
| dealId: serverBid.dealid | |
| }; | |
| bidResponses.push(bidResponse); | |
| }); | |
| } else { | |
| errorMessage = LOG_ERROR_MESS.noPlacementCode + serverBid.auid; | |
| } | |
| } | |
| if (errorMessage) { | |
| utils.logError(errorMessage); | |
| } | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 161: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[159]); | |
| pbjsChunk([74],{ | |
| /***/ 162: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(163); | |
| module.exports = __webpack_require__(164); | |
| /***/ }), | |
| /***/ 163: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'fidelity'; | |
| var BIDDER_SERVER = 'x.fidelity-media.com'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.zoneid); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests, bidderRequest) { | |
| return validBidRequests.map(function (bidRequest) { | |
| var server = bidRequest.params.server || BIDDER_SERVER; | |
| var payload = { | |
| from: 'hb', | |
| v: '1.0', | |
| requestid: bidRequest.bidderRequestId, | |
| impid: bidRequest.bidId, | |
| zoneid: bidRequest.params.zoneid, | |
| floor: parseFloat(bidRequest.params.floor) > 0 ? bidRequest.params.floor : 0, | |
| charset: document.charSet || document.characterSet, | |
| defloc: utils.getTopWindowUrl(), | |
| altloc: window.location.href, | |
| subid: 'hb', | |
| flashver: getFlashVersion(), | |
| tmax: bidderRequest.timeout | |
| }; | |
| if (document.referrer) { | |
| payload.referrer = document.referrer; | |
| } | |
| return { | |
| method: 'GET', | |
| url: '//' + server + '/delivery/hb.php', | |
| data: payload | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| serverResponse = serverResponse.body; | |
| var bidResponses = []; | |
| if (serverResponse && serverResponse.seatbid) { | |
| serverResponse.seatbid.forEach(function (seatBid) { | |
| return seatBid.bid.forEach(function (bid) { | |
| var bidResponse = { | |
| requestId: bid.impid, | |
| creativeId: bid.impid, | |
| cpm: bid.price, | |
| width: bid.width, | |
| height: bid.height, | |
| ad: bid.adm, | |
| netRevenue: bid.netRevenue, | |
| currency: bid.cur, | |
| ttl: bid.ttl | |
| }; | |
| bidResponses.push(bidResponse); | |
| }); | |
| }); | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: '//' + BIDDER_SERVER + '/delivery/matches.php?type=iframe' | |
| }]; | |
| } | |
| } | |
| }; | |
| function getFlashVersion() { | |
| var plugins, plugin, result; | |
| if (navigator.plugins && navigator.plugins.length > 0) { | |
| plugins = navigator.plugins; | |
| for (var i = 0; i < plugins.length && !result; i++) { | |
| plugin = plugins[i]; | |
| if (plugin.name.indexOf('Shockwave Flash') > -1) { | |
| result = plugin.description.split('Shockwave Flash ')[1]; | |
| } | |
| } | |
| } | |
| return result || ''; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 164: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[162]); | |
| pbjsChunk([73],{ | |
| /***/ 165: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(166); | |
| module.exports = __webpack_require__(167); | |
| /***/ }), | |
| /***/ 166: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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; } } | |
| // import { config } from 'src/config'; | |
| var BIDDER_CODE = 'freewheel-ssp'; | |
| var PROTOCOL = getProtocol(); | |
| var FREEWHEEL_ADSSETUP = PROTOCOL + '://ads.stickyadstv.com/www/delivery/swfIndex.php'; | |
| var MUSTANG_URL = PROTOCOL + '://cdn.stickyadstv.com/mustang/mustang.min.js'; | |
| var PRIMETIME_URL = PROTOCOL + '://cdn.stickyadstv.com/prime-time/'; | |
| var USER_SYNC_URL = PROTOCOL + '://ads.stickyadstv.com/auto-user-sync'; | |
| function getProtocol() { | |
| if (location.protocol && location.protocol.indexOf('https') === 0) { | |
| return 'https'; | |
| } else { | |
| return 'http'; | |
| } | |
| } | |
| function isValidUrl(str) { | |
| if (!str) { | |
| return false; | |
| } | |
| // regExp for url validation | |
| var pattern = /^(https?|ftp|file):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; | |
| return pattern.test(str); | |
| } | |
| function getBiggerSize(array) { | |
| var result = [0, 0]; | |
| for (var i = 0; i < array.length; i++) { | |
| if (array[i][0] * array[i][1] > result[0] * result[1]) { | |
| result = array[i]; | |
| } | |
| } | |
| return result; | |
| } | |
| /* | |
| * read the pricing extension with this format: <Extension type='StickyPricing'><Price currency="EUR">1.0000</Price></Extension> | |
| * @return {object} pricing data in format: {currency: "EUR", price:"1.000"} | |
| */ | |
| function getPricing(xmlNode) { | |
| var pricingExtNode; | |
| var princingData = {}; | |
| var extensions = xmlNode.querySelectorAll('Extension'); | |
| // Nodelist.forEach is not supported in IE and Edge | |
| // Workaround given here https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10638731/ | |
| Array.prototype.forEach.call(extensions, function (node) { | |
| if (node.getAttribute('type') === 'StickyPricing') { | |
| pricingExtNode = node; | |
| } | |
| }); | |
| if (pricingExtNode) { | |
| var priceNode = pricingExtNode.querySelector('Price'); | |
| princingData = { | |
| currency: priceNode.getAttribute('currency'), | |
| price: priceNode.textContent || priceNode.innerText | |
| }; | |
| } else { | |
| utils.logWarn('PREBID - ' + BIDDER_CODE + ': Can\'t get pricing data. Is price awareness enabled?'); | |
| } | |
| return princingData; | |
| } | |
| function getCreativeId(xmlNode) { | |
| var creaId = ''; | |
| var adNodes = xmlNode.querySelectorAll('Ad'); | |
| // Nodelist.forEach is not supported in IE and Edge | |
| // Workaround given here https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10638731/ | |
| Array.prototype.forEach.call(adNodes, function (el) { | |
| creaId += '[' + el.getAttribute('id') + ']'; | |
| }); | |
| return creaId; | |
| } | |
| /** | |
| * returns the top most accessible window | |
| */ | |
| function getTopMostWindow() { | |
| var res = window; | |
| try { | |
| while (top !== res) { | |
| if (res.parent.location.href.length) { | |
| res = res.parent; | |
| } | |
| } | |
| } catch (e) {} | |
| return res; | |
| } | |
| function getComponentId(inputFormat) { | |
| var component = 'mustang'; // default component id | |
| if (inputFormat && inputFormat !== 'inbanner') { | |
| // format identifiers are equals to their component ids. | |
| component = inputFormat; | |
| } | |
| return component; | |
| } | |
| function getAPIName(componentId) { | |
| componentId = componentId || ''; | |
| // remove dash in componentId to get API name | |
| return componentId.replace('-', ''); | |
| } | |
| function formatAdHTML(bid, size) { | |
| var integrationType = bid.params.format; | |
| var divHtml = '<div id="freewheelssp_prebid_target"></div>'; | |
| var script = ''; | |
| var libUrl = ''; | |
| if (integrationType && integrationType !== 'inbanner') { | |
| libUrl = PRIMETIME_URL + getComponentId(bid.params.format) + '.min.js'; | |
| script = getOutstreamScript(bid, size); | |
| } else { | |
| libUrl = MUSTANG_URL; | |
| script = getInBannerScript(bid, size); | |
| } | |
| return divHtml + '<script type=\'text/javascript\'>' + '(function() {' + ' var st = document.createElement(\'script\'); st.type = \'text/javascript\'; st.async = true;' + ' st.src = \'' + libUrl + '\';' + ' st.onload = function(){' + ' var vastLoader = new window.com.stickyadstv.vast.VastLoader();' + ' var vast = vastLoader.getVast();' + | |
| // get the top most accessible window | |
| ' var topWindow = (function(){var res=window; try{while(top != res){if(res.parent.location.href.length)res=res.parent;}}catch(e){}return res;})();' + | |
| // inject the xml in the Vast object as string | |
| ' vast.setXmlString(topWindow.freewheelssp_cache["' + bid.adUnitCode + '"]);' + | |
| // force ad parsing on the given vast xml | |
| ' vastLoader.parseAds(vast, {' + ' onSuccess: function() {' + script + ' }' + ' });' + ' };' + ' document.head.appendChild(st);' + '})();' + '</script>'; | |
| } | |
| var getInBannerScript = function getInBannerScript(bid, size) { | |
| return 'var config = {' + ' preloadedVast:vast,' + ' autoPlay:true' + ' };' + ' var ad = new window.com.stickyadstv.vpaid.Ad(document.getElementById("freewheelssp_prebid_target"),config);' + ' (new window.com.stickyadstv.tools.ASLoader(' + bid.params.zoneId + ', \'' + getComponentId(bid.params.format) + '\')).registerEvents(ad);' + ' ad.initAd(' + size[0] + ',' + size[1] + ',"",0,"","");'; | |
| }; | |
| var getOutstreamScript = function getOutstreamScript(bid) { | |
| var placementCode = bid.adUnitCode; | |
| var config = bid.params; | |
| // default placement if no placement is set | |
| if (!config.hasOwnProperty('domId') && !config.hasOwnProperty('auto') && !config.hasOwnProperty('p') && !config.hasOwnProperty('article')) { | |
| config.domId = placementCode; | |
| } | |
| var script = 'var config = {' + ' preloadedVast:vast,' + ' ASLoader:new window.com.stickyadstv.tools.ASLoader(' + bid.params.zoneId + ', \'' + getComponentId(bid.params.format) + '\')'; | |
| for (var key in config) { | |
| // dont' send format parameter | |
| // neither zone nor vastUrlParams value as Vast is already loaded | |
| if (config.hasOwnProperty(key) && key !== 'format' && key !== 'zone' && key !== 'zoneId' && key !== 'vastUrlParams') { | |
| script += ',' + key + ':"' + config[key] + '"'; | |
| } | |
| } | |
| script += '};' + 'window.com.stickyadstv.' + getAPIName(bid.params.format) + '.start(config);'; | |
| return script; | |
| }; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: ['banner', 'video'], | |
| aliases: ['stickyadstv'], // former name for freewheel-ssp | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.zoneId; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} bidRequests A non-empty list of bid requests which should be sent to the Server. | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidRequests) { | |
| // var currency = config.getConfig(currency); | |
| var currentBidRequest = bidRequests[0]; | |
| if (bidRequests.length > 1) { | |
| utils.logMessage('Prebid.JS - freewheel bid adapter: only one ad unit is required.'); | |
| } | |
| var requestParams = { | |
| reqType: 'AdsSetup', | |
| protocolVersion: '2.0', | |
| zoneId: currentBidRequest.params.zoneId, | |
| componentId: getComponentId(currentBidRequest.params.format) | |
| }; | |
| var location = utils.getTopWindowUrl(); | |
| if (isValidUrl(location)) { | |
| requestParams.loc = location; | |
| } | |
| var playerSize = getBiggerSize(currentBidRequest.sizes); | |
| if (playerSize[0] > 0 || playerSize[1] > 0) { | |
| requestParams.playerSize = playerSize[0] + 'x' + playerSize[1]; | |
| } | |
| return { | |
| method: 'GET', | |
| url: FREEWHEEL_ADSSETUP, | |
| data: requestParams, | |
| bidRequest: currentBidRequest | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @param {object} request: the built request object containing the initial bidRequest. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, request) { | |
| var bidrequest = request.bidRequest; | |
| var playerSize = getBiggerSize(bidrequest.sizes); | |
| if ((typeof serverResponse === 'undefined' ? 'undefined' : _typeof(serverResponse)) == 'object' && typeof serverResponse.body == 'string') { | |
| serverResponse = serverResponse.body; | |
| } | |
| var xmlDoc; | |
| try { | |
| var parser = new DOMParser(); | |
| xmlDoc = parser.parseFromString(serverResponse, 'application/xml'); | |
| } catch (err) { | |
| utils.logWarn('Prebid.js - ' + BIDDER_CODE + ' : ' + err); | |
| return; | |
| } | |
| var princingData = getPricing(xmlDoc); | |
| var creativeId = getCreativeId(xmlDoc); | |
| var topWin = getTopMostWindow(); | |
| if (!topWin.freewheelssp_cache) { | |
| topWin.freewheelssp_cache = {}; | |
| } | |
| topWin.freewheelssp_cache[bidrequest.adUnitCode] = serverResponse; | |
| var bidResponses = []; | |
| if (princingData.price) { | |
| var bidResponse = { | |
| requestId: bidrequest.bidId, | |
| cpm: princingData.price, | |
| width: playerSize[0], | |
| height: playerSize[1], | |
| creativeId: creativeId, | |
| currency: princingData.currency, | |
| netRevenue: true, | |
| ttl: 360 | |
| }; | |
| var mediaTypes = bidrequest.mediaTypes || {}; | |
| if (mediaTypes.video) { | |
| // bidResponse.vastXml = serverResponse; | |
| bidResponse.mediaType = 'video'; | |
| var blob = new Blob([serverResponse], { type: 'application/xml' }); | |
| bidResponse.vastUrl = window.URL.createObjectURL(blob); | |
| } else { | |
| bidResponse.ad = formatAdHTML(bidrequest, playerSize); | |
| } | |
| bidResponses.push(bidResponse); | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.pixelEnabled) { | |
| return [{ | |
| type: 'image', | |
| url: USER_SYNC_URL | |
| }]; | |
| } | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 167: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[165]); | |
| pbjsChunk([72],{ | |
| /***/ 168: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(169); | |
| module.exports = __webpack_require__(170); | |
| /***/ }), | |
| /***/ 169: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| 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 ENDPOINT = 'hb.gammaplatform.com'; | |
| var BIDDER_CODE = 'gamma'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['gamma'], | |
| supportedMediaTypes: ['banner', 'video'], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.siteId || bid.params.zoneId); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} bidRequests A non-empty list of bid requests which should be sent to the Server. | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidRequests) { | |
| var gaxObjParams = (0, _find2['default'])(bidRequests, hasParamInfo); | |
| return { | |
| method: 'GET', | |
| url: '//' + ENDPOINT + '/adx/request?wid=' + gaxObjParams.params.siteId + '&zid=' + gaxObjParams.params.zoneId + '&hb=pbjs&bidid=' + gaxObjParams.bidId + '&urf=' + utils.getTopWindowUrl() | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| serverResponse = serverResponse.body; | |
| var bids = []; | |
| if (serverResponse.id) { | |
| var bid = newBid(serverResponse); | |
| bids.push(bid); | |
| } | |
| return bids; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: '//' + ENDPOINT + '/adx/usersync' | |
| }]; | |
| } | |
| } | |
| /** | |
| * Unpack the Server's Bid into a Prebid-compatible one. | |
| * @param serverBid | |
| * @return Bid | |
| */ | |
| };function newBid(serverBid) { | |
| var bid = { | |
| ad: serverBid.seatbid[0].bid[0].adm, | |
| cpm: serverBid.seatbid[0].bid[0].price, | |
| creativeId: serverBid.seatbid[0].bid[0].adid, | |
| currency: serverBid.cur, | |
| dealId: serverBid.seatbid[0].bid[0].dealid, | |
| width: serverBid.seatbid[0].bid[0].w, | |
| height: serverBid.seatbid[0].bid[0].h, | |
| mediaType: serverBid.type, | |
| netRevenue: true, | |
| requestId: serverBid.id, | |
| ttl: serverBid.seatbid[0].bid[0].ttl || 300 | |
| }; | |
| if (serverBid.type == 'video') { | |
| _extends(bid, { | |
| vastXml: serverBid.seatbid[0].bid[0].vastXml, | |
| vastUrl: serverBid.seatbid[0].bid[0].vastUrl, | |
| ttl: 3600 | |
| }); | |
| } | |
| return bid; | |
| } | |
| function hasParamInfo(bid) { | |
| return !!bid.params; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 170: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[168]); | |
| pbjsChunk([71],{ | |
| /***/ 171: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(172); | |
| module.exports = __webpack_require__(173); | |
| /***/ }), | |
| /***/ 172: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var BIDDER_CODE = 'getintent'; | |
| var IS_NET_REVENUE = true; | |
| var BID_HOST = 'px.adhigh.net'; | |
| var BID_BANNER_PATH = '/rtb/direct_banner'; | |
| var BID_VIDEO_PATH = '/rtb/direct_vast'; | |
| var BID_RESPONSE_TTL_SEC = 360; | |
| var VIDEO_PROPERTIES = ['protocols', 'mimes', 'min_dur', 'max_dur', 'min_btr', 'max_btr', 'vi_format', 'api', 'skippable']; | |
| var OPTIONAL_PROPERTIES = ['cur', 'floor']; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['getintentAdapter'], | |
| supportedMediaTypes: ['video', 'banner'], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid to validate. | |
| * @return {boolean} True if this is a valid bid, and false otherwise. | |
| * */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.pid && bid.params.tid); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} bidRequests - an array of bids. | |
| * @return ServerRequest[] | |
| */ | |
| buildRequests: function buildRequests(bidRequests) { | |
| return bidRequests.map(function (bidRequest) { | |
| var giBidRequest = buildGiBidRequest(bidRequest); | |
| return { | |
| method: 'GET', | |
| url: buildUrl(giBidRequest), | |
| data: giBidRequest | |
| }; | |
| }); | |
| }, | |
| /** | |
| * Callback for bids, after the call to DSP completes. | |
| * Parse the response from the server into a list of bids. | |
| * | |
| * @param {object} serverResponse A response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| var responseBody = serverResponse.body; | |
| var bids = []; | |
| if (responseBody && responseBody.no_bid !== 1) { | |
| var size = parseSize(responseBody.size); | |
| var bid = { | |
| requestId: responseBody.bid_id, | |
| ttl: BID_RESPONSE_TTL_SEC, | |
| netRevenue: IS_NET_REVENUE, | |
| currency: responseBody.currency, | |
| creativeId: responseBody.creative_id, | |
| cpm: responseBody.cpm, | |
| width: size[0], | |
| height: size[1] | |
| }; | |
| if (responseBody.vast_url) { | |
| bid.mediaType = 'video'; | |
| bid.vastUrl = responseBody.vast_url; | |
| } else { | |
| bid.mediaType = 'banner'; | |
| bid.ad = responseBody.ad; | |
| } | |
| bids.push(bid); | |
| } | |
| return bids; | |
| } | |
| }; | |
| function buildUrl(bid) { | |
| return '//' + BID_HOST + (bid.is_video ? BID_VIDEO_PATH : BID_BANNER_PATH); | |
| } | |
| /** | |
| * Builds GI bid request from BidRequest. | |
| * | |
| * @param {BidRequest} bidRequest. | |
| * @return {object} GI bid request. | |
| * */ | |
| function buildGiBidRequest(bidRequest) { | |
| var giBidRequest = { | |
| bid_id: bidRequest.bidId, | |
| pid: bidRequest.params.pid, // required | |
| tid: bidRequest.params.tid, // required | |
| known: bidRequest.params.known || 1, | |
| is_video: bidRequest.mediaType === 'video', | |
| resp_type: 'JSON' | |
| }; | |
| if (bidRequest.sizes) { | |
| giBidRequest.size = produceSize(bidRequest.sizes); | |
| } | |
| addVideo(bidRequest.params.video, giBidRequest); | |
| addOptional(bidRequest.params, giBidRequest, OPTIONAL_PROPERTIES); | |
| return giBidRequest; | |
| } | |
| function addVideo(video, giBidRequest) { | |
| if (giBidRequest.is_video && video) { | |
| for (var i = 0, l = VIDEO_PROPERTIES.length; i < l; i++) { | |
| var key = VIDEO_PROPERTIES[i]; | |
| if (video.hasOwnProperty(key)) { | |
| giBidRequest[key] = Array.isArray(video[key]) ? video[key].join(',') : video[key]; | |
| } | |
| } | |
| } | |
| } | |
| function addOptional(params, request, props) { | |
| for (var i = 0; i < props.length; i++) { | |
| if (params.hasOwnProperty(props[i])) { | |
| request[props[i]] = params[props[i]]; | |
| } | |
| } | |
| } | |
| function parseSize(s) { | |
| return s.split('x').map(Number); | |
| } | |
| function produceSize(sizes) { | |
| // TODO: add support for multiple sizes | |
| if (Array.isArray(sizes[0])) { | |
| return sizes[0].join('x'); | |
| } else { | |
| return sizes.join('x'); | |
| } | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 173: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[171]); | |
| pbjsChunk([70],{ | |
| /***/ 174: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(175); | |
| module.exports = __webpack_require__(176); | |
| /***/ }), | |
| /***/ 175: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'gjirafa'; | |
| var ENDPOINT_URL = 'https://gjc.gjirafa.com/Home/GetBid'; | |
| var DIMENSION_SEPARATOR = 'x'; | |
| var SIZE_SEPARATOR = ';'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return bid.params && (!!bid.params.placementId || !!bid.params.minCPM && !!bid.params.minCPC); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests, bidderRequest) { | |
| return validBidRequests.map(function (bidRequest) { | |
| var gjid = Math.floor(Math.random() * 99999999); | |
| var sizes = generateSizeParam(bidRequest.sizes); | |
| var configId = bidRequest.params.placementId || ''; | |
| var minCPM = bidRequest.params.minCPM || 0.0; | |
| var minCPC = bidRequest.params.minCPC || 0.0; | |
| var allowExplicit = bidRequest.params.explicit || 0; | |
| var body = { | |
| gjid: gjid, | |
| sizes: sizes, | |
| configId: configId, | |
| minCPM: minCPM, | |
| minCPC: minCPC, | |
| allowExplicit: allowExplicit, | |
| referrer: utils.getTopWindowUrl(), | |
| requestid: bidRequest.bidderRequestId, | |
| bidid: bidRequest.bidId | |
| }; | |
| if (document.referrer) { | |
| body.referrer = document.referrer; | |
| } | |
| return { | |
| method: 'GET', | |
| url: ENDPOINT_URL, | |
| data: body | |
| }; | |
| }); | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {ServerResponse} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var serverBody = serverResponse.body; | |
| var bidResponses = []; | |
| var bidResponse = { | |
| requestId: bidRequest.data.bidid, | |
| cpm: serverBody.CPM, | |
| width: serverBody.Width, | |
| height: serverBody.Height, | |
| creativeId: serverBody.CreativeId, | |
| currency: serverBody.Currency, | |
| netRevenue: serverBody.NetRevenue, | |
| ttl: serverBody.TTL, | |
| referrer: serverBody.Referrer, | |
| ad: serverBody.Ad | |
| }; | |
| bidResponses.push(bidResponse); | |
| return bidResponses; | |
| } | |
| /** | |
| * Generate size param for bid request using sizes array | |
| * | |
| * @param {Array} sizes Possible sizes for the ad unit. | |
| * @return {string} Processed sizes param to be used for the bid request. | |
| */ | |
| };function generateSizeParam(sizes) { | |
| return sizes.map(function (size) { | |
| return size.join(DIMENSION_SEPARATOR); | |
| }).join(SIZE_SEPARATOR); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 176: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[174]); | |
| pbjsChunk([109],{ | |
| /***/ 177: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(178); | |
| /***/ }), | |
| /***/ 178: | |
| /***/ (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; }; | |
| /** | |
| * ga.js - analytics adapter for google analytics | |
| */ | |
| var events = __webpack_require__(9); | |
| var utils = __webpack_require__(0); | |
| var CONSTANTS = __webpack_require__(3); | |
| var adaptermanager = __webpack_require__(7); | |
| var BID_REQUESTED = CONSTANTS.EVENTS.BID_REQUESTED; | |
| var BID_TIMEOUT = CONSTANTS.EVENTS.BID_TIMEOUT; | |
| var BID_RESPONSE = CONSTANTS.EVENTS.BID_RESPONSE; | |
| var BID_WON = CONSTANTS.EVENTS.BID_WON; | |
| var _disableInteraction = { nonInteraction: true }; | |
| var _analyticsQueue = []; | |
| var _gaGlobal = null; | |
| var _enableCheck = true; | |
| var _category = 'Prebid.js Bids'; | |
| var _eventCount = 0; | |
| var _enableDistribution = false; | |
| var _trackerSend = null; | |
| var _sampled = true; | |
| /** | |
| * This will enable sending data to google analytics. Only call once, or duplicate data will be sent! | |
| * @param {object} provider use to set GA global (if renamed); | |
| * @param {object} options use to configure adapter; | |
| * @return {[type]} [description] | |
| */ | |
| exports.enableAnalytics = function (_ref) { | |
| var provider = _ref.provider, | |
| options = _ref.options; | |
| _gaGlobal = provider || 'ga'; | |
| _trackerSend = options && options.trackerName ? options.trackerName + '.send' : 'send'; | |
| _sampled = typeof options === 'undefined' || typeof options.sampling === 'undefined' || Math.random() < parseFloat(options.sampling); | |
| if (options && typeof options.global !== 'undefined') { | |
| _gaGlobal = options.global; | |
| } | |
| if (options && typeof options.enableDistribution !== 'undefined') { | |
| _enableDistribution = options.enableDistribution; | |
| } | |
| var bid = null; | |
| if (_sampled) { | |
| // first send all events fired before enableAnalytics called | |
| var existingEvents = events.getEvents(); | |
| utils._each(existingEvents, function (eventObj) { | |
| if ((typeof eventObj === 'undefined' ? 'undefined' : _typeof(eventObj)) !== 'object') { | |
| return; | |
| } | |
| var args = eventObj.args; | |
| if (eventObj.eventType === BID_REQUESTED) { | |
| bid = args; | |
| sendBidRequestToGa(bid); | |
| } else if (eventObj.eventType === BID_RESPONSE) { | |
| // bid is 2nd args | |
| bid = args; | |
| sendBidResponseToGa(bid); | |
| } else if (eventObj.eventType === BID_TIMEOUT) { | |
| var bidderArray = args; | |
| sendBidTimeouts(bidderArray); | |
| } else if (eventObj.eventType === BID_WON) { | |
| bid = args; | |
| sendBidWonToGa(bid); | |
| } | |
| }); | |
| // Next register event listeners to send data immediately | |
| // bidRequests | |
| events.on(BID_REQUESTED, function (bidRequestObj) { | |
| sendBidRequestToGa(bidRequestObj); | |
| }); | |
| // bidResponses | |
| events.on(BID_RESPONSE, function (bid) { | |
| sendBidResponseToGa(bid); | |
| }); | |
| // bidTimeouts | |
| events.on(BID_TIMEOUT, function (bidderArray) { | |
| sendBidTimeouts(bidderArray); | |
| }); | |
| // wins | |
| events.on(BID_WON, function (bid) { | |
| sendBidWonToGa(bid); | |
| }); | |
| } else { | |
| utils.logMessage('Prebid.js google analytics disabled by sampling'); | |
| } | |
| // finally set this function to return log message, prevents multiple adapter listeners | |
| this.enableAnalytics = function _enable() { | |
| return utils.logMessage('Analytics adapter already enabled, unnecessary call to `enableAnalytics`.'); | |
| }; | |
| }; | |
| exports.getTrackerSend = function getTrackerSend() { | |
| return _trackerSend; | |
| }; | |
| /** | |
| * Check if gaGlobal or window.ga is defined on page. If defined execute all the GA commands | |
| */ | |
| function checkAnalytics() { | |
| if (_enableCheck && typeof window[_gaGlobal] === 'function') { | |
| for (var i = 0; i < _analyticsQueue.length; i++) { | |
| _analyticsQueue[i].call(); | |
| } | |
| // override push to execute the command immediately from now on | |
| _analyticsQueue.push = function (fn) { | |
| fn.call(); | |
| }; | |
| // turn check into NOOP | |
| _enableCheck = false; | |
| } | |
| utils.logMessage('event count sent to GA: ' + _eventCount); | |
| } | |
| function convertToCents(dollars) { | |
| if (dollars) { | |
| return Math.floor(dollars * 100); | |
| } | |
| return 0; | |
| } | |
| function getLoadTimeDistribution(time) { | |
| var distribution; | |
| if (time >= 0 && time < 200) { | |
| distribution = '0-200ms'; | |
| } else if (time >= 200 && time < 300) { | |
| distribution = '0200-300ms'; | |
| } else if (time >= 300 && time < 400) { | |
| distribution = '0300-400ms'; | |
| } else if (time >= 400 && time < 500) { | |
| distribution = '0400-500ms'; | |
| } else if (time >= 500 && time < 600) { | |
| distribution = '0500-600ms'; | |
| } else if (time >= 600 && time < 800) { | |
| distribution = '0600-800ms'; | |
| } else if (time >= 800 && time < 1000) { | |
| distribution = '0800-1000ms'; | |
| } else if (time >= 1000 && time < 1200) { | |
| distribution = '1000-1200ms'; | |
| } else if (time >= 1200 && time < 1500) { | |
| distribution = '1200-1500ms'; | |
| } else if (time >= 1500 && time < 2000) { | |
| distribution = '1500-2000ms'; | |
| } else if (time >= 2000) { | |
| distribution = '2000ms above'; | |
| } | |
| return distribution; | |
| } | |
| function getCpmDistribution(cpm) { | |
| var distribution; | |
| if (cpm >= 0 && cpm < 0.5) { | |
| distribution = '$0-0.5'; | |
| } else if (cpm >= 0.5 && cpm < 1) { | |
| distribution = '$0.5-1'; | |
| } else if (cpm >= 1 && cpm < 1.5) { | |
| distribution = '$1-1.5'; | |
| } else if (cpm >= 1.5 && cpm < 2) { | |
| distribution = '$1.5-2'; | |
| } else if (cpm >= 2 && cpm < 2.5) { | |
| distribution = '$2-2.5'; | |
| } else if (cpm >= 2.5 && cpm < 3) { | |
| distribution = '$2.5-3'; | |
| } else if (cpm >= 3 && cpm < 4) { | |
| distribution = '$3-4'; | |
| } else if (cpm >= 4 && cpm < 6) { | |
| distribution = '$4-6'; | |
| } else if (cpm >= 6 && cpm < 8) { | |
| distribution = '$6-8'; | |
| } else if (cpm >= 8) { | |
| distribution = '$8 above'; | |
| } | |
| return distribution; | |
| } | |
| function sendBidRequestToGa(bid) { | |
| if (bid && bid.bidderCode) { | |
| _analyticsQueue.push(function () { | |
| _eventCount++; | |
| window[_gaGlobal](_trackerSend, 'event', _category, 'Requests', bid.bidderCode, 1, _disableInteraction); | |
| }); | |
| } | |
| // check the queue | |
| checkAnalytics(); | |
| } | |
| function sendBidResponseToGa(bid) { | |
| if (bid && bid.bidderCode) { | |
| _analyticsQueue.push(function () { | |
| var cpmCents = convertToCents(bid.cpm); | |
| var bidder = bid.bidderCode; | |
| if (typeof bid.timeToRespond !== 'undefined' && _enableDistribution) { | |
| _eventCount++; | |
| var dis = getLoadTimeDistribution(bid.timeToRespond); | |
| window[_gaGlobal](_trackerSend, 'event', 'Prebid.js Load Time Distribution', dis, bidder, 1, _disableInteraction); | |
| } | |
| if (bid.cpm > 0) { | |
| _eventCount = _eventCount + 2; | |
| var cpmDis = getCpmDistribution(bid.cpm); | |
| if (_enableDistribution) { | |
| _eventCount++; | |
| window[_gaGlobal](_trackerSend, 'event', 'Prebid.js CPM Distribution', cpmDis, bidder, 1, _disableInteraction); | |
| } | |
| window[_gaGlobal](_trackerSend, 'event', _category, 'Bids', bidder, cpmCents, _disableInteraction); | |
| window[_gaGlobal](_trackerSend, 'event', _category, 'Bid Load Time', bidder, bid.timeToRespond, _disableInteraction); | |
| } | |
| }); | |
| } | |
| // check the queue | |
| checkAnalytics(); | |
| } | |
| function sendBidTimeouts(timedOutBidders) { | |
| _analyticsQueue.push(function () { | |
| utils._each(timedOutBidders, function (bidderCode) { | |
| _eventCount++; | |
| window[_gaGlobal](_trackerSend, 'event', _category, 'Timeouts', bidderCode, _disableInteraction); | |
| }); | |
| }); | |
| checkAnalytics(); | |
| } | |
| function sendBidWonToGa(bid) { | |
| var cpmCents = convertToCents(bid.cpm); | |
| _analyticsQueue.push(function () { | |
| _eventCount++; | |
| window[_gaGlobal](_trackerSend, 'event', _category, 'Wins', bid.bidderCode, cpmCents, _disableInteraction); | |
| }); | |
| checkAnalytics(); | |
| } | |
| adaptermanager.registerAnalyticsAdapter({ | |
| adapter: exports, | |
| code: 'ga' | |
| }); | |
| /***/ }) | |
| },[177]); | |
| pbjsChunk([69],{ | |
| /***/ 179: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(180); | |
| module.exports = __webpack_require__(181); | |
| /***/ }), | |
| /***/ 180: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| /* WEBPACK VAR INJECTION */(function(global) { | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _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 utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'gumgum'; | |
| var ALIAS_BIDDER_CODE = ['gg']; | |
| var BID_ENDPOINT = 'https://g2.gumgum.com/hbid/imp'; | |
| var DT_CREDENTIALS = { member: 'YcXr87z2lpbB' }; | |
| var TIME_TO_LIVE = 60; | |
| var browserParams = {}; | |
| // TODO: potential 0 values for browserParams sent to ad server | |
| function _getBrowserParams() { | |
| var topWindow = void 0; | |
| var topScreen = void 0; | |
| var topUrl = void 0; | |
| var ggad = void 0; | |
| if (browserParams.vw) { | |
| // we've already initialized browserParams, just return it. | |
| return browserParams; | |
| } | |
| try { | |
| topWindow = global.top; | |
| topScreen = topWindow.screen; | |
| topUrl = utils.getTopWindowUrl(); | |
| } catch (error) { | |
| utils.logError(error); | |
| return browserParams; | |
| } | |
| browserParams = { | |
| vw: topWindow.innerWidth, | |
| vh: topWindow.innerHeight, | |
| sw: topScreen.width, | |
| sh: topScreen.height, | |
| pu: topUrl, | |
| ce: utils.cookiesAreEnabled(), | |
| dpr: topWindow.devicePixelRatio || 1 | |
| }; | |
| ggad = (topUrl.match(/#ggad=(\w+)$/) || [0, 0])[1]; | |
| if (ggad) { | |
| browserParams[isNaN(ggad) ? 'eAdBuyId' : 'adBuyId'] = ggad; | |
| } | |
| return browserParams; | |
| } | |
| function getWrapperCode(wrapper, data) { | |
| return wrapper.replace('AD_JSON', window.btoa(JSON.stringify(data))); | |
| } | |
| // TODO: use getConfig() | |
| function _getDigiTrustQueryParams() { | |
| function getDigiTrustId() { | |
| var digiTrustUser = window.DigiTrust && window.DigiTrust.getUser ? window.DigiTrust.getUser(DT_CREDENTIALS) : {}; | |
| return digiTrustUser && digiTrustUser.success && digiTrustUser.identity || ''; | |
| }; | |
| var digiTrustId = getDigiTrustId(); | |
| // Verify there is an ID and this user has not opted out | |
| if (!digiTrustId || digiTrustId.privacy && digiTrustId.privacy.optout) { | |
| return {}; | |
| } | |
| return { | |
| 'dt': digiTrustId.id | |
| }; | |
| } | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| function isBidRequestValid(bid) { | |
| var params = bid.params, | |
| adUnitCode = bid.adUnitCode; | |
| switch (true) { | |
| case !!params.inScreen: | |
| break; | |
| case !!params.inSlot: | |
| break; | |
| case !!params.ICV: | |
| break; | |
| default: | |
| utils.logWarn('[GumGum] No product selected for the placement ' + adUnitCode + ', please check your implementation.'); | |
| return false; | |
| } | |
| return true; | |
| } | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| function buildRequests(validBidRequests) { | |
| var bids = []; | |
| utils._each(validBidRequests, function (bidRequest) { | |
| var timeout = _config.config.getConfig('bidderTimeout'); | |
| var bidId = bidRequest.bidId, | |
| _bidRequest$params = bidRequest.params, | |
| params = _bidRequest$params === undefined ? {} : _bidRequest$params, | |
| transactionId = bidRequest.transactionId; | |
| var data = {}; | |
| if (params.inScreen) { | |
| data.t = params.inScreen; | |
| data.pi = 2; | |
| } | |
| if (params.inSlot) { | |
| data.si = parseInt(params.inSlot, 10); | |
| data.pi = 3; | |
| } | |
| if (params.ICV) { | |
| data.ni = parseInt(params.ICV, 10); | |
| data.pi = 5; | |
| } | |
| bids.push({ | |
| id: bidId, | |
| tmax: timeout, | |
| tId: transactionId, | |
| pi: data.pi, | |
| selector: params.selector, | |
| sizes: bidRequest.sizes, | |
| url: BID_ENDPOINT, | |
| method: 'GET', | |
| data: _extends(data, _getBrowserParams(), _getDigiTrustQueryParams()) | |
| }); | |
| }); | |
| return bids; | |
| } | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| var serverResponseBody = serverResponse.body; | |
| var _serverResponseBody$a = serverResponseBody.ad, | |
| cpm = _serverResponseBody$a.price, | |
| creativeId = _serverResponseBody$a.id, | |
| markup = _serverResponseBody$a.markup, | |
| wrapper = serverResponseBody.cw; | |
| var isTestUnit = bidRequest.data && bidRequest.data.pi === 3 && bidRequest.data.si === 9; | |
| var _utils$parseSizesInpu = utils.parseSizesInput(bidRequest.sizes)[0].split('x'), | |
| _utils$parseSizesInpu2 = _slicedToArray(_utils$parseSizesInpu, 2), | |
| width = _utils$parseSizesInpu2[0], | |
| height = _utils$parseSizesInpu2[1]; | |
| if (creativeId) { | |
| bidResponses.push({ | |
| // dealId: DEAL_ID, | |
| // referrer: REFERER, | |
| ad: wrapper ? getWrapperCode(wrapper, _extends({}, serverResponseBody, { bidRequest: bidRequest })) : markup, | |
| cpm: isTestUnit ? 0.1 : cpm, | |
| creativeId: creativeId, | |
| currency: 'USD', | |
| height: height, | |
| netRevenue: true, | |
| requestId: bidRequest.id, | |
| ttl: TIME_TO_LIVE, | |
| width: width | |
| }); | |
| } | |
| return bidResponses; | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ALIAS_BIDDER_CODE, | |
| isBidRequestValid: isBidRequestValid, | |
| buildRequests: buildRequests, | |
| interpretResponse: interpretResponse | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(38))) | |
| /***/ }), | |
| /***/ 181: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[179]); | |
| pbjsChunk([68],{ | |
| /***/ 182: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(183); | |
| module.exports = __webpack_require__(184); | |
| /***/ }), | |
| /***/ 183: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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 BIDDER_CODE = 'huddledmasses'; | |
| var URL = '//huddledmassessupply.com/?c=o&m=multi'; | |
| var URL_SYNC = '//huddledmassessupply.com/?c=o&m=cookie'; | |
| var sizeObj = { | |
| '468x60': 1, | |
| '728x90': 2, | |
| '300x600': 10, | |
| '300x250': 15, | |
| '300x100': 19, | |
| '320x50': 43, | |
| '300x50': 44, | |
| '300x300': 48, | |
| '300x1050': 54, | |
| '970x90': 55, | |
| '970x250': 57, | |
| '1000x90': 58, | |
| '320x80': 59, | |
| '640x480': 65, | |
| '320x480': 67, | |
| '320x320': 72, | |
| '320x160': 73, | |
| '480x300': 83, | |
| '970x310': 94, | |
| '970x210': 96, | |
| '480x320': 101, | |
| '768x1024': 102, | |
| '1000x300': 113, | |
| '320x100': 117, | |
| '800x250': 118, | |
| '200x600': 119 | |
| }; | |
| utils._each(sizeObj, function (item, key) { | |
| return sizeObj[item] = key; | |
| }); | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !isNaN(bid.params.placement_id) && (bid.params.sizes !== undefined && bid.params.sizes.length > 0 && bid.params.sizes.some(function (sizeIndex) { | |
| return sizeObj[sizeIndex] !== undefined; | |
| }) || bid.sizes !== undefined && bid.sizes.length > 0 && bid.sizes.map(function (size) { | |
| return size[0] + 'x' + size[1]; | |
| }).some(function (size) { | |
| return sizeObj[size] !== undefined; | |
| })); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} validBidRequests A non-empty list of valid bid requests that should be sent to the Server. | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var winTop = window; | |
| try { | |
| window.top.location.toString(); | |
| winTop = window.top; | |
| } catch (e) { | |
| utils.logMessage(e); | |
| }; | |
| var location = utils.getTopWindowLocation(); | |
| var placements = []; | |
| var request = { | |
| 'deviceWidth': winTop.screen.width, | |
| 'deviceHeight': winTop.screen.height, | |
| 'language': navigator && navigator.language ? navigator.language : '', | |
| 'secure': location.protocol === 'https:' ? 1 : 0, | |
| 'host': location.host, | |
| 'page': location.pathname, | |
| 'placements': placements | |
| }; | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| var bid = validBidRequests[i]; | |
| var placement = {}; | |
| placement['placementId'] = bid.params.placement_id; | |
| placement['bidId'] = bid.bidId; | |
| placement['sizes'] = bid.sizes; | |
| placements.push(placement); | |
| } | |
| return { | |
| method: 'POST', | |
| url: URL, | |
| data: request | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| var response = []; | |
| try { | |
| serverResponse = serverResponse.body; | |
| for (var i = 0; i < serverResponse.length; i++) { | |
| var resItem = serverResponse[i]; | |
| if (resItem.width && !isNaN(resItem.width) && resItem.height && !isNaN(resItem.height) && resItem.requestId && typeof resItem.requestId === 'string' && resItem.cpm && !isNaN(resItem.cpm) && resItem.ad && typeof resItem.ad === 'string' && resItem.ttl && !isNaN(resItem.ttl) && resItem.creativeId && typeof resItem.creativeId === 'string' && resItem.netRevenue && typeof resItem.netRevenue === 'boolean' && resItem.currency && typeof resItem.currency === 'string') { | |
| response.push(resItem); | |
| } | |
| } | |
| } catch (e) { | |
| utils.logMessage(e); | |
| }; | |
| return response; | |
| }, | |
| getUserSyncs: function getUserSyncs() { | |
| return [{ | |
| type: 'image', | |
| url: URL_SYNC | |
| }]; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 184: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[182]); | |
| pbjsChunk([67],{ | |
| /***/ 185: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(186); | |
| module.exports = __webpack_require__(187); | |
| /***/ }), | |
| /***/ 186: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'ias'; | |
| function isBidRequestValid(bid) { | |
| var _bid$params = bid.params, | |
| pubId = _bid$params.pubId, | |
| adUnitPath = _bid$params.adUnitPath; | |
| return !!(pubId && adUnitPath); | |
| } | |
| /** | |
| * Converts GPT-style size array into a string | |
| * @param {Array} sizes: list of GPT-style sizes, e.g. [[300, 250], [300, 300]] | |
| * @return {String} a string containing sizes, e.g. '[300.250,300.300]' | |
| */ | |
| function stringifySlotSizes(sizes) { | |
| var result = ''; | |
| if (utils.isArray(sizes)) { | |
| result = sizes.reduce(function (acc, size) { | |
| acc.push(size.join('.')); | |
| return acc; | |
| }, []); | |
| result = '[' + result.join(',') + ']'; | |
| } | |
| return result; | |
| } | |
| function stringifySlot(bidRequest) { | |
| var id = bidRequest.adUnitCode; | |
| var ss = stringifySlotSizes(bidRequest.sizes); | |
| var p = bidRequest.params.adUnitPath; | |
| var slot = { id: id, ss: ss, p: p }; | |
| var keyValues = utils.getKeys(slot).map(function (key) { | |
| return [key, slot[key]].join(':'); | |
| }); | |
| return '{' + keyValues.join(',') + '}'; | |
| } | |
| function stringifyWindowSize() { | |
| return [window.innerWidth || -1, window.innerHeight || -1].join('.'); | |
| } | |
| function stringifyScreenSize() { | |
| return [window.screen && window.screen.width || -1, window.screen && window.screen.height || -1].join('.'); | |
| } | |
| function buildRequests(bidRequests) { | |
| var IAS_HOST = '//pixel.adsafeprotected.com/services/pub'; | |
| var anId = bidRequests[0].params.pubId; | |
| var queries = []; | |
| queries.push(['anId', anId]); | |
| queries = queries.concat(bidRequests.reduce(function (acc, request) { | |
| acc.push(['slot', stringifySlot(request)]); | |
| return acc; | |
| }, [])); | |
| queries.push(['wr', stringifyWindowSize()]); | |
| queries.push(['sr', stringifyScreenSize()]); | |
| var queryString = encodeURI(queries.map(function (qs) { | |
| return qs.join('='); | |
| }).join('&')); | |
| return { | |
| method: 'GET', | |
| url: IAS_HOST, | |
| data: queryString, | |
| bidRequest: bidRequests[0] | |
| }; | |
| } | |
| function getPageLevelKeywords(response) { | |
| var result = {}; | |
| shallowMerge(result, response.brandSafety); | |
| result.fr = response.fr; | |
| return result; | |
| } | |
| function shallowMerge(dest, src) { | |
| utils.getKeys(src).reduce(function (dest, srcKey) { | |
| dest[srcKey] = src[srcKey]; | |
| return dest; | |
| }, dest); | |
| } | |
| function interpretResponse(serverResponse, request) { | |
| var iasResponse = serverResponse.body; | |
| var bidResponses = []; | |
| // Keys in common bid response are not used; | |
| // Necessary to get around with prebid's common bid response check | |
| var commonBidResponse = { | |
| requestId: request.bidRequest.bidId, | |
| cpm: 0.01, | |
| width: 100, | |
| height: 200, | |
| creativeId: 434, | |
| dealId: 42, | |
| currency: 'usd', | |
| netRevenue: true, | |
| ttl: 360 | |
| }; | |
| shallowMerge(commonBidResponse, getPageLevelKeywords(iasResponse)); | |
| commonBidResponse.slots = iasResponse.slots; | |
| bidResponses.push(commonBidResponse); | |
| return bidResponses; | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: [], | |
| isBidRequestValid: isBidRequestValid, | |
| buildRequests: buildRequests, | |
| interpretResponse: interpretResponse | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 187: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[185]); | |
| pbjsChunk([66],{ | |
| /***/ 188: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(189); | |
| module.exports = __webpack_require__(190); | |
| /***/ }), | |
| /***/ 189: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| var _userSync = __webpack_require__(13); | |
| 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 BIDDER_CODE = 'improvedigital'; | |
| var spec = exports.spec = { | |
| version: '4.1.0', | |
| code: BIDDER_CODE, | |
| aliases: ['id'], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && (bid.params.placementId || bid.params.placementKey && bid.params.publisherId)); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} bidRequests A non-empty list of bid requests which should be sent to the Server. | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidRequests) { | |
| var normalizedBids = bidRequests.map(function (bidRequest) { | |
| return getNormalizedBidRequest(bidRequest); | |
| }); | |
| var idClient = new ImproveDigitalAdServerJSClient('hb'); | |
| var requestParameters = { | |
| singleRequestMode: false, | |
| httpRequestType: idClient.CONSTANTS.HTTP_REQUEST_TYPE.GET, | |
| returnObjType: idClient.CONSTANTS.RETURN_OBJ_TYPE.PREBID, | |
| libVersion: this.version | |
| }; | |
| var requestObj = idClient.createRequest(normalizedBids, // requestObject | |
| requestParameters); | |
| if (requestObj.errors && requestObj.errors.length > 0) { | |
| utils.logError('ID WARNING 0x01'); | |
| } | |
| return requestObj.requests; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, request) { | |
| var bids = []; | |
| utils._each(serverResponse.body.bid, function (bidObject) { | |
| if (!bidObject.price || bidObject.price === null || bidObject.hasOwnProperty('errorCode') || typeof bidObject.adm !== 'string') { | |
| return; | |
| } | |
| var bid = {}; | |
| var nurl = ''; | |
| if (bidObject.nurl && bidObject.nurl.length > 0) { | |
| nurl = '<img src="' + bidObject.nurl + '" width="0" height="0" style="display:none">'; | |
| } | |
| bid.ad = nurl + '<script>' + bidObject.adm + '</script>'; | |
| bid.adId = bidObject.id; | |
| bid.cpm = parseFloat(bidObject.price); | |
| bid.creativeId = bidObject.crid; | |
| bid.currency = bidObject.currency ? bidObject.currency.toUpperCase() : 'USD'; | |
| if (utils.isNumber(bidObject.lid)) { | |
| bid.dealId = bidObject.lid; | |
| } else if (_typeof(bidObject.lid) === 'object' && bidObject.lid['1']) { | |
| bid.dealId = bidObject.lid['1']; | |
| } | |
| bid.height = bidObject.h; | |
| bid.netRevenue = bidObject.isNet ? bidObject.isNet : false; | |
| bid.requestId = bidObject.id; | |
| bid.ttl = 300; | |
| bid.width = bidObject.w; | |
| bids.push(bid); | |
| // Register user sync URLs | |
| if (utils.isArray(bidObject.sync)) { | |
| utils._each(bidObject.sync, function (syncElement) { | |
| _userSync.userSync.registerSync('image', spec.code, syncElement); | |
| }); | |
| } | |
| }); | |
| return bids; | |
| } | |
| }; | |
| function getNormalizedBidRequest(bid) { | |
| var adUnitId = utils.getBidIdParameter('adUnitCode', bid) || null; | |
| var placementId = utils.getBidIdParameter('placementId', bid.params) || null; | |
| var publisherId = null; | |
| var placementKey = null; | |
| if (placementId === null) { | |
| publisherId = utils.getBidIdParameter('publisherId', bid.params) || null; | |
| placementKey = utils.getBidIdParameter('placementKey', bid.params) || null; | |
| } | |
| var keyValues = utils.getBidIdParameter('keyValues', bid.params) || null; | |
| var localSize = utils.getBidIdParameter('size', bid.params) || null; | |
| var bidId = utils.getBidIdParameter('bidId', bid); | |
| var transactionId = utils.getBidIdParameter('transactionId', bid); | |
| var currency = _config.config.getConfig('currency.adServerCurrency'); | |
| var normalizedBidRequest = {}; | |
| if (placementId) { | |
| normalizedBidRequest.placementId = placementId; | |
| } else { | |
| if (publisherId) { | |
| normalizedBidRequest.publisherId = publisherId; | |
| } | |
| if (placementKey) { | |
| normalizedBidRequest.placementKey = placementKey; | |
| } | |
| } | |
| if (keyValues) { | |
| normalizedBidRequest.keyValues = keyValues; | |
| } | |
| if (localSize && localSize.w && localSize.h) { | |
| normalizedBidRequest.size = {}; | |
| normalizedBidRequest.size.h = localSize.h; | |
| normalizedBidRequest.size.w = localSize.w; | |
| } | |
| if (bidId) { | |
| normalizedBidRequest.id = bidId; | |
| } | |
| if (adUnitId) { | |
| normalizedBidRequest.adUnitId = adUnitId; | |
| } | |
| if (transactionId) { | |
| normalizedBidRequest.transactionId = transactionId; | |
| } | |
| if (currency) { | |
| normalizedBidRequest.currency = currency; | |
| } | |
| return normalizedBidRequest; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| function ImproveDigitalAdServerJSClient(endPoint) { | |
| this.CONSTANTS = { | |
| HTTP_REQUEST_TYPE: { | |
| GET: 0, | |
| POST: 1 | |
| }, | |
| HTTP_SECURITY: { | |
| STANDARD: 0, | |
| SECURE: 1 | |
| }, | |
| AD_SERVER_BASE_URL: 'ad.360yield.com', | |
| END_POINT: endPoint || 'hb', | |
| AD_SERVER_URL_PARAM: 'jsonp=', | |
| CLIENT_VERSION: 'JS-4.3.3', | |
| MAX_URL_LENGTH: 2083, | |
| ERROR_CODES: { | |
| BAD_HTTP_REQUEST_TYPE_PARAM: 1, | |
| MISSING_PLACEMENT_PARAMS: 2, | |
| LIB_VERSION_MISSING: 3 | |
| }, | |
| RETURN_OBJ_TYPE: { | |
| DEFAULT: 0, | |
| PREBID: 1 | |
| } | |
| }; | |
| this.getErrorReturn = function (errorCode) { | |
| return { | |
| idMappings: {}, | |
| requests: {}, | |
| 'errorCode': errorCode | |
| }; | |
| }; | |
| this.createRequest = function (requestObject, requestParameters, extraRequestParameters) { | |
| if (requestParameters.httpRequestType !== this.CONSTANTS.HTTP_REQUEST_TYPE.GET) { | |
| return this.getErrorReturn(this.CONSTANTS.ERROR_CODES.BAD_HTTP_REQUEST_TYPE_PARAM); | |
| } | |
| if (!requestParameters.libVersion) { | |
| return this.getErrorReturn(this.CONSTANTS.ERROR_CODES.LIB_VERSION_MISSING); | |
| } | |
| requestParameters.returnObjType = requestParameters.returnObjType || this.CONSTANTS.RETURN_OBJ_TYPE.DEFAULT; | |
| var impressionObjects = []; | |
| var impressionObject = void 0; | |
| var counter = void 0; | |
| if (utils.isArray(requestObject)) { | |
| for (counter = 0; counter < requestObject.length; counter++) { | |
| impressionObject = this.createImpressionObject(requestObject[counter]); | |
| impressionObjects.push(impressionObject); | |
| } | |
| } else { | |
| impressionObject = this.createImpressionObject(requestObject); | |
| impressionObjects.push(impressionObject); | |
| } | |
| var returnIdMappings = true; | |
| if (requestParameters.returnObjType === this.CONSTANTS.RETURN_OBJ_TYPE.PREBID) { | |
| returnIdMappings = false; | |
| } | |
| var returnObject = {}; | |
| returnObject.requests = []; | |
| if (returnIdMappings) { | |
| returnObject.idMappings = []; | |
| } | |
| var errors = null; | |
| var baseUrl = (requestParameters.secure === 1 ? 'https' : 'http') + '://' + this.CONSTANTS.AD_SERVER_BASE_URL + '/' + this.CONSTANTS.END_POINT + '?' + this.CONSTANTS.AD_SERVER_URL_PARAM; | |
| var bidRequestObject = { | |
| bid_request: this.createBasicBidRequestObject(requestParameters, extraRequestParameters) | |
| }; | |
| for (counter = 0; counter < impressionObjects.length; counter++) { | |
| impressionObject = impressionObjects[counter]; | |
| if (impressionObject.errorCode) { | |
| errors = errors || []; | |
| errors.push({ | |
| errorCode: impressionObject.errorCode, | |
| adUnitId: impressionObject.adUnitId | |
| }); | |
| } else { | |
| if (returnIdMappings) { | |
| returnObject.idMappings.push({ | |
| adUnitId: impressionObject.adUnitId, | |
| id: impressionObject.impressionObject.id | |
| }); | |
| } | |
| bidRequestObject.bid_request.imp = bidRequestObject.bid_request.imp || []; | |
| bidRequestObject.bid_request.imp.push(impressionObject.impressionObject); | |
| var writeLongRequest = false; | |
| var outputUri = baseUrl + encodeURIComponent(JSON.stringify(bidRequestObject)); | |
| if (outputUri.length > this.CONSTANTS.MAX_URL_LENGTH) { | |
| writeLongRequest = true; | |
| if (bidRequestObject.bid_request.imp.length > 1) { | |
| // Pop the current request and process it again in the next iteration | |
| bidRequestObject.bid_request.imp.pop(); | |
| if (returnIdMappings) { | |
| returnObject.idMappings.pop(); | |
| } | |
| counter--; | |
| } | |
| } | |
| if (writeLongRequest || !requestParameters.singleRequestMode || counter === impressionObjects.length - 1) { | |
| returnObject.requests.push(this.formatRequest(requestParameters, bidRequestObject)); | |
| bidRequestObject = { | |
| bid_request: this.createBasicBidRequestObject(requestParameters, extraRequestParameters) | |
| }; | |
| } | |
| } | |
| } | |
| if (errors) { | |
| returnObject.errors = errors; | |
| } | |
| return returnObject; | |
| }; | |
| this.formatRequest = function (requestParameters, bidRequestObject) { | |
| switch (requestParameters.returnObjType) { | |
| case this.CONSTANTS.RETURN_OBJ_TYPE.PREBID: | |
| return { | |
| method: 'GET', | |
| url: '//' + this.CONSTANTS.AD_SERVER_BASE_URL + '/' + this.CONSTANTS.END_POINT, | |
| data: '' + this.CONSTANTS.AD_SERVER_URL_PARAM + JSON.stringify(bidRequestObject) | |
| }; | |
| default: | |
| var baseUrl = (requestParameters.secure === 1 ? 'https' : 'http') + '://' + (this.CONSTANTS.AD_SERVER_BASE_URL + '/') + (this.CONSTANTS.END_POINT + '?' + this.CONSTANTS.AD_SERVER_URL_PARAM); | |
| return { | |
| url: baseUrl + encodeURIComponent(JSON.stringify(bidRequestObject)) | |
| }; | |
| } | |
| }; | |
| this.createBasicBidRequestObject = function (requestParameters, extraRequestParameters) { | |
| var impressionBidRequestObject = {}; | |
| if (requestParameters.requestId) { | |
| impressionBidRequestObject.id = requestParameters.requestId; | |
| } else { | |
| impressionBidRequestObject.id = utils.getUniqueIdentifierStr(); | |
| } | |
| if (requestParameters.domain) { | |
| impressionBidRequestObject.domain = requestParameters.domain; | |
| } | |
| if (requestParameters.page) { | |
| impressionBidRequestObject.page = requestParameters.page; | |
| } | |
| if (requestParameters.ref) { | |
| impressionBidRequestObject.ref = requestParameters.ref; | |
| } | |
| if (requestParameters.callback) { | |
| impressionBidRequestObject.callback = requestParameters.callback; | |
| } | |
| if ('secure' in requestParameters) { | |
| impressionBidRequestObject.secure = requestParameters.secure; | |
| } | |
| if (requestParameters.libVersion) { | |
| impressionBidRequestObject.version = requestParameters.libVersion + '-' + this.CONSTANTS.CLIENT_VERSION; | |
| } | |
| if (extraRequestParameters) { | |
| for (var prop in extraRequestParameters) { | |
| impressionBidRequestObject[prop] = extraRequestParameters[prop]; | |
| } | |
| } | |
| return impressionBidRequestObject; | |
| }; | |
| this.createImpressionObject = function (placementObject) { | |
| var outputObject = {}; | |
| var impressionObject = {}; | |
| outputObject.impressionObject = impressionObject; | |
| if (placementObject.id) { | |
| impressionObject.id = placementObject.id; | |
| } else { | |
| impressionObject.id = utils.getUniqueIdentifierStr(); | |
| } | |
| if (placementObject.adUnitId) { | |
| outputObject.adUnitId = placementObject.adUnitId; | |
| } | |
| if (placementObject.currency) { | |
| impressionObject.currency = placementObject.currency.toUpperCase(); | |
| } | |
| if (placementObject.placementId) { | |
| impressionObject.pid = placementObject.placementId; | |
| } | |
| if (placementObject.publisherId) { | |
| impressionObject.pubid = placementObject.publisherId; | |
| } | |
| if (placementObject.placementKey) { | |
| impressionObject.pkey = placementObject.placementKey; | |
| } | |
| if (placementObject.transactionId) { | |
| impressionObject.tid = placementObject.transactionId; | |
| } | |
| if (placementObject.keyValues) { | |
| for (var key in placementObject.keyValues) { | |
| for (var valueCounter = 0; valueCounter < placementObject.keyValues[key].length; valueCounter++) { | |
| impressionObject.kvw = impressionObject.kvw || {}; | |
| impressionObject.kvw[key] = impressionObject.kvw[key] || []; | |
| impressionObject.kvw[key].push(placementObject.keyValues[key][valueCounter]); | |
| } | |
| } | |
| } | |
| if (placementObject.size && placementObject.size.w && placementObject.size.h) { | |
| impressionObject.banner = {}; | |
| impressionObject.banner.w = placementObject.size.w; | |
| impressionObject.banner.h = placementObject.size.h; | |
| } else { | |
| impressionObject.banner = {}; | |
| } | |
| if (!impressionObject.pid && !impressionObject.pubid && !impressionObject.pkey && !(impressionObject.banner && impressionObject.banner.w && impressionObject.banner.h)) { | |
| outputObject.impressionObject = null; | |
| outputObject.errorCode = this.CONSTANTS.ERROR_CODES.MISSING_PLACEMENT_PARAMS; | |
| } | |
| return outputObject; | |
| }; | |
| } | |
| exports.ImproveDigitalAdServerJSClient = ImproveDigitalAdServerJSClient; | |
| /***/ }), | |
| /***/ 190: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[188]); | |
| pbjsChunk([65],{ | |
| /***/ 191: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(192); | |
| module.exports = __webpack_require__(193); | |
| /***/ }), | |
| /***/ 192: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'innity'; | |
| var ENDPOINT = location.protocol + '//as.innity.com/synd/'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params && bid.params.pub && bid.params.zone); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| return validBidRequests.map(function (bidRequest) { | |
| var parseSized = utils.parseSizesInput(bidRequest.sizes); | |
| var arrSize = parseSized[0].split('x'); | |
| return { | |
| method: 'GET', | |
| url: ENDPOINT, | |
| data: { | |
| cb: utils.timestamp(), | |
| ver: 2, | |
| hb: 1, | |
| output: 'js', | |
| pub: bidRequest.params.pub, | |
| zone: bidRequest.params.zone, | |
| url: encodeURIComponent(utils.getTopWindowUrl()), | |
| width: arrSize[0], | |
| height: arrSize[1], | |
| vpw: window.screen.width, | |
| vph: window.screen.height, | |
| callback: 'json', | |
| callback_uid: bidRequest.bidId, | |
| auction: bidRequest.auctionId | |
| } | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, request) { | |
| var res = serverResponse.body; | |
| var bidResponse = { | |
| requestId: res.callback_uid, | |
| cpm: parseFloat(res.cpm) / 100, | |
| width: res.width, | |
| height: res.height, | |
| creativeId: res.creative_id, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 60, | |
| ad: '<script src="' + location.protocol + '//cdn.innity.net/frame_util.js"></script>' + res.tag | |
| }; | |
| return [bidResponse]; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 193: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[191]); | |
| pbjsChunk([64],{ | |
| /***/ 194: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(195); | |
| module.exports = __webpack_require__(196); | |
| /***/ }), | |
| /***/ 195: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'inskin'; | |
| var CONFIG = { | |
| 'inskin': { | |
| 'BASE_URI': 'https://mfad.inskinad.com/api/v2' | |
| } | |
| }; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.networkId && bid.params.siteId); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| // Do we need to group by bidder? i.e. to make multiple requests for | |
| // different endpoints. | |
| var ret = { | |
| method: 'POST', | |
| url: '', | |
| data: '', | |
| bidRequest: [] | |
| }; | |
| if (validBidRequests.length < 1) { | |
| return ret; | |
| } | |
| var ENDPOINT_URL = void 0; | |
| var data = _extends({ | |
| placements: [], | |
| time: Date.now(), | |
| user: {}, | |
| url: utils.getTopWindowUrl(), | |
| enableBotFiltering: true, | |
| includePricingData: true, | |
| parallel: true | |
| }, validBidRequests[0].params); | |
| validBidRequests.map(function (bid) { | |
| var config = CONFIG[bid.bidder]; | |
| ENDPOINT_URL = config.BASE_URI; | |
| var placement = _extends({ | |
| divName: bid.bidId, | |
| adTypes: bid.adTypes || getSize(bid.sizes), | |
| eventIds: [40, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295] | |
| }, bid.params); | |
| placement.adTypes.push(5, 9, 163, 2163, 3006); | |
| if (placement.networkId && placement.siteId) { | |
| data.placements.push(placement); | |
| } | |
| }); | |
| ret.data = JSON.stringify(data); | |
| ret.bidRequest = validBidRequests; | |
| ret.url = ENDPOINT_URL; | |
| return ret; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bid = void 0; | |
| var bids = void 0; | |
| var bidId = void 0; | |
| var bidObj = void 0; | |
| var bidResponses = []; | |
| var bidsMap = {}; | |
| bids = bidRequest.bidRequest; | |
| serverResponse = (serverResponse || {}).body; | |
| for (var i = 0; i < bids.length; i++) { | |
| bid = {}; | |
| bidObj = bids[i]; | |
| bidId = bidObj.bidId; | |
| bidsMap[bidId] = bidObj; | |
| if (serverResponse) { | |
| var decision = serverResponse.decisions && serverResponse.decisions[bidId]; | |
| var price = decision && decision.pricing && decision.pricing.clearPrice; | |
| if (decision && price) { | |
| bid.requestId = bidId; | |
| bid.cpm = price; | |
| bid.width = decision.width; | |
| bid.height = decision.height; | |
| bid.ad = retrieveAd(bidId, decision); | |
| bid.currency = 'USD'; | |
| bid.creativeId = decision.adId; | |
| bid.ttl = 360; | |
| bid.netRevenue = true; | |
| bid.referrer = utils.getTopWindowUrl(); | |
| bidResponses.push(bid); | |
| } | |
| } | |
| } | |
| if (bidResponses.length) { | |
| window.addEventListener('message', function (e) { | |
| if (!e.data || e.data.from !== 'ism-bid') { | |
| return; | |
| } | |
| var decision = serverResponse.decisions && serverResponse.decisions[e.data.bidId]; | |
| if (!decision) { | |
| return; | |
| } | |
| var id = 'ism_tag_' + Math.floor(Math.random() * 10e16); | |
| window[id] = { | |
| bidId: e.data.bidId, | |
| serverResponse: serverResponse | |
| }; | |
| var script = document.createElement('script'); | |
| script.src = 'https://cdn.inskinad.com/isfe/publishercode/' + bidsMap[e.data.bidId].params.siteId + '/default.js?autoload&id=' + id; | |
| document.getElementsByTagName('head')[0].appendChild(script); | |
| }); | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| return []; | |
| } | |
| }; | |
| var sizeMap = [null, '120x90', '120x90', '468x60', '728x90', '300x250', '160x600', '120x600', '300x100', '180x150', '336x280', '240x400', '234x60', '88x31', '120x60', '120x240', '125x125', '220x250', '250x250', '250x90', '0x0', '200x90', '300x50', '320x50', '320x480', '185x185', '620x45', '300x125', '800x250']; | |
| sizeMap[77] = '970x90'; | |
| sizeMap[123] = '970x250'; | |
| sizeMap[43] = '300x600'; | |
| function getSize(sizes) { | |
| var result = []; | |
| sizes.forEach(function (size) { | |
| var index = sizeMap.indexOf(size[0] + 'x' + size[1]); | |
| if (index >= 0) { | |
| result.push(index); | |
| } | |
| }); | |
| return result; | |
| } | |
| function retrieveAd(bidId, decision) { | |
| return "<script>window.top.postMessage({from: 'ism-bid', bidId: '" + bidId + "'}, '*');\x3c/script>" + utils.createTrackPixelHtml(decision.impressionUrl); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 196: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[194]); | |
| pbjsChunk([63],{ | |
| /***/ 197: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(198); | |
| module.exports = __webpack_require__(199); | |
| /***/ }), | |
| /***/ 198: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 CONSTANTS = { | |
| BIDDER_CODE: 'invibes', | |
| BID_ENDPOINT: '//bid.videostep.com/Bid/VideoAdContent', | |
| SYNC_ENDPOINT: '//k.r66net.com/GetUserSync', | |
| TIME_TO_LIVE: 300, | |
| DEFAULT_CURRENCY: 'EUR', | |
| PREBID_VERSION: 1, | |
| METHOD: 'GET' | |
| }; | |
| var spec = exports.spec = { | |
| code: CONSTANTS.BIDDER_CODE, | |
| /** | |
| * @param {object} bid | |
| * @return boolean | |
| */ | |
| isBidRequestValid: isBidRequestValid, | |
| /** | |
| * @param {BidRequest[]} bidRequests | |
| * @param bidderRequest | |
| * @return ServerRequest[] | |
| */ | |
| buildRequests: function buildRequests(bidRequests, bidderRequest) { | |
| return buildRequest(bidRequests, bidderRequest != null ? bidderRequest.auctionStart : null); | |
| }, | |
| /** | |
| * @param {*} responseObj | |
| * @param {requestParams} bidRequests | |
| * @return {Bid[]} An array of bids which | |
| */ | |
| interpretResponse: function interpretResponse(responseObj, requestParams) { | |
| return handleResponse(responseObj, requestParams != null ? requestParams.bidRequests : null); | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return { | |
| type: 'iframe', | |
| url: CONSTANTS.SYNC_ENDPOINT | |
| }; | |
| } | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| function isBidRequestValid(bid) { | |
| if (_typeof(bid.params) !== 'object') { | |
| return false; | |
| } | |
| var params = bid.params; | |
| if (params.placementId == null) { | |
| return false; | |
| } | |
| return true; | |
| } | |
| function buildRequest(bidRequests, auctionStart) { | |
| // invibes only responds to 1 bid request for each user visit | |
| var _placementIds = []; | |
| var _loginId = void 0, | |
| _customEndpoint = void 0, | |
| _bidContainerId = void 0; | |
| var _ivAuctionStart = auctionStart || Date.now(); | |
| bidRequests.forEach(function (bidRequest) { | |
| bidRequest.startTime = new Date().getTime(); | |
| _placementIds.push(bidRequest.params.placementId); | |
| _loginId = _loginId || bidRequest.params.loginId; | |
| _customEndpoint = _customEndpoint || bidRequest.params.customEndpoint; | |
| _bidContainerId = _bidContainerId || bidRequest.params.adContainerId || bidRequest.params.bidContainerId; | |
| }); | |
| var topWin = getTopMostWindow(); | |
| var invibes = topWin.invibes = topWin.invibes || {}; | |
| invibes.visitId = invibes.visitId || generateRandomId(); | |
| invibes.bidContainerId = invibes.bidContainerId || _bidContainerId; | |
| initDomainId(invibes); | |
| var currentQueryStringParams = parseQueryStringParams(); | |
| var data = { | |
| location: getDocumentLocation(topWin), | |
| videoAdHtmlId: generateRandomId(), | |
| showFallback: currentQueryStringParams['advs'] === '0', | |
| ivbsCampIdsLocal: getCookie('IvbsCampIdsLocal'), | |
| lId: invibes.dom.id, | |
| bidParamsJson: JSON.stringify({ | |
| placementIds: _placementIds, | |
| loginId: _loginId, | |
| bidContainerId: _bidContainerId, | |
| auctionStartTime: _ivAuctionStart, | |
| bidVersion: CONSTANTS.PREBID_VERSION | |
| }), | |
| capCounts: getCappedCampaignsAsString(), | |
| vId: invibes.visitId, | |
| width: topWin.innerWidth, | |
| height: topWin.innerHeight | |
| }; | |
| var parametersToPassForward = 'videoaddebug,advs,bvci,bvid,istop,trybvid,trybvci'.split(','); | |
| for (var key in currentQueryStringParams) { | |
| if (currentQueryStringParams.hasOwnProperty(key)) { | |
| var value = currentQueryStringParams[key]; | |
| if (parametersToPassForward.indexOf(key) > -1 || /^vs|^invib/i.test(key)) { | |
| data[key] = value; | |
| } | |
| } | |
| } | |
| return { | |
| method: CONSTANTS.METHOD, | |
| url: _customEndpoint || CONSTANTS.BID_ENDPOINT, | |
| data: data, | |
| options: { withCredentials: true }, | |
| // for POST: { contentType: 'application/json', withCredentials: true } | |
| bidRequests: bidRequests | |
| }; | |
| } | |
| function handleResponse(responseObj, bidRequests) { | |
| if (bidRequests == null || bidRequests.length === 0) { | |
| utils.logInfo('Invibes Adapter - No bids have been requested'); | |
| return []; | |
| } | |
| if (!responseObj) { | |
| utils.logInfo('Invibes Adapter - Bid response is empty'); | |
| return []; | |
| } | |
| responseObj = responseObj.body || responseObj; | |
| responseObj = responseObj.videoAdContentResult || responseObj; | |
| var bidModel = responseObj.BidModel; | |
| if ((typeof bidModel === 'undefined' ? 'undefined' : _typeof(bidModel)) !== 'object') { | |
| utils.logInfo('Invibes Adapter - Bidding is not configured'); | |
| return []; | |
| } | |
| var topWin = getTopMostWindow(); | |
| var invibes = topWin.invibes = topWin.invibes || {}; | |
| if (_typeof(invibes.bidResponse) === 'object') { | |
| utils.logInfo('Invibes Adapter - Bid response already received. Invibes only responds to one bid request per user visit'); | |
| return []; | |
| } | |
| invibes.bidResponse = responseObj; | |
| var ads = responseObj.Ads; | |
| if (!Array.isArray(ads) || ads.length < 1) { | |
| if (responseObj.AdReason != null) { | |
| utils.logInfo('Invibes Adapter - ' + responseObj.AdReason); | |
| } | |
| utils.logInfo('Invibes Adapter - No ads available'); | |
| return []; | |
| } | |
| var ad = ads[0]; | |
| if (bidModel.PlacementId == null) { | |
| utils.logInfo('Invibes Adapter - No Placement Id in response'); | |
| return []; | |
| } | |
| var bidResponses = []; | |
| for (var i = 0; i < bidRequests.length; i++) { | |
| var bidRequest = bidRequests[i]; | |
| if (bidModel.PlacementId === bidRequest.params.placementId) { | |
| var size = getBiggerSize(bidRequest.sizes); | |
| bidResponses.push({ | |
| requestId: bidRequest.bidId, | |
| cpm: ad.BidPrice, | |
| width: bidModel.Width || size[0], | |
| height: bidModel.Height || size[1], | |
| creativeId: ad.VideoExposedId, | |
| currency: bidModel.Currency || CONSTANTS.DEFAULT_CURRENCY, | |
| netRevenue: true, | |
| ttl: CONSTANTS.TIME_TO_LIVE, | |
| ad: renderCreative(bidModel) | |
| }); | |
| var now = Date.now(); | |
| invibes.ivLogger = invibes.ivLogger || initLogger(); | |
| invibes.ivLogger.info('Bid auction started at ' + bidModel.AuctionStartTime + ' . Invibes registered the bid at ' + now + ' ; bid request took a total of ' + (now - bidModel.AuctionStartTime) + ' ms.'); | |
| } else { | |
| utils.logInfo('Invibes Adapter - Incorrect Placement Id: ' + bidRequest.params.placementId); | |
| } | |
| } | |
| return bidResponses; | |
| } | |
| function generateRandomId() { | |
| return Math.round(Math.random() * 1e12).toString(36).substring(0, 10); | |
| } | |
| function getDocumentLocation(topWin) { | |
| return topWin.location.href.substring(0, 300).split(/[?#]/)[0]; | |
| } | |
| function parseQueryStringParams() { | |
| var params = {}; | |
| try { | |
| params = JSON.parse(localStorage.ivbs); | |
| } catch (e) {} | |
| var re = /[\\?&]([^=]+)=([^\\?&#]+)/g; | |
| var m = void 0; | |
| while ((m = re.exec(window.location.href)) != null) { | |
| if (m.index === re.lastIndex) { | |
| re.lastIndex++; | |
| } | |
| params[m[1].toLowerCase()] = m[2]; | |
| } | |
| return params; | |
| } | |
| function getBiggerSize(array) { | |
| var result = [0, 0]; | |
| for (var i = 0; i < array.length; i++) { | |
| if (array[i][0] * array[i][1] > result[0] * result[1]) { | |
| result = array[i]; | |
| } | |
| } | |
| return result; | |
| } | |
| function getTopMostWindow() { | |
| var res = window; | |
| try { | |
| while (top !== res) { | |
| if (res.parent.location.href.length) { | |
| res = res.parent; | |
| } | |
| } | |
| } catch (e) {} | |
| return res; | |
| } | |
| function renderCreative(bidModel) { | |
| return '<html>\n <head><script type=\'text/javascript\'>inDapIF=true;</script></head>\n <body style=\'margin : 0; padding: 0;\'>\n creativeHtml\n </body>\n </html>'.replace('creativeHtml', bidModel.CreativeHtml); | |
| } | |
| function getCappedCampaignsAsString() { | |
| var key = 'ivvcap'; | |
| var loadData = function loadData() { | |
| try { | |
| return JSON.parse(localStorage.getItem(key)) || {}; | |
| } catch (e) { | |
| return {}; | |
| } | |
| }; | |
| var saveData = function saveData(data) { | |
| localStorage.setItem(key, JSON.stringify(data)); | |
| }; | |
| var clearExpired = function clearExpired() { | |
| var now = new Date().getTime(); | |
| var data = loadData(); | |
| var dirty = false; | |
| Object.keys(data).forEach(function (k) { | |
| var exp = data[k][1]; | |
| if (exp <= now) { | |
| delete data[k]; | |
| dirty = true; | |
| } | |
| }); | |
| if (dirty) { | |
| saveData(data); | |
| } | |
| }; | |
| var getCappedCampaigns = function getCappedCampaigns() { | |
| clearExpired(); | |
| var data = loadData(); | |
| return Object.keys(data).filter(function (k) { | |
| return data.hasOwnProperty(k); | |
| }).sort().map(function (k) { | |
| return [k, data[k][0]]; | |
| }); | |
| }; | |
| return getCappedCampaigns().map(function (record) { | |
| return record.join('='); | |
| }).join(','); | |
| } | |
| function initLogger() { | |
| var noop = function noop() {}; | |
| if (localStorage && localStorage.InvibesDEBUG) { | |
| return window.console; | |
| } | |
| return { info: noop, error: noop, log: noop, warn: noop, debug: noop }; | |
| } | |
| /// Local domain cookie management ===================== | |
| var Uid = { | |
| generate: function generate() { | |
| var date = new Date().getTime(); | |
| if (date > 151 * 10e9) { | |
| var datePart = Math.floor(date / 1000).toString(36); | |
| var maxRand = parseInt('zzzzzz', 36); | |
| var randPart = Math.floor(Math.random() * maxRand).toString(36); | |
| return datePart + '.' + randPart; | |
| } | |
| }, | |
| getCrTime: function getCrTime(s) { | |
| var toks = s.split('.'); | |
| return parseInt(toks[0] || 0, 36) * 1e3; | |
| } | |
| }; | |
| var cookieDomain = void 0, | |
| noCookies = void 0; | |
| function getCookie(name) { | |
| var i = void 0, | |
| x = void 0, | |
| y = void 0; | |
| var cookies = document.cookie.split(';'); | |
| for (i = 0; i < cookies.length; i++) { | |
| x = cookies[i].substr(0, cookies[i].indexOf('=')); | |
| y = cookies[i].substr(cookies[i].indexOf('=') + 1); | |
| x = x.replace(/^\s+|\s+$/g, ''); | |
| if (x === name) { | |
| return unescape(y); | |
| } | |
| } | |
| }; | |
| function setCookie(name, value, exdays, domain) { | |
| if (noCookies && name != 'ivNoCookie' && (exdays || 0) >= 0) { | |
| return; | |
| } | |
| if (exdays > 365) { | |
| exdays = 365; | |
| } | |
| domain = domain || cookieDomain; | |
| var exdate = new Date(); | |
| var exms = exdays * 24 * 60 * 60 * 1000; | |
| exdate.setTime(exdate.getTime() + exms); | |
| var cookieValue = value + (!exdays ? '' : '; expires=' + exdate.toUTCString()); | |
| cookieValue += ';domain=' + domain + ';path=/'; | |
| document.cookie = name + '=' + cookieValue; | |
| }; | |
| var detectTopmostCookieDomain = function detectTopmostCookieDomain() { | |
| var testCookie = Uid.generate(); | |
| var hostParts = location.host.split('.'); | |
| if (hostParts.length === 1) { | |
| return location.host; | |
| } | |
| for (var i = hostParts.length - 1; i >= 0; i--) { | |
| var domain = '.' + hostParts.slice(i).join('.'); | |
| setCookie(testCookie, testCookie, 1, domain); | |
| var val = getCookie(testCookie); | |
| if (val === testCookie) { | |
| setCookie(testCookie, testCookie, -1, domain); | |
| return domain; | |
| } | |
| } | |
| }; | |
| cookieDomain = detectTopmostCookieDomain(); | |
| noCookies = getCookie('ivNoCookie'); | |
| function initDomainId(invibes, persistence) { | |
| if (_typeof(invibes.dom) === 'object') { | |
| return; | |
| } | |
| var cookiePersistence = { | |
| cname: 'ivbsdid', | |
| load: function load() { | |
| var str = getCookie(this.cname) || ''; | |
| try { | |
| return JSON.parse(str); | |
| } catch (e) {} | |
| }, | |
| save: function save(obj) { | |
| setCookie(this.cname, JSON.stringify(obj), 365); | |
| } | |
| }; | |
| persistence = persistence || cookiePersistence; | |
| var state = void 0; | |
| var minHC = 5; | |
| var validGradTime = function validGradTime(d) { | |
| var min = 151 * 10e9; | |
| var yesterday = new Date().getTime() - 864 * 10e4; | |
| return d > min && d < yesterday; | |
| }; | |
| state = persistence.load() || { | |
| id: Uid.generate(), | |
| hc: 1, | |
| temp: 1 | |
| }; | |
| var graduate = void 0; | |
| var setId = function setId() { | |
| invibes.dom = { | |
| id: state.temp ? undefined : state.id, | |
| tempId: state.id, | |
| graduate: graduate | |
| }; | |
| }; | |
| graduate = function graduate() { | |
| if (!state.temp) { | |
| return; | |
| } | |
| delete state.temp; | |
| delete state.hc; | |
| persistence.save(state); | |
| setId(); | |
| }; | |
| if (state.temp) { | |
| if (state.hc < minHC) { | |
| state.hc++; | |
| } | |
| if (state.hc >= minHC && validGradTime(Uid.getCrTime(state.id))) { | |
| graduate(); | |
| } | |
| } | |
| persistence.save(state); | |
| setId(); | |
| }; | |
| // ===================== | |
| /***/ }), | |
| /***/ 199: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[197]); | |
| pbjsChunk([62],{ | |
| /***/ 200: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(201); | |
| module.exports = __webpack_require__(202); | |
| /***/ }), | |
| /***/ 201: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| /* WEBPACK VAR INJECTION */(function(global) { | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'iqm'; | |
| // import {config} from 'src/config'; | |
| var ENDPOINT_URL = 'https://pbd.bids.iqm.com'; | |
| var VERSION = 'v.1.0.0'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['iqm'], // short code | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.publisherId && bid.params.placementId && bid.params.tagId); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @return ServerRequest Info describing the request to the server. | |
| * @param validBidRequests - an array of bids | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var requestId = ''; | |
| var siteId = ''; | |
| var device = getDevice(); | |
| return validBidRequests.map(function (bid) { | |
| requestId = bid.requestId; | |
| var bidfloor = utils.getBidIdParameter('bidfloor', bid.params); | |
| siteId = utils.getBidIdParameter('tagId', bid.params); | |
| var imp = { | |
| id: bid.bidId, | |
| secure: 1, | |
| bidfloor: bidfloor || 0, | |
| displaymanager: 'Prebid.js', | |
| displaymanagerver: VERSION, | |
| mediatype: 'banner' | |
| }; | |
| imp.banner = getSize(bid.sizes); | |
| var data = { | |
| id: requestId, | |
| publisherId: utils.getBidIdParameter('publisherId', bid.params), | |
| tagId: utils.getBidIdParameter('tagId', bid.params), | |
| placementId: utils.getBidIdParameter('placementId', bid.params), | |
| device: device, | |
| site: { | |
| id: siteId, | |
| page: utils.getTopWindowLocation().href, | |
| domain: utils.getTopWindowLocation().host | |
| }, | |
| imp: imp | |
| }; | |
| return { | |
| method: 'POST', | |
| url: ENDPOINT_URL, | |
| data: data | |
| }; | |
| }); | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @param bidRequest | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| // const serverBody = serverResponse.body; | |
| // const headerValue = serverResponse.headers.get('some-response-header') | |
| var bidResponses = []; | |
| serverResponse = serverResponse.body; | |
| if (serverResponse && utils.isArray(serverResponse.seatbid)) { | |
| utils._each(serverResponse.seatbid, function (bidList) { | |
| utils._each(bidList.bid, function (bid) { | |
| var responseCPM = parseFloat(bid.price); | |
| if (responseCPM > 0.0 && bid.impid) { | |
| // const responseNurl = bid.nurl || ''; | |
| var bidResponse = { | |
| requestId: bid.impid, | |
| currency: serverResponse.cur || 'USD', | |
| cpm: responseCPM, | |
| netRevenue: true, | |
| creativeId: bid.crid || '', | |
| ad: bid.adm || '', | |
| width: bid.w || bidRequest.data.imp.banner.w, | |
| height: bid.h || bidRequest.data.imp.banner.h, | |
| ttl: bid.ttl || 300 | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| }); | |
| }); | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| var getDevice = function getDevice() { | |
| var language = navigator.language ? 'language' : 'userLanguage'; | |
| return { | |
| h: screen.height, | |
| w: screen.width, | |
| dnt: _getDNT() ? 1 : 0, | |
| language: navigator[language].split('-')[0], | |
| make: navigator.vendor ? navigator.vendor : '', | |
| ua: navigator.userAgent, | |
| devicetype: _isMobile() ? 1 : _isConnectedTV() ? 3 : 2 | |
| }; | |
| }; | |
| var _getDNT = function _getDNT() { | |
| return navigator.doNotTrack === '1' || window.doNotTrack === '1' || navigator.msDoNotTrack === '1' || navigator.doNotTrack === 'yes'; | |
| }; | |
| var getSize = function getSize(sizes) { | |
| var sizeMap = void 0; | |
| if (sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') { | |
| sizeMap = { w: sizes[0], h: sizes[1] }; | |
| } else { | |
| sizeMap = { w: sizes[0][0], h: sizes[0][1] }; | |
| } | |
| return sizeMap; | |
| }; | |
| function _isMobile() { | |
| return (/(ios|ipod|ipad|iphone|android)/i.test(global.navigator.userAgent) | |
| ); | |
| } | |
| function _isConnectedTV() { | |
| return (/(smart[-]?tv|hbbtv|appletv|googletv|hdmi|netcast\.tv|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b)/i.test(global.navigator.userAgent) | |
| ); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(38))) | |
| /***/ }), | |
| /***/ 202: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[200]); | |
| pbjsChunk([61],{ | |
| /***/ 203: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(204); | |
| module.exports = __webpack_require__(205); | |
| /***/ }), | |
| /***/ 204: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'jcm'; | |
| var URL = '//media.adfrontiers.com/pq'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['jcarter'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params && bid.params.siteId && bid.bidId); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var BidRequestStr = { | |
| bids: [] | |
| }; | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| var adSizes = ''; | |
| var bid = validBidRequests[i]; | |
| for (var x = 0; x < bid.sizes.length; x++) { | |
| adSizes += utils.parseGPTSingleSizeArray(bid.sizes[x]); | |
| if (x !== bid.sizes.length - 1) { | |
| adSizes += ','; | |
| } | |
| } | |
| BidRequestStr.bids.push({ | |
| 'callbackId': bid.bidId, | |
| 'siteId': bid.params.siteId, | |
| 'adSizes': adSizes | |
| }); | |
| } | |
| var JSONStr = JSON.stringify(BidRequestStr); | |
| var dataStr = 't=hb&ver=1.0&compact=true&bids=' + encodeURIComponent(JSONStr); | |
| return { | |
| method: 'GET', | |
| url: URL, | |
| data: dataStr | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| var bidResponses = []; | |
| serverResponse = serverResponse.body; | |
| // loop through serverResponses | |
| if (serverResponse) { | |
| if (serverResponse.bids) { | |
| var bids = serverResponse.bids; | |
| for (var i = 0; i < bids.length; i++) { | |
| var bid = bids[i]; | |
| var bidResponse = { | |
| requestId: bid.callbackId, | |
| bidderCode: spec.code, | |
| cpm: bid.cpm, | |
| width: bid.width, | |
| height: bid.height, | |
| creativeId: bid.creativeId, | |
| currency: 'USD', | |
| netRevenue: bid.netRevenue, | |
| ttl: bid.ttl, | |
| ad: decodeURIComponent(bid.ad.replace(/\+/g, '%20')) | |
| }; | |
| bidResponses.push(bidResponse); | |
| }; | |
| }; | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: '//media.adfrontiers.com/hb/jcm_usersync.html' | |
| }]; | |
| } | |
| if (syncOptions.image) { | |
| return [{ | |
| type: 'image', | |
| url: '//media.adfrontiers.com/hb/jcm_usersync.png' | |
| }]; | |
| } | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 205: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[203]); | |
| pbjsChunk([60],{ | |
| /***/ 206: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(207); | |
| module.exports = __webpack_require__(208); | |
| /***/ }), | |
| /***/ 207: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var BIDDER_CODE = 'justpremium'; | |
| var ENDPOINT_URL = (0, _utils.getTopWindowLocation)().protocol + '//pre.ads.justpremium.com/v/2.0/t/xhr'; | |
| var pixels = []; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| time: 60000, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.zone); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var c = preparePubCond(validBidRequests); | |
| var dim = getWebsiteDim(); | |
| var payload = { | |
| zone: validBidRequests.map(function (b) { | |
| return parseInt(b.params.zone); | |
| }).filter(function (value, index, self) { | |
| return self.indexOf(value) === index; | |
| }), | |
| hostname: (0, _utils.getTopWindowLocation)().hostname, | |
| protocol: (0, _utils.getTopWindowLocation)().protocol.replace(':', ''), | |
| sw: dim.screenWidth, | |
| sh: dim.screenHeight, | |
| ww: dim.innerWidth, | |
| wh: dim.innerHeight, | |
| c: c, | |
| id: validBidRequests[0].params.zone, | |
| sizes: {} | |
| }; | |
| validBidRequests.forEach(function (b) { | |
| var zone = b.params.zone; | |
| var sizes = payload.sizes; | |
| sizes[zone] = sizes[zone] || []; | |
| sizes[zone].push.apply(sizes[zone], b.sizes); | |
| }); | |
| var payloadString = JSON.stringify(payload); | |
| return { | |
| method: 'POST', | |
| url: ENDPOINT_URL + '?i=' + +new Date(), | |
| data: payloadString, | |
| bids: validBidRequests | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequests) { | |
| var body = serverResponse.body; | |
| var bidResponses = []; | |
| bidRequests.bids.forEach(function (adUnit) { | |
| var bid = findBid(adUnit.params, body.bid); | |
| if (bid) { | |
| var size = adUnit.sizes && adUnit.sizes.length && adUnit.sizes[0] || []; | |
| var bidResponse = { | |
| requestId: adUnit.bidId, | |
| creativeId: bid.id, | |
| width: size[0] || bid.width, | |
| height: size[1] || bid.height, | |
| ad: bid.adm, | |
| cpm: bid.price, | |
| netRevenue: true, | |
| currency: bid.currency || 'USD', | |
| ttl: bid.ttl || spec.time | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| }); | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| pixels.push({ | |
| type: 'iframe', | |
| src: '//us-u.openx.net/w/1.0/pd?plm=10&ph=26e53f82-d199-49df-9eca-7b350c0f9646' | |
| }); | |
| } | |
| return pixels; | |
| } | |
| }; | |
| function findBid(params, bids) { | |
| var tagId = params.zone; | |
| if (bids[tagId]) { | |
| var len = bids[tagId].length; | |
| while (len--) { | |
| if (passCond(params, bids[tagId][len])) { | |
| return bids[tagId].splice(len, 1).pop(); | |
| } | |
| } | |
| } | |
| return false; | |
| } | |
| function passCond(params, bid) { | |
| var format = bid.format; | |
| if (params.allow && params.allow.length) { | |
| return params.allow.indexOf(format) > -1; | |
| } | |
| if (params.exclude && params.exclude.length) { | |
| return params.exclude.indexOf(format) < 0; | |
| } | |
| return true; | |
| } | |
| function preparePubCond(bids) { | |
| var cond = {}; | |
| var count = {}; | |
| bids.forEach(function (bid) { | |
| var params = bid.params; | |
| var zone = params.zone; | |
| 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 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 getWebsiteDim() { | |
| var top = void 0; | |
| try { | |
| top = window.top; | |
| } catch (e) { | |
| top = window; | |
| } | |
| return { | |
| screenWidth: top.screen.width, | |
| screenHeight: top.screen.height, | |
| innerWidth: top.innerWidth, | |
| innerHeight: top.innerHeight | |
| }; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 208: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[206]); | |
| pbjsChunk([59],{ | |
| /***/ 209: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(210); | |
| module.exports = __webpack_require__(211); | |
| /***/ }), | |
| /***/ 210: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'kargo'; | |
| var HOST = 'https://krk.kargo.com'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (!bid || !bid.params) { | |
| return false; | |
| } | |
| return !!bid.params.placementId; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests, bidderRequest) { | |
| var currency = _config.config.getConfig('currency'); | |
| var transformedParams = _extends({}, { | |
| timeout: bidderRequest.timeout, | |
| currency: currency, | |
| cpmGranularity: 1, | |
| cpmRange: { | |
| floor: 0, | |
| ceil: 20 | |
| }, | |
| adSlotIds: utils._map(validBidRequests, function (bid) { | |
| return bid.params.placementId; | |
| }) | |
| }, spec._getAllMetadata()); | |
| var encodedParams = encodeURIComponent(JSON.stringify(transformedParams)); | |
| return _extends({}, bidderRequest, { | |
| method: 'GET', | |
| url: HOST + '/api/v1/bid', | |
| data: 'json=' + encodedParams, | |
| currency: currency | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(response, bidRequest) { | |
| var adUnits = response.body; | |
| var bids = {}; | |
| utils._each(bidRequest.bids, function (bid) { | |
| return bids[bid.params.placementId] = bid; | |
| }); | |
| var bidResponses = []; | |
| for (var adUnitId in adUnits) { | |
| var adUnit = adUnits[adUnitId]; | |
| bidResponses.push({ | |
| requestId: bids[adUnitId].bidId, | |
| cpm: Number(adUnit.cpm), | |
| width: adUnit.width, | |
| height: adUnit.height, | |
| ad: adUnit.adm, | |
| ttl: 300, | |
| creativeId: adUnitId, | |
| netRevenue: true, | |
| currency: bidRequest.currency | |
| }); | |
| } | |
| return bidResponses; | |
| }, | |
| // PRIVATE | |
| _readCookie: function _readCookie(name) { | |
| var nameEquals = name + '='; | |
| var cookies = document.cookie.split(';'); | |
| for (var key in cookies) { | |
| var cookie = cookies[key]; | |
| while (cookie.charAt(0) === ' ') { | |
| cookie = cookie.substring(1, cookie.length); | |
| } | |
| if (cookie.indexOf(nameEquals) === 0) { | |
| return cookie.substring(nameEquals.length, cookie.length); | |
| } | |
| } | |
| return null; | |
| }, | |
| _getCrbIds: function _getCrbIds() { | |
| try { | |
| var crb = JSON.parse(decodeURIComponent(spec._readCookie('krg_crb'))); | |
| var syncIds = {}; | |
| if (crb && crb.v) { | |
| var vParsed = JSON.parse(atob(crb.v)); | |
| if (vParsed && vParsed.syncIds) { | |
| syncIds = vParsed.syncIds; | |
| } | |
| } | |
| return syncIds; | |
| } catch (e) { | |
| return {}; | |
| } | |
| }, | |
| _getUid: function _getUid() { | |
| try { | |
| var uid = JSON.parse(decodeURIComponent(spec._readCookie('krg_uid'))); | |
| var vData = {}; | |
| if (uid && uid.v) { | |
| vData = uid.v; | |
| } | |
| return vData; | |
| } catch (e) { | |
| return {}; | |
| } | |
| }, | |
| _getKruxUserId: function _getKruxUserId() { | |
| return spec._getLocalStorageSafely('kxkar_user'); | |
| }, | |
| _getKruxSegments: function _getKruxSegments() { | |
| return spec._getLocalStorageSafely('kxkar_segs'); | |
| }, | |
| _getKrux: function _getKrux() { | |
| var segmentsStr = spec._getKruxSegments(); | |
| var segments = []; | |
| if (segmentsStr) { | |
| segments = segmentsStr.split(','); | |
| } | |
| return { | |
| userID: spec._getKruxUserId(), | |
| segments: segments | |
| }; | |
| }, | |
| _getLocalStorageSafely: function _getLocalStorageSafely(key) { | |
| try { | |
| return localStorage.getItem(key); | |
| } catch (e) { | |
| return null; | |
| } | |
| }, | |
| _getUserIds: function _getUserIds() { | |
| var uid = spec._getUid(); | |
| var crbIds = spec._getCrbIds(); | |
| return { | |
| kargoID: uid.userId, | |
| clientID: uid.clientId, | |
| crbIDs: crbIds, | |
| optOut: uid.optOut | |
| }; | |
| }, | |
| _getAllMetadata: function _getAllMetadata() { | |
| return { | |
| userIDs: spec._getUserIds(), | |
| krux: spec._getKrux(), | |
| pageURL: window.location.href, | |
| rawCRB: spec._readCookie('krg_crb') | |
| }; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 211: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[209]); | |
| pbjsChunk([58],{ | |
| /***/ 212: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(213); | |
| module.exports = __webpack_require__(214); | |
| /***/ }), | |
| /***/ 213: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 _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 BIDDER_CODE = 'komoona'; | |
| var ENDPOINT = '//bidder.komoona.com/v1/GetSBids'; | |
| var USYNCURL = '//s.komoona.com/sync/usync.html'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. Valid bid request must have placementId and hbid | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.placementId && bid.params.hbid); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var tags = validBidRequests.map(function (bid) { | |
| // map each bid id to bid object to retrieve adUnit code in callback | |
| var tag = { | |
| uuid: bid.bidId, | |
| sizes: bid.sizes, | |
| trid: bid.transactionId, | |
| hbid: bid.params.hbid, | |
| placementid: bid.params.placementId | |
| }; | |
| // add floor price if specified (not mandatory) | |
| if (bid.params.floorPrice) { | |
| tag.floorprice = bid.params.floorPrice; | |
| } | |
| return tag; | |
| }); | |
| // Komoona server config | |
| var time = new Date().getTime(); | |
| var kbConf = { | |
| ts_as: time, | |
| hb_placements: [], | |
| hb_placement_bidids: {}, | |
| hb_floors: {}, | |
| cb: _generateCb(time), | |
| tz: new Date().getTimezoneOffset() | |
| }; | |
| validBidRequests.forEach(function (bid) { | |
| kbConf.hdbdid = kbConf.hdbdid || bid.params.hbid; | |
| kbConf.encode_bid = kbConf.encode_bid || bid.params.encode_bid; | |
| kbConf.hb_placement_bidids[bid.params.placementId] = bid.bidId; | |
| if (bid.params.floorPrice) { | |
| kbConf.hb_floors[bid.params.placementId] = bid.params.floorPrice; | |
| } | |
| kbConf.hb_placements.push(bid.params.placementId); | |
| }); | |
| var payload = {}; | |
| if (!utils.isEmpty(tags)) { | |
| payload = { bids: [].concat(_toConsumableArray(tags)), kbConf: kbConf }; | |
| } | |
| return { | |
| method: 'POST', | |
| url: ENDPOINT, | |
| data: JSON.stringify(payload) | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} response A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(response, request) { | |
| var bidResponses = []; | |
| try { | |
| if (response.body && response.body.bids) { | |
| response.body.bids.forEach(function (bid) { | |
| // The bid ID. Used to tie this bid back to the request. | |
| bid.requestId = bid.uuid; | |
| // The creative payload of the returned bid. | |
| bid.ad = bid.creative; | |
| bidResponses.push(bid); | |
| }); | |
| } | |
| } catch (error) { | |
| utils.logError(error); | |
| } | |
| return bidResponses; | |
| }, | |
| /** | |
| * Register User Sync. | |
| */ | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: USYNCURL | |
| }]; | |
| } | |
| } | |
| }; | |
| /** | |
| * Generated cache baster value to be sent to bid server | |
| * @param {*} time current time to use for creating cb. | |
| */ | |
| function _generateCb(time) { | |
| return Math.floor(time % 65536 + Math.floor(Math.random() * 65536) * 65536); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 214: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[212]); | |
| pbjsChunk([57],{ | |
| /***/ 215: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(216); | |
| module.exports = __webpack_require__(217); | |
| /***/ }), | |
| /***/ 216: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var _bidderFactory = __webpack_require__(1); | |
| var spec = exports.spec = { | |
| code: 'kumma', | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.pubId && bid.params.siteId); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var request = { | |
| id: bidRequests[0].bidderRequestId, | |
| at: 2, | |
| imp: bidRequests.map(function (slot) { | |
| return impression(slot); | |
| }), | |
| site: site(bidRequests), | |
| device: device() | |
| }; | |
| return { | |
| method: 'POST', | |
| url: '//hb.kumma.com/', | |
| data: JSON.stringify(request) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(response, request) { | |
| return bidResponseAvailable(request, response.body); | |
| } | |
| }; | |
| function bidResponseAvailable(bidRequest, bidResponse) { | |
| var idToImpMap = {}; | |
| var idToBidMap = {}; | |
| var ortbRequest = null; | |
| try { | |
| ortbRequest = JSON.parse(bidRequest.data); | |
| } catch (ex) { | |
| (0, _utils.logError)('kumma.parse', 'ERROR', ex); | |
| } | |
| ortbRequest.imp.forEach(function (imp) { | |
| idToImpMap[imp.id] = imp; | |
| }); | |
| if (bidResponse) { | |
| bidResponse.seatbid.forEach(function (seatBid) { | |
| return seatBid.bid.forEach(function (bid) { | |
| idToBidMap[bid.impid] = bid; | |
| }); | |
| }); | |
| } | |
| var bids = []; | |
| Object.keys(idToImpMap).forEach(function (id) { | |
| if (idToBidMap[id]) { | |
| var bid = {}; | |
| bid.requestId = id; | |
| bid.creativeId = idToBidMap[id].adid; | |
| bid.cpm = idToBidMap[id].price; | |
| bid.currency = bidResponse.cur; | |
| bid.ttl = 360; | |
| bid.netRevenue = true; | |
| bid.ad = idToBidMap[id].adm; | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_IMP_ID(%7D|\})/gi, idToBidMap[id].impid); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_AD_ID(%7D|\})/gi, idToBidMap[id].adid); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_PRICE(%7D|\})/gi, idToBidMap[id].price); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_CURRENCY(%7D|\})/gi, bidResponse.cur); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_BID_ID(%7D|\})/gi, bidResponse.bidid); | |
| bid.width = idToImpMap[id].banner.w; | |
| bid.height = idToImpMap[id].banner.h; | |
| bids.push(bid); | |
| } | |
| }); | |
| return bids; | |
| } | |
| function impression(slot) { | |
| return { | |
| id: slot.bidId, | |
| banner: banner(slot), | |
| bidfloor: slot.params.bidFloor || '0.000001', | |
| tagid: slot.params.placementId.toString() | |
| }; | |
| } | |
| function banner(slot) { | |
| var size = (0, _utils.parseSizesInput)(slot.sizes)[0].split('x'); | |
| var width = parseInt(size[0]); | |
| var height = parseInt(size[1]); | |
| return { | |
| w: width, | |
| h: height | |
| }; | |
| } | |
| function site(bidderRequest) { | |
| var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.pubId : '0'; | |
| var siteId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.siteId : '0'; | |
| var appParams = bidderRequest[0].params.app; | |
| if (!appParams) { | |
| return { | |
| publisher: { | |
| id: pubId.toString(), | |
| domain: (0, _utils.getTopWindowLocation)().hostname | |
| }, | |
| id: siteId.toString(), | |
| ref: (0, _utils.getTopWindowReferrer)(), | |
| page: (0, _utils.getTopWindowLocation)().href | |
| }; | |
| } | |
| return null; | |
| } | |
| function device() { | |
| return { | |
| ua: navigator.userAgent, | |
| language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage, | |
| w: window.screen.width || window.innerWidth, | |
| h: window.screen.height || window.innerHeigh | |
| }; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 217: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[215]); | |
| pbjsChunk([56],{ | |
| /***/ 218: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(219); | |
| module.exports = __webpack_require__(220); | |
| /***/ }), | |
| /***/ 219: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _templateObject = _taggedTemplateLiteral(['//ads.lfstmedia.com/gate/', '/', '?adkey=', '&ad_size=', '&__location=', '&__referrer=', '&__wn=', '&__sf=', '&__fif=', '&__if=', '&__stamp=', '&__pp=1&__hb=1&_prebid_json=1&__gz=1&deferred_format=vast_2_0,vast_3_0&__hbver=', ''], ['//ads.lfstmedia.com/gate/', '/', '?adkey=', '&ad_size=', '&__location=', '&__referrer=', '&__wn=', '&__sf=', '&__fif=', '&__if=', '&__stamp=', '&__pp=1&__hb=1&_prebid_json=1&__gz=1&deferred_format=vast_2_0,vast_3_0&__hbver=', '']); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __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 _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } | |
| var BIDDER_CODE = 'lifestreet'; | |
| var ADAPTER_VERSION = 'prebidJS-2.0'; | |
| var urlTemplate = template(_templateObject, 'adapter', 'slot', 'adkey', 'ad_size', 'location', 'referrer', 'wn', 'sf', 'fif', 'if', 'stamp', 'hbver'); | |
| /** | |
| * Creates a bid requests for a given bid. | |
| * | |
| * @param {BidRequest} bid The bid params to use for formatting a request | |
| */ | |
| function formatBidRequest(bid) { | |
| var url = urlTemplate({ | |
| adapter: 'prebid', | |
| slot: bid.params.slot, | |
| adkey: bid.params.adkey, | |
| ad_size: bid.params.ad_size, | |
| location: encodeURIComponent(utils.getTopWindowLocation()), | |
| referrer: encodeURIComponent(utils.getTopWindowReferrer()), | |
| wn: boolToString(/fb_http/i.test(window.name)), | |
| sf: boolToString(window['sfAPI'] || window['$sf']), | |
| fif: boolToString(window['inDapIF'] === true), | |
| 'if': boolToString(window !== window.top), | |
| stamp: new Date().getTime(), | |
| hbver: ADAPTER_VERSION | |
| }); | |
| return { | |
| method: 'GET', | |
| url: url, | |
| bidId: bid.bidId | |
| }; | |
| } | |
| /** | |
| * A helper function to form URL from the template | |
| */ | |
| function template(strings) { | |
| for (var _len = arguments.length, keys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | |
| keys[_key - 1] = arguments[_key]; | |
| } | |
| return function () { | |
| for (var _len2 = arguments.length, values = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | |
| values[_key2] = arguments[_key2]; | |
| } | |
| var dict = values[values.length - 1] || {}; | |
| var result = [strings[0]]; | |
| keys.forEach(function (key, i) { | |
| var value = isInteger(key) ? values[key] : dict[key]; | |
| result.push(value, strings[i + 1]); | |
| }); | |
| return result.join(''); | |
| }; | |
| } | |
| /** | |
| * A helper function for template to generate string from boolean | |
| */ | |
| function boolToString(value) { | |
| return value ? '1' : '0'; | |
| } | |
| /** | |
| * A helper function for template | |
| */ | |
| function isInteger(value) { | |
| return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; | |
| } | |
| /** | |
| * Validates response from Lifestreet AD server | |
| */ | |
| function isResponseValid(response) { | |
| return !/^\s*\{\s*"advertisementAvailable"\s*:\s*false/i.test(response.content) && response.content.indexOf('<VAST version="2.0"></VAST>') === -1 && typeof response.cpm !== 'undefined' && response.status === 1; | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['lsm'], // short code | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO], // Lifestreet supports banner and video media types | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.slot && bid.params.adkey && bid.params.ad_size); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| return validBidRequests.map(function (bid) { | |
| return formatBidRequest(bid); | |
| }); | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {ServerResponse} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| var response = serverResponse.body; | |
| if (!isResponseValid(response)) { | |
| return bidResponses; | |
| } | |
| var bidResponse = { | |
| requestId: bidRequest.bidId, | |
| cpm: response.cpm, | |
| width: response.width, | |
| height: response.height, | |
| creativeId: response.creativeId, | |
| currency: response.currency ? response.currency : 'USD', | |
| netRevenue: response.netRevenue ? response.netRevenue : true, | |
| ttl: response.ttl ? response.ttl : 86400 | |
| }; | |
| if (response.hasOwnProperty('dealId')) { | |
| bidResponse.dealId = response.dealId; | |
| } | |
| if (response.content_type.indexOf('vast') > -1) { | |
| if (typeof response.vastUrl !== 'undefined') { | |
| bidResponse.vastUrl = response.vastUrl; | |
| } else { | |
| bidResponse.vastXml = response.content; | |
| } | |
| bidResponse.mediaType = _mediaTypes.VIDEO; | |
| } else { | |
| bidResponse.ad = response.content; | |
| bidResponse.mediaType = _mediaTypes.BANNER; | |
| } | |
| bidResponses.push(bidResponse); | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 220: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[218]); | |
| pbjsChunk([55],{ | |
| /***/ 221: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(222); | |
| module.exports = __webpack_require__(223); | |
| /***/ }), | |
| /***/ 222: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _bidderFactory = __webpack_require__(1); | |
| function inIframe() { | |
| try { | |
| return window.self !== window.top && !window.mantis_link; | |
| } catch (e) { | |
| return true; | |
| } | |
| } | |
| function isDesktop(ignoreTouch) { | |
| var supportsTouch = !ignoreTouch && ('ontouchstart' in window || navigator.msMaxTouchPoints); | |
| if (inIframe()) { | |
| return !supportsTouch; | |
| } | |
| var width = window.innerWidth || window.document.documentElement.clientWidth || window.document.body.clientWidth; | |
| return !supportsTouch && (!width || width >= (window.mantis_breakpoint || 768)); | |
| } | |
| function storeUuid(uuid) { | |
| if (window.mantis_uuid) { | |
| return false; | |
| } | |
| window.mantis_uuid = uuid; | |
| if (window.localStorage) { | |
| try { | |
| window.localStorage.setItem('mantis:uuid', uuid); | |
| } catch (ex) {} | |
| } | |
| } | |
| function isSendable(val) { | |
| if (val === null || val === undefined) { | |
| return false; | |
| } | |
| if (typeof val === 'string') { | |
| return !(!val || /^\s*$/.test(val)); | |
| } | |
| if (typeof val === 'number') { | |
| return !isNaN(val); | |
| } | |
| return true; | |
| } | |
| function isObject(value) { | |
| return Object.prototype.toString.call(value) === '[object Object]'; | |
| } | |
| function isAmp() { | |
| return _typeof(window.context) === 'object' && (window.context.tagName === 'AMP-AD' || window.context.tagName === 'AMP-EMBED'); | |
| } | |
| function isSecure() { | |
| return document.location.protocol === 'https:'; | |
| } | |
| function isArray(value) { | |
| return Object.prototype.toString.call(value) === '[object Array]'; | |
| } | |
| function jsonToQuery(data, chain, form) { | |
| if (!data) { | |
| return null; | |
| } | |
| var parts = form || []; | |
| for (var key in data) { | |
| var queryKey = key; | |
| if (chain) { | |
| queryKey = chain + '[' + key + ']'; | |
| } | |
| var val = data[key]; | |
| if (isArray(val)) { | |
| for (var index = 0; index < val.length; index++) { | |
| var akey = queryKey + '[' + index + ']'; | |
| var aval = val[index]; | |
| if (isObject(aval)) { | |
| jsonToQuery(aval, akey, parts); | |
| } else if (isSendable(aval)) { | |
| parts.push(akey + '=' + encodeURIComponent(aval)); | |
| } | |
| } | |
| } else if (isObject(val) && val != data) { | |
| jsonToQuery(val, queryKey, parts); | |
| } else if (isSendable(val)) { | |
| parts.push(queryKey + '=' + encodeURIComponent(val)); | |
| } | |
| } | |
| return parts.join('&'); | |
| } | |
| function buildMantisUrl(path, data, domain) { | |
| var params = { | |
| referrer: document.referrer, | |
| tz: new Date().getTimezoneOffset(), | |
| buster: new Date().getTime(), | |
| secure: isSecure() | |
| }; | |
| if (!inIframe() || isAmp()) { | |
| params.mobile = !isAmp() && isDesktop(true) ? 'false' : 'true'; | |
| } | |
| if (window.mantis_uuid) { | |
| params.uuid = window.mantis_uuid; | |
| } else if (window.localStorage) { | |
| var localUuid = window.localStorage.getItem('mantis:uuid'); | |
| if (localUuid) { | |
| params.uuid = localUuid; | |
| } | |
| } | |
| if (!inIframe()) { | |
| try { | |
| params.title = window.top.document.title; | |
| params.referrer = window.top.document.referrer; | |
| params.url = window.top.document.location.href; | |
| } catch (ex) {} | |
| } else { | |
| params.iframe = true; | |
| } | |
| if (isAmp()) { | |
| params.amp = true; | |
| if (!params.url && window.context.canonicalUrl) { | |
| params.url = window.context.canonicalUrl; | |
| } | |
| if (!params.url && window.context.location) { | |
| params.url = window.context.location.href; | |
| } | |
| if (!params.referrer && window.context.referrer) { | |
| params.referrer = window.context.referrer; | |
| } | |
| } | |
| Object.keys(data || {}).forEach(function (key) { | |
| params[key] = data[key]; | |
| }); | |
| var query = jsonToQuery(params); | |
| return (window.mantis_domain === undefined ? domain || 'https://mantodea.mantisadnetwork.com' : window.mantis_domain) + path + '?' + query; | |
| } | |
| var spec = { | |
| code: 'mantis', | |
| supportedMediaTypes: ['banner', 'video', 'native'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.property && (bid.params.code || bid.params.zoneId || bid.params.zone)); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var property = null; | |
| validBidRequests.some(function (bid) { | |
| if (bid.params.property) { | |
| property = bid.params.property; | |
| return true; | |
| } | |
| }); | |
| var query = { | |
| bids: validBidRequests.map(function (bid) { | |
| return { | |
| bidId: bid.bidId, | |
| config: bid.params, | |
| sizes: bid.sizes.map(function (size) { | |
| return { width: size[0], height: size[1] }; | |
| }) | |
| }; | |
| }), | |
| property: property, | |
| version: 2 | |
| }; | |
| return { | |
| method: 'GET', | |
| url: buildMantisUrl('/prebid/display', query) + '&foo', | |
| data: '' | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| storeUuid(serverResponse.uuid); | |
| return serverResponse.body.ads.map(function (ad) { | |
| return { | |
| requestId: ad.bid, | |
| cpm: ad.cpm, | |
| width: ad.width, | |
| height: ad.height, | |
| ad: ad.html, | |
| ttl: 86400, | |
| creativeId: ad.view, | |
| netRevenue: true, | |
| currency: 'USD' | |
| }; | |
| }); | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: buildMantisUrl('/prebid/iframe') | |
| }]; | |
| } | |
| if (syncOptions.pixelEnabled) { | |
| return [{ | |
| type: 'image', | |
| url: buildMantisUrl('/prebid/pixel') | |
| }]; | |
| } | |
| } | |
| }; | |
| exports.spec = spec; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 223: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[221]); | |
| pbjsChunk([54],{ | |
| /***/ 224: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(225); | |
| /***/ }), | |
| /***/ 225: | |
| /***/ (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__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| /**** | |
| * Mars Media Analytics | |
| * Contact: [email protected]†| |
| * 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; | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[224]); | |
| pbjsChunk([53],{ | |
| /***/ 226: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(227); | |
| module.exports = __webpack_require__(228); | |
| /***/ }), | |
| /***/ 227: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| 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 BIDDER_CODE = 'medianet'; | |
| var BID_URL = 'https://prebid.media.net/rtb/prebid'; | |
| pbjs.medianetGlobals = {}; | |
| function siteDetails(site) { | |
| site = site || {}; | |
| return { | |
| domain: site.domain || utils.getTopWindowLocation().host, | |
| page: site.page || utils.getTopWindowUrl(), | |
| ref: site.ref || utils.getTopWindowReferrer() | |
| }; | |
| } | |
| function filterUrlsByType(urls, type) { | |
| return urls.filter(function (url) { | |
| return url.type === type; | |
| }); | |
| } | |
| function transformSizes(sizes) { | |
| if (utils.isArray(sizes) && sizes.length === 2 && !utils.isArray(sizes[0])) { | |
| return [getSize(sizes)]; | |
| } | |
| return sizes.map(function (size) { | |
| return getSize(size); | |
| }); | |
| } | |
| function getSize(size) { | |
| return { | |
| w: parseInt(size[0], 10), | |
| h: parseInt(size[1], 10) | |
| }; | |
| } | |
| function configuredParams(params) { | |
| return { | |
| customer_id: params.cid, | |
| prebid_version: pbjs.version | |
| }; | |
| } | |
| function slotParams(bidRequest) { | |
| // check with Media.net Account manager for bid floor and crid parameters | |
| var params = { | |
| id: bidRequest.bidId, | |
| ext: { | |
| dfp_id: bidRequest.adUnitCode | |
| }, | |
| banner: transformSizes(bidRequest.sizes), | |
| all: bidRequest.params | |
| }; | |
| if (bidRequest.params.crid) { | |
| params.tagid = bidRequest.params.crid.toString(); | |
| } | |
| var bidFloor = parseFloat(bidRequest.params.bidfloor); | |
| if (bidFloor) { | |
| params.bidfloor = bidFloor; | |
| } | |
| return params; | |
| } | |
| function generatePayload(bidRequests) { | |
| return { | |
| site: siteDetails(bidRequests[0].params.site), | |
| ext: configuredParams(bidRequests[0].params), | |
| id: bidRequests[0].auctionId, | |
| imp: bidRequests.map(function (request) { | |
| return slotParams(request); | |
| }), | |
| tmax: _config.config.getConfig('bidderTimeout') | |
| }; | |
| } | |
| function isValidBid(bid) { | |
| return bid.no_bid === false && parseFloat(bid.cpm) > 0.0; | |
| } | |
| function fetchCookieSyncUrls(response) { | |
| if (!utils.isEmpty(response) && response[0].body && response[0].body.ext && utils.isArray(response[0].body.ext.csUrl)) { | |
| return response[0].body.ext.csUrl; | |
| } | |
| return []; | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {object} bid The bid to validate. | |
| * @return boolean True if this is a valid bid (if cid is present), and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (!bid.params) { | |
| utils.logError(BIDDER_CODE + ' : Missing bid parameters'); | |
| return false; | |
| } | |
| if (!bid.params.cid || !utils.isStr(bid.params.cid) || utils.isEmptyStr(bid.params.cid)) { | |
| utils.logError(BIDDER_CODE + ' : cid should be a string'); | |
| return false; | |
| } | |
| _extends(pbjs.medianetGlobals, !pbjs.medianetGlobals.cid && { cid: bid.params.cid }); | |
| return true; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {BidRequest[]} bidRequests A non-empty list of bid requests which should be sent to the Server. | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidRequests) { | |
| var payload = generatePayload(bidRequests); | |
| return { | |
| method: 'POST', | |
| url: BID_URL, | |
| data: JSON.stringify(payload) | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, request) { | |
| var validBids = []; | |
| if (!serverResponse || !serverResponse.body) { | |
| utils.logInfo(BIDDER_CODE + ' : response is empty'); | |
| return validBids; | |
| } | |
| var bids = serverResponse.body.bidList; | |
| if (!utils.isArray(bids) || bids.length === 0) { | |
| utils.logInfo(BIDDER_CODE + ' : no bids'); | |
| return validBids; | |
| } | |
| validBids = bids.filter(function (bid) { | |
| return isValidBid(bid); | |
| }); | |
| return validBids; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| var cookieSyncUrls = fetchCookieSyncUrls(serverResponses); | |
| if (syncOptions.iframeEnabled) { | |
| return filterUrlsByType(cookieSyncUrls, 'iframe'); | |
| } | |
| if (syncOptions.pixelEnabled) { | |
| return filterUrlsByType(cookieSyncUrls, 'image'); | |
| } | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 228: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[226]); | |
| pbjsChunk([52],{ | |
| /***/ 229: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(230); | |
| module.exports = __webpack_require__(231); | |
| /***/ }), | |
| /***/ 230: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var utils = __webpack_require__(0); | |
| var BIDDER_CODE = 'mobfox'; | |
| var BID_REQUEST_BASE_URL = 'https://my.mobfox.com/request.php'; | |
| var CPM_HEADER = 'X-Pricing-CPM'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['mf'], // short code | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return bid.params.s !== null && bid.params.s !== undefined; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| if (validBidRequests.length > 1) { | |
| throw 'invalid number of valid bid requests, expected 1 element'; | |
| } | |
| var bidParams = validBidRequests[0].params; | |
| var bid = validBidRequests[0]; | |
| var params = { | |
| // -------------------- 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 | |
| }; | |
| var payloadString = buildPayloadString(params); | |
| return { | |
| method: 'GET', | |
| url: BID_REQUEST_BASE_URL, | |
| data: payloadString, | |
| requestId: bid.bidId | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| var serverResponseBody = serverResponse.body; | |
| if (!serverResponseBody || serverResponseBody.error) { | |
| var errorMessage = 'in response for ' + BIDDER_CODE + ' adapter'; | |
| if (serverResponseBody && serverResponseBody.error) { | |
| errorMessage += ': ' + serverResponseBody.error; | |
| } | |
| utils.logError(errorMessage); | |
| return bidResponses; | |
| } | |
| try { | |
| var serverResponseHeaders = serverResponse.headers; | |
| var bidRequestData = bidRequest.data.split('&'); | |
| var bidResponse = { | |
| requestId: bidRequest.requestId, | |
| cpm: serverResponseHeaders.get(CPM_HEADER), | |
| width: bidRequestData[5].split('=')[1], | |
| height: bidRequestData[6].split('=')[1], | |
| creativeId: bidRequestData[3].split('=')[1], | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 360, | |
| referrer: serverResponseBody.request.clickurl, | |
| ad: serverResponseBody.request.htmlString | |
| }; | |
| bidResponses.push(bidResponse); | |
| } catch (e) { | |
| throw 'could not build bid response: ' + e; | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| function buildPayloadString(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('&'); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 231: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[229]); | |
| pbjsChunk([51],{ | |
| /***/ 232: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(233); | |
| module.exports = __webpack_require__(234); | |
| /***/ }), | |
| /***/ 233: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = exports.CATEGORY = exports.NQ_NAME = exports.NQ = exports.DATA_PARTNER_PIXEL_ID = exports.ENGINE_BASE_URL = exports.BIDDER_CODE = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __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 _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 BIDDER_CODE = exports.BIDDER_CODE = 'nanointeractive'; | |
| var ENGINE_BASE_URL = exports.ENGINE_BASE_URL = 'https://www.audiencemanager.de/hb'; | |
| var DATA_PARTNER_PIXEL_ID = exports.DATA_PARTNER_PIXEL_ID = 'pid'; | |
| var NQ = exports.NQ = 'nq'; | |
| var NQ_NAME = exports.NQ_NAME = 'name'; | |
| var CATEGORY = exports.CATEGORY = 'category'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.BANNER], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| var pid = bid.params[DATA_PARTNER_PIXEL_ID]; | |
| return !!pid; | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var payload = []; | |
| bidRequests.forEach(function (bid) { | |
| return payload.push(createSingleBidRequest(bid)); | |
| }); | |
| return { | |
| method: 'POST', | |
| url: ENGINE_BASE_URL, | |
| data: JSON.stringify(payload) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| var bids = []; | |
| serverResponse.body.forEach(function (serverBid) { | |
| if (isEngineResponseValid(serverBid)) { | |
| bids.push(createSingleBidResponse(serverBid)); | |
| } | |
| }); | |
| return bids; | |
| } | |
| }; | |
| function createSingleBidRequest(bid) { | |
| var _ref; | |
| return _ref = {}, _defineProperty(_ref, DATA_PARTNER_PIXEL_ID, bid.params[DATA_PARTNER_PIXEL_ID]), _defineProperty(_ref, NQ, [createNqParam(bid), createCategoryParam(bid)]), _defineProperty(_ref, 'sizes', bid.sizes.map(function (value) { | |
| return value[0] + 'x' + value[1]; | |
| })), _defineProperty(_ref, 'bidId', bid.bidId), _defineProperty(_ref, 'cors', utils.getOrigin()), _ref; | |
| } | |
| function createSingleBidResponse(serverBid) { | |
| return { | |
| requestId: serverBid.id, | |
| cpm: serverBid.cpm, | |
| width: serverBid.width, | |
| height: serverBid.height, | |
| ad: serverBid.ad, | |
| ttl: serverBid.ttl, | |
| creativeId: serverBid.creativeId, | |
| netRevenue: serverBid.netRevenue || true, | |
| currency: serverBid.currency | |
| }; | |
| } | |
| function createNqParam(bid) { | |
| return bid.params[NQ_NAME] ? utils.getParameterByName(bid.params[NQ_NAME]) : bid.params[NQ] || null; | |
| } | |
| function createCategoryParam(bid) { | |
| return bid.params[CATEGORY] || null; | |
| } | |
| function isEngineResponseValid(response) { | |
| return !!response.cpm && !!response.ad; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 234: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[232]); | |
| pbjsChunk([50],{ | |
| /***/ 235: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(236); | |
| module.exports = __webpack_require__(237); | |
| /***/ }), | |
| /***/ 236: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _find = __webpack_require__(10); | |
| var _find2 = _interopRequireDefault(_find); | |
| 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 ADMIXER_ENDPOINT = 'https://adn.admixer.co.kr:10443/prebid'; | |
| var DEFAULT_BID_TTL = 360; | |
| var DEFAULT_CURRENCY = 'USD'; | |
| var DEFAULT_REVENUE = false; | |
| var spec = exports.spec = { | |
| code: 'nasmediaAdmixer', | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.ax_key); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| return validBidRequests.map(function (bid) { | |
| var adSize = getSize(bid.sizes); | |
| return { | |
| method: 'GET', | |
| url: ADMIXER_ENDPOINT, | |
| data: { | |
| ax_key: utils.getBidIdParameter('ax_key', bid.params), | |
| req_id: bid.bidId, | |
| width: adSize.width, | |
| height: adSize.height, | |
| referrer: utils.getTopWindowUrl(), | |
| os: getOsType() | |
| } | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var serverBody = serverResponse.body; | |
| var bidResponses = []; | |
| if (serverBody && serverBody.error_code === 0 && serverBody.body && serverBody.body.length > 0) { | |
| var bidData = serverBody.body[0]; | |
| var bidResponse = { | |
| ad: bidData.ad, | |
| requestId: serverBody.req_id, | |
| creativeId: bidData.ad_id, | |
| cpm: bidData.cpm, | |
| width: bidData.width, | |
| height: bidData.height, | |
| currency: bidData.currency ? bidData.currency : DEFAULT_CURRENCY, | |
| netRevenue: DEFAULT_REVENUE, | |
| ttl: DEFAULT_BID_TTL | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| function getOsType() { | |
| var ua = navigator.userAgent.toLowerCase(); | |
| var os = ['android', 'ios', 'mac', 'linux', 'window']; | |
| var regexp_os = [/android/i, /iphone|ipad/i, /mac/i, /linux/i, /window/i]; | |
| return (0, _find2['default'])(os, function (tos, idx) { | |
| if (ua.match(regexp_os[idx])) { | |
| return os[idx]; | |
| } | |
| }) || 'etc'; | |
| } | |
| function getSize(sizes) { | |
| var parsedSizes = utils.parseSizesInput(sizes); | |
| var _ref = parsedSizes.length ? parsedSizes[0].split('x') : [], | |
| _ref2 = _slicedToArray(_ref, 2), | |
| width = _ref2[0], | |
| height = _ref2[1]; | |
| return { | |
| width: parseInt(width, 10), | |
| height: parseInt(height, 10) | |
| }; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 237: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[235]); | |
| pbjsChunk([49],{ | |
| /***/ 238: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(239); | |
| module.exports = __webpack_require__(240); | |
| /***/ }), | |
| /***/ 239: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| 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 BIDDER_CODE = 'oneplanetonly'; | |
| var EDNPOINT = '//show.oneplanetonly.com/prebid'; | |
| function createEndpoint(siteId) { | |
| return EDNPOINT + '?siteId=' + siteId; | |
| } | |
| function isBidRequestValid(bid) { | |
| return !!(bid.params.siteId && bid.params.adUnitId); | |
| } | |
| function buildRequests(bidReqs) { | |
| var firstBid = bidReqs[0] || {}; | |
| var siteId = utils.getBidIdParameter('siteId', firstBid.params); | |
| var adUnits = bidReqs.map(function (bid) { | |
| return { | |
| id: utils.getBidIdParameter('adUnitId', bid.params), | |
| bidId: bid.bidId, | |
| sizes: utils.parseSizesInput(bid.sizes) | |
| }; | |
| }); | |
| var bidRequest = { | |
| id: firstBid.auctionId, | |
| ver: 1, | |
| prebidVer: '1.7.0-pre', | |
| transactionId: firstBid.transactionId, | |
| currency: _config.config.getConfig('currency.adServerCurrency'), | |
| timeout: _config.config.getConfig('bidderTimeout'), | |
| siteId: siteId, | |
| domain: utils.getTopWindowLocation().hostname, | |
| page: _config.config.getConfig('pageUrl') || utils.getTopWindowUrl(), | |
| referrer: utils.getTopWindowReferrer(), | |
| adUnits: adUnits | |
| }; | |
| return { | |
| method: 'POST', | |
| url: createEndpoint(siteId), | |
| data: bidRequest, | |
| options: { contentType: 'application/json', withCredentials: true } | |
| }; | |
| } | |
| function interpretResponse(serverResponse, request) { | |
| if (!serverResponse.body.bids) { | |
| return []; | |
| } | |
| return serverResponse.body.bids.map(function (bid) { | |
| return { | |
| requestId: bid.requestId, | |
| cpm: bid.cpm, | |
| width: bid.width, | |
| height: bid.height, | |
| creativeId: bid.creativeId, | |
| currency: bid.currency, | |
| netRevenue: true, | |
| ad: bid.ad, | |
| ttl: bid.ttl | |
| }; | |
| }); | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['opo'], // short code | |
| isBidRequestValid: isBidRequestValid, | |
| buildRequests: buildRequests, | |
| interpretResponse: interpretResponse | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 240: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[238]); | |
| pbjsChunk([48],{ | |
| /***/ 241: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(242); | |
| module.exports = __webpack_require__(243); | |
| /***/ }), | |
| /***/ 242: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _config = __webpack_require__(2); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _userSync = __webpack_require__(13); | |
| var _mediaTypes = __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; } } | |
| var SUPPORTED_AD_TYPES = [_mediaTypes.BANNER, _mediaTypes.VIDEO]; | |
| var BIDDER_CODE = 'openx'; | |
| var BIDDER_CONFIG = 'hb_pb'; | |
| var BIDDER_VERSION = '2.0.0'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: SUPPORTED_AD_TYPES, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (bid.mediaType === _mediaTypes.VIDEO) { | |
| if (_typeof(bid.params.video) !== 'object' || !bid.params.video.url) { | |
| return false; | |
| } | |
| } | |
| return !!(bid.params.unit && bid.params.delDomain); | |
| }, | |
| buildRequests: function buildRequests(bids) { | |
| var isIfr = utils.inIframe(); | |
| var currentURL = window.parent !== window ? document.referrer : window.location.href; | |
| if (bids.length === 0) { | |
| return; | |
| } | |
| var requests = []; | |
| var bannerRequests = []; | |
| var videoRequests = []; | |
| var _bids$reduce = bids.reduce(function (acc, curBid) { | |
| // Fallback to banner ads if nothing specified | |
| if (!curBid.mediaTypes || utils.isEmpty(curBid.mediaTypes)) { | |
| if (curBid.mediaType && curBid.mediaType == _mediaTypes.VIDEO) { | |
| acc.videoBids.push(curBid); | |
| } else { | |
| acc.bannerBids.push(curBid); | |
| } | |
| } else if (curBid.mediaTypes.video) { | |
| acc.videoBids.push(curBid); | |
| } else if (curBid.mediaTypes.banner) { | |
| acc.bannerBids.push(curBid); | |
| } | |
| return acc; | |
| }, { bannerBids: [], videoBids: [] }), | |
| bannerBids = _bids$reduce.bannerBids, | |
| videoBids = _bids$reduce.videoBids; | |
| // build banner requests | |
| if (bannerBids.length !== 0) { | |
| var delDomain = bannerBids[0].params.delDomain; | |
| var configuredBc = bannerBids[0].params.bc; | |
| var bc = configuredBc || BIDDER_CONFIG + '_' + BIDDER_VERSION; | |
| bannerRequests = [buildOXRequest(bannerBids, { | |
| ju: currentURL, | |
| jr: currentURL, | |
| ch: document.charSet || document.characterSet, | |
| res: screen.width + 'x' + screen.height + 'x' + screen.colorDepth, | |
| ifr: isIfr, | |
| tz: new Date().getTimezoneOffset(), | |
| tws: getViewportDimensions(isIfr), | |
| ef: 'bt%2Cdb', | |
| be: 1, | |
| bc: bc, | |
| nocache: new Date().getTime() | |
| }, delDomain)]; | |
| } | |
| // build video requests | |
| if (videoBids.length !== 0) { | |
| videoRequests = buildOXVideoRequest(videoBids); | |
| } | |
| requests = bannerRequests.concat(videoRequests); | |
| return requests; | |
| }, | |
| interpretResponse: function interpretResponse(_ref, bidRequest) { | |
| var oxResponseObj = _ref.body; | |
| var bidResponses = []; | |
| var mediaType = _mediaTypes.BANNER; | |
| if (bidRequest && bidRequest.payload) { | |
| if (bidRequest.payload.bids) { | |
| mediaType = bidRequest.payload.bids[0].mediaType; | |
| } else if (bidRequest.payload.bid) { | |
| mediaType = bidRequest.payload.bid.mediaType; | |
| } | |
| } | |
| if (mediaType === _mediaTypes.VIDEO) { | |
| if (oxResponseObj && oxResponseObj.pixels) { | |
| _userSync.userSync.registerSync('iframe', 'openx', oxResponseObj.pixels); | |
| } | |
| bidResponses = createVideoBidResponses(oxResponseObj, bidRequest.payload); | |
| return bidResponses; | |
| } | |
| var adUnits = oxResponseObj.ads.ad; | |
| if (oxResponseObj.ads && oxResponseObj.ads.pixels) { | |
| _userSync.userSync.registerSync('iframe', BIDDER_CODE, oxResponseObj.ads.pixels); | |
| } | |
| if (!adUnits) { | |
| adUnits = []; | |
| } | |
| bidResponses = createBidResponses(adUnits, bidRequest.payload); | |
| return bidResponses; | |
| } | |
| }; | |
| function createBidResponses(adUnits, _ref2) { | |
| var bids = _ref2.bids, | |
| startTime = _ref2.startTime; | |
| var bidResponses = []; | |
| var shouldSendBoPixel = bids[0].params.sendBoPixel; | |
| if (shouldSendBoPixel === undefined) { | |
| // Not specified, default to turned on | |
| shouldSendBoPixel = true; | |
| } | |
| for (var i = 0; i < adUnits.length; i++) { | |
| var adUnit = adUnits[i]; | |
| var bidResponse = {}; | |
| if (adUnits.length == bids.length) { | |
| // request and response length match, directly assign the request id based on positioning | |
| bidResponse.requestId = bids[i].bidId; | |
| } else { | |
| for (var j = i; j < bids.length; j++) { | |
| var bid = bids[j]; | |
| if (String(bid.params.unit) === String(adUnit.adunitid) && adUnitHasValidSizeFromBid(adUnit, bid) && !bid.matched) { | |
| // ad unit and size match, this is the correct bid response to bid | |
| bidResponse.requestId = bid.bidId; | |
| bid.matched = true; | |
| break; | |
| } | |
| } | |
| } | |
| if (adUnit.pub_rev) { | |
| bidResponse.cpm = Number(adUnit.pub_rev) / 1000; | |
| } else { | |
| // No fill, do not add the bidresponse | |
| continue; | |
| } | |
| var creative = adUnit.creative[0]; | |
| if (creative) { | |
| bidResponse.width = creative.width; | |
| bidResponse.height = creative.height; | |
| } | |
| bidResponse.creativeId = creative.id; | |
| bidResponse.ad = adUnit.html; | |
| if (adUnit.deal_id) { | |
| bidResponse.dealId = adUnit.deal_id; | |
| } | |
| // default 5 mins | |
| bidResponse.ttl = 300; | |
| // true is net, false is gross | |
| bidResponse.netRevenue = true; | |
| bidResponse.currency = adUnit.currency; | |
| // additional fields to add | |
| if (adUnit.tbd) { | |
| bidResponse.tbd = adUnit.tbd; | |
| } | |
| bidResponse.ts = adUnit.ts; | |
| var bt = _config.config.getConfig('bidderTimeout'); | |
| if (window.PREBID_TIMEOUT) { | |
| bt = Math.min(window.PREBID_TIMEOUT, bt); | |
| } | |
| var beaconParams = { | |
| bd: +new Date() - startTime, | |
| br: '0', // may be 0, t, or p | |
| bt: bt, | |
| bs: window.location.hostname | |
| }; | |
| beaconParams.br = beaconParams.bt < beaconParams.bd ? 't' : 'p'; | |
| beaconParams.bp = adUnit.pub_rev; | |
| beaconParams.ts = adUnit.ts; | |
| var boUrl = void 0; | |
| if (shouldSendBoPixel) { | |
| boUrl = getBoUrl(adUnit.creative[0], beaconParams); | |
| } | |
| if (boUrl) { | |
| _userSync.userSync.registerSync('image', BIDDER_CODE, boUrl); | |
| } | |
| bidResponses.push(bidResponse); | |
| } | |
| return bidResponses; | |
| } | |
| function getBoUrl(creative, params) { | |
| var recordPixel = creative.tracking.impression; | |
| var boBase = recordPixel.match(/([^?]+\/)ri\?/); | |
| if (boBase) { | |
| return boBase[1] + 'bo?' + buildQueryStringFromParams(params); | |
| } | |
| } | |
| function buildQueryStringFromParams(params) { | |
| for (var key in params) { | |
| if (params.hasOwnProperty(key)) { | |
| if (!params[key]) { | |
| delete params[key]; | |
| } | |
| } | |
| } | |
| return utils._map(Object.keys(params), function (key) { | |
| return key + '=' + params[key]; | |
| }).join('&'); | |
| } | |
| function adUnitHasValidSizeFromBid(adUnit, bid) { | |
| var sizes = utils.parseSizesInput(bid.sizes); | |
| if (!sizes) { | |
| return false; | |
| } | |
| var found = false; | |
| var creative = adUnit.creative && adUnit.creative[0]; | |
| var creative_size = String(creative.width) + 'x' + String(creative.height); | |
| if (utils.isArray(sizes)) { | |
| for (var i = 0; i < sizes.length; i++) { | |
| var size = sizes[i]; | |
| if (String(size) === String(creative_size)) { | |
| found = true; | |
| break; | |
| } | |
| } | |
| } | |
| return found; | |
| } | |
| function getViewportDimensions(isIfr) { | |
| 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 { | |
| tWin = window.top; | |
| tDoc = window.top.document; | |
| } catch (e) { | |
| return; | |
| } | |
| docEl = tDoc.documentElement; | |
| body = tDoc.body; | |
| width = tWin.innerWidth || docEl.clientWidth || body.clientWidth; | |
| height = tWin.innerHeight || docEl.clientHeight || body.clientHeight; | |
| } else { | |
| docEl = tDoc.documentElement; | |
| width = tWin.innerWidth || docEl.clientWidth; | |
| height = tWin.innerHeight || docEl.clientHeight; | |
| } | |
| return width + 'x' + height; | |
| } | |
| function formatCustomParms(customKey, customParams) { | |
| var value = customParams[customKey]; | |
| if (utils.isArray(value)) { | |
| // if value is an array, join them with commas first | |
| value = value.join(','); | |
| } | |
| // return customKey=customValue format, escaping + to . and / to _ | |
| return (customKey.toLowerCase() + '=' + value.toLowerCase()).replace('+', '.').replace('/', '_'); | |
| } | |
| function buildOXRequest(bids, oxParams, delDomain) { | |
| if (!utils.isArray(bids)) { | |
| return; | |
| } | |
| oxParams.auid = utils._map(bids, function (bid) { | |
| return bid.params.unit; | |
| }).join(','); | |
| oxParams.dddid = utils._map(bids, function (bid) { | |
| return bid.transactionId; | |
| }).join(','); | |
| oxParams.aus = utils._map(bids, function (bid) { | |
| return utils.parseSizesInput(bid.sizes).join(','); | |
| }).join('|'); | |
| var customParamsForAllBids = []; | |
| var hasCustomParam = false; | |
| bids.forEach(function (bid) { | |
| if (bid.params.customParams) { | |
| var customParamsForBid = utils._map(Object.keys(bid.params.customParams), function (customKey) { | |
| return formatCustomParms(customKey, bid.params.customParams); | |
| }); | |
| var formattedCustomParams = window.btoa(customParamsForBid.join('&')); | |
| hasCustomParam = true; | |
| customParamsForAllBids.push(formattedCustomParams); | |
| } else { | |
| customParamsForAllBids.push(''); | |
| } | |
| }); | |
| if (hasCustomParam) { | |
| oxParams.tps = customParamsForAllBids.join(','); | |
| } | |
| var customFloorsForAllBids = []; | |
| var hasCustomFloor = false; | |
| bids.forEach(function (bid) { | |
| if (bid.params.customFloor) { | |
| customFloorsForAllBids.push(bid.params.customFloor * 1000); | |
| hasCustomFloor = true; | |
| } else { | |
| customFloorsForAllBids.push(0); | |
| } | |
| }); | |
| if (hasCustomFloor) { | |
| oxParams.aumfs = customFloorsForAllBids.join(','); | |
| } | |
| var url = '//' + delDomain + '/w/1.0/arj'; | |
| return { | |
| method: 'GET', | |
| url: url, | |
| data: oxParams, | |
| payload: { 'bids': bids, 'startTime': new Date() } | |
| }; | |
| } | |
| function buildOXVideoRequest(bids) { | |
| return bids.map(function (bid) { | |
| var url = 'http://' + bid.params.delDomain + '/v/1.0/avjp'; | |
| var oxVideoParams = generateVideoParameters(bid); | |
| return { | |
| method: 'GET', | |
| url: url, | |
| data: oxVideoParams, | |
| payload: { 'bid': bid, 'startTime': new Date() } | |
| }; | |
| }); | |
| } | |
| function generateVideoParameters(bid) { | |
| var oxVideo = bid.params.video; | |
| var oxVideoParams = { auid: bid.params.unit }; | |
| Object.keys(oxVideo).forEach(function (key) { | |
| if (key === 'openrtb') { | |
| oxVideoParams[key] = JSON.stringify(oxVideo[key]); | |
| } else { | |
| oxVideoParams[key] = oxVideo[key]; | |
| } | |
| }); | |
| oxVideoParams['be'] = 'true'; | |
| return oxVideoParams; | |
| } | |
| function createVideoBidResponses(response, _ref3) { | |
| var bid = _ref3.bid, | |
| startTime = _ref3.startTime; | |
| var bidResponses = []; | |
| if (response !== undefined && response.vastUrl !== '' && response.pub_rev !== '') { | |
| var bidResponse = {}; | |
| bidResponse.requestId = bid.bidId; | |
| bidResponse.bidderCode = BIDDER_CODE; | |
| // default 5 mins | |
| bidResponse.ttl = 300; | |
| // true is net, false is gross | |
| bidResponse.netRevenue = true; | |
| bidResponse.currency = response.currency; | |
| bidResponse.cpm = Number(response.pub_rev) / 1000; | |
| bidResponse.width = response.width; | |
| bidResponse.height = response.height; | |
| bidResponse.creativeId = response.adid; | |
| bidResponse.vastUrl = response.vastUrl; | |
| bidResponse.mediaType = _mediaTypes.VIDEO; | |
| bidResponses.push(bidResponse); | |
| } | |
| return bidResponses; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 243: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[241]); | |
| pbjsChunk([47],{ | |
| /***/ 244: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(245); | |
| module.exports = __webpack_require__(246); | |
| /***/ }), | |
| /***/ 245: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = exports.ENDPOINT = undefined; | |
| 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 utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 ENDPOINT = exports.ENDPOINT = '//mg-bid.optimatic.com/adrequest/'; | |
| var spec = exports.spec = { | |
| version: '1.0.4', | |
| code: 'optimatic', | |
| supportedMediaTypes: ['video'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.placement && bid.params.bidfloor); | |
| }, | |
| buildRequests: function buildRequests(bids) { | |
| return bids.map(function (bid) { | |
| return { | |
| method: 'POST', | |
| url: ENDPOINT + bid.params.placement, | |
| data: getData(bid), | |
| options: { contentType: 'application/json' }, | |
| bidRequest: bid | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(response, _ref) { | |
| var bidRequest = _ref.bidRequest; | |
| var bid = void 0; | |
| var size = void 0; | |
| var bidResponse = void 0; | |
| try { | |
| response = response.body; | |
| bid = response.seatbid[0].bid[0]; | |
| } catch (e) { | |
| response = null; | |
| } | |
| if (!response || !bid || !bid.adm && !bid.nurl || !bid.price) { | |
| utils.logWarn('No valid bids from ' + spec.code + ' bidder'); | |
| return []; | |
| } | |
| size = getSize(bidRequest.sizes); | |
| bidResponse = { | |
| requestId: bidRequest.bidId, | |
| bidderCode: spec.code, | |
| cpm: bid.price, | |
| creativeId: bid.id, | |
| width: size.width, | |
| height: size.height, | |
| mediaType: 'video', | |
| currency: response.cur, | |
| ttl: 300, | |
| netRevenue: true | |
| }; | |
| if (bid.nurl) { | |
| bidResponse.vastUrl = bid.nurl; | |
| } else if (bid.adm) { | |
| bidResponse.vastXml = bid.adm; | |
| } | |
| return bidResponse; | |
| } | |
| }; | |
| function getSize(sizes) { | |
| var parsedSizes = utils.parseSizesInput(sizes); | |
| var _ref2 = parsedSizes.length ? parsedSizes[0].split('x') : [], | |
| _ref3 = _slicedToArray(_ref2, 2), | |
| width = _ref3[0], | |
| height = _ref3[1]; | |
| return { | |
| width: parseInt(width, 10) || undefined, | |
| height: parseInt(height, 10) || undefined | |
| }; | |
| } | |
| function getData(bid) { | |
| var size = getSize(bid.sizes); | |
| var loc = utils.getTopWindowLocation(); | |
| var global = window.top ? window.top : window; | |
| return { | |
| id: utils.generateUUID(), | |
| imp: [{ | |
| id: '1', | |
| bidfloor: bid.params.bidfloor, | |
| video: { | |
| mimes: ['video/mp4', 'video/ogg', 'video/webm', 'video/x-flv', 'application/javascript', 'application/x-shockwave-flash'], | |
| w: size.width, | |
| h: size.height | |
| } | |
| }], | |
| site: { | |
| id: '1', | |
| domain: loc.host, | |
| page: loc.href, | |
| ref: utils.getTopWindowReferrer(), | |
| publisher: { | |
| id: '1' | |
| } | |
| }, | |
| device: { | |
| ua: global.navigator.userAgent, | |
| ip: '127.0.0.1', | |
| devicetype: 1 | |
| } | |
| }; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 246: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[244]); | |
| pbjsChunk([46],{ | |
| /***/ 247: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(248); | |
| module.exports = __webpack_require__(249); | |
| /***/ }), | |
| /***/ 248: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var BIDDER_CODE = 'optimera'; | |
| var SCORES_BASE_URL = 'https://s3.amazonaws.com/elasticbeanstalk-us-east-1-397719490216/json/client/'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {bidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bidRequest) { | |
| if (typeof bidRequest.params !== 'undefined' && typeof bidRequest.params.clientID !== 'undefined') { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * We call the existing scores data file for ad slot placement scores. | |
| * These scores will be added to the dealId to be pushed to DFP. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var optimeraHost = window.location.host; | |
| var optimeraPathName = window.location.pathname; | |
| var timestamp = Math.round(new Date().getTime() / 1000); | |
| if (typeof validBidRequests[0].params.clientID !== 'undefined') { | |
| var clientID = validBidRequests[0].params.clientID; | |
| var scoresURL = SCORES_BASE_URL + clientID + '/' + optimeraHost + optimeraPathName + '.js'; | |
| return { | |
| method: 'GET', | |
| url: scoresURL, | |
| payload: validBidRequests, | |
| data: { 't': timestamp } | |
| }; | |
| } | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * Some required bid params are not needed for this so default | |
| * values are used. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var validBids = bidRequest.payload; | |
| var bidResponses = []; | |
| var dealId = ''; | |
| if (typeof serverResponse.body !== 'undefined') { | |
| var scores = serverResponse.body; | |
| for (var i = 0; i < validBids.length; i++) { | |
| if (typeof validBids[i].params.clientID !== 'undefined') { | |
| if (validBids[i].adUnitCode in scores) { | |
| dealId = scores[validBids[i].adUnitCode]; | |
| } | |
| var bidResponse = { | |
| requestId: validBids[i].bidId, | |
| ad: '<div></div>', | |
| cpm: 0.01, | |
| width: 0, | |
| height: 0, | |
| dealId: dealId, | |
| ttl: 300, | |
| creativeId: '1', | |
| netRevenue: '0', | |
| currency: 'USD' | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| } | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 249: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[247]); | |
| pbjsChunk([45],{ | |
| /***/ 250: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(251); | |
| module.exports = __webpack_require__(252); | |
| /***/ }), | |
| /***/ 251: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| 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 BIDDER_CODE = 'orbitsoft'; | |
| var styleParamsMap = { | |
| 'title.family': 'f1', // headerFont | |
| 'title.size': 'fs1', // headerFontSize | |
| 'title.weight': 'w1', // headerWeight | |
| 'title.style': 's1', // headerStyle | |
| 'title.color': 'c3', // headerColor | |
| 'description.family': 'f2', // descriptionFont | |
| 'description.size': 'fs2', // descriptionFontSize | |
| 'description.weight': 'w2', // descriptionWeight | |
| 'description.style': 's2', // descriptionStyle | |
| 'description.color': 'c4', // descriptionColor | |
| 'url.family': 'f3', // urlFont | |
| 'url.size': 'fs3', // urlFontSize | |
| 'url.weight': 'w3', // urlWeight | |
| 'url.style': 's3', // urlStyle | |
| 'url.color': 'c5', // urlColor | |
| 'colors.background': 'c2', // borderColor | |
| 'colors.border': 'c1', // borderColor | |
| 'colors.link': 'c6' // lnkColor | |
| }; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['oas', '152media'], // short code and customer aliases | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| switch (true) { | |
| case !('params' in bid): | |
| utils.logError(bid.bidder + ': No required params'); | |
| return false; | |
| case !bid.params.placementId: | |
| utils.logError(bid.bidder + ': No required param placementId'); | |
| return false; | |
| case !bid.params.requestUrl: | |
| utils.logError(bid.bidder + ': No required param requestUrl'); | |
| return false; | |
| } | |
| return true; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var bidRequest = void 0; | |
| var serverRequests = []; | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| bidRequest = validBidRequests[i]; | |
| var bidRequestParams = bidRequest.params; | |
| var callbackId = utils.getUniqueIdentifierStr(); | |
| var placementId = utils.getBidIdParameter('placementId', bidRequestParams); | |
| var requestUrl = utils.getBidIdParameter('requestUrl', bidRequestParams); | |
| var referrer = utils.getBidIdParameter('ref', bidRequestParams); | |
| var location = utils.getBidIdParameter('loc', bidRequestParams); | |
| // Append location & referrer | |
| if (location === '') { | |
| location = utils.getTopWindowUrl(); | |
| } | |
| if (referrer === '') { | |
| referrer = utils.getTopWindowReferrer(); | |
| } | |
| // Styles params | |
| var stylesParams = utils.getBidIdParameter('style', bidRequestParams); | |
| var stylesParamsArray = {}; | |
| for (var currentValue in stylesParams) { | |
| if (stylesParams.hasOwnProperty(currentValue)) { | |
| var currentStyle = stylesParams[currentValue]; | |
| for (var field in currentStyle) { | |
| if (currentStyle.hasOwnProperty(field)) { | |
| var styleField = styleParamsMap[currentValue + '.' + field]; | |
| if (typeof styleField !== 'undefined') { | |
| stylesParamsArray[styleField] = currentStyle[field]; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| // Custom params | |
| var customParams = utils.getBidIdParameter('customParams', bidRequestParams); | |
| var customParamsArray = {}; | |
| for (var customField in customParams) { | |
| if (customParams.hasOwnProperty(customField)) { | |
| customParamsArray['c.' + customField] = customParams[customField]; | |
| } | |
| } | |
| // Sizes params (not supports by server, for future features) | |
| var sizesParams = bidRequest.sizes; | |
| var parsedSizes = utils.parseSizesInput(sizesParams); | |
| serverRequests.push({ | |
| method: 'GET', | |
| url: requestUrl, | |
| data: _extends({ | |
| 'scid': placementId, | |
| 'callback_uid': callbackId, | |
| 'loc': location, | |
| 'ref': referrer, | |
| 'size': parsedSizes | |
| }, stylesParamsArray, customParamsArray), | |
| options: { withCredentials: false }, | |
| bidRequest: bidRequest | |
| }); | |
| } | |
| return serverRequests; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, request) { | |
| var bidResponses = []; | |
| if (!serverResponse || serverResponse.error) { | |
| utils.logError(BIDDER_CODE + ': Server response error'); | |
| return bidResponses; | |
| } | |
| var serverBody = serverResponse.body; | |
| if (!serverBody) { | |
| utils.logError(BIDDER_CODE + ': Empty bid response'); | |
| return bidResponses; | |
| } | |
| var CPM = serverBody.cpm; | |
| var WIDTH = serverBody.width; | |
| var HEIGHT = serverBody.height; | |
| var CREATIVE = serverBody.content_url; | |
| var CALLBACK_UID = serverBody.callback_uid; | |
| var TIME_TO_LIVE = _config.config.getConfig('_bidderTimeout'); | |
| var REFERER = utils.getTopWindowUrl(); | |
| var bidRequest = request.bidRequest; | |
| if (CPM > 0 && WIDTH > 0 && HEIGHT > 0) { | |
| var bidResponse = { | |
| requestId: bidRequest.bidId, | |
| cpm: CPM, | |
| width: WIDTH, | |
| height: HEIGHT, | |
| creativeId: CALLBACK_UID, | |
| ttl: TIME_TO_LIVE, | |
| referrer: REFERER, | |
| currency: 'USD', | |
| netRevenue: true, | |
| adUrl: CREATIVE | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 252: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[250]); | |
| pbjsChunk([44],{ | |
| /***/ 253: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(254); | |
| module.exports = __webpack_require__(255); | |
| /***/ }), | |
| /***/ 254: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _utils = __webpack_require__(0); | |
| var BIDDER_CODE = 'peak226'; | |
| var URL = '//a.ad216.com/header_bid'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.BANNER], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| var params = bid.params; | |
| return !!params.uid; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var bidsMap = validBidRequests.reduce(function (res, bid) { | |
| var uid = bid.params.uid; | |
| res[uid] = res[uid] || []; | |
| res[uid].push(bid); | |
| return res; | |
| }, {}); | |
| return { | |
| method: 'GET', | |
| url: URL + toQueryString({ | |
| u: (0, _utils.getTopWindowUrl)(), | |
| auids: Object.keys(bidsMap).join(',') | |
| }), | |
| bidsMap: bidsMap | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, _ref) { | |
| var bidsMap = _ref.bidsMap; | |
| var response = serverResponse.body; | |
| var bidResponses = []; | |
| if (!response) { | |
| (0, _utils.logWarn)('No response from ' + spec.code + ' bidder'); | |
| return bidResponses; | |
| } | |
| if (!response.seatbid || !response.seatbid.length) { | |
| (0, _utils.logWarn)('No seatbid in response from ' + spec.code + ' bidder'); | |
| return bidResponses; | |
| } | |
| response.seatbid.forEach(function (seatbid, i) { | |
| if (!seatbid.bid || !seatbid.bid.length) { | |
| (0, _utils.logWarn)('No bid in seatbid[' + i + '] response from ' + spec.code + ' bidder'); | |
| return; | |
| } | |
| seatbid.bid.forEach(function (responseBid) { | |
| var requestBids = bidsMap[responseBid.auid]; | |
| requestBids.forEach(function (requestBid) { | |
| bidResponses.push({ | |
| requestId: requestBid.bidId, | |
| bidderCode: spec.code, | |
| width: responseBid.w, | |
| height: responseBid.h, | |
| mediaType: _mediaTypes.BANNER, | |
| creativeId: responseBid.auid, | |
| ad: responseBid.adm, | |
| cpm: responseBid.price, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 360 | |
| }); | |
| }); | |
| }); | |
| }); | |
| return bidResponses; | |
| } | |
| }; | |
| function toQueryString(obj) { | |
| return Object.keys(obj).reduce(function (str, key, i) { | |
| return typeof obj[key] === 'undefined' || obj[key] === '' ? str : '' + str + (str ? '&' : '?') + key + '=' + encodeURIComponent(obj[key]); | |
| }, ''); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 255: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[253]); | |
| pbjsChunk([43],{ | |
| /***/ 256: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(257); | |
| module.exports = __webpack_require__(258); | |
| /***/ }), | |
| /***/ 257: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var _bidderFactory = __webpack_require__(1); | |
| var NATIVE_DEFAULTS = { | |
| TITLE_LEN: 100, | |
| DESCR_LEN: 200, | |
| SPONSORED_BY_LEN: 50, | |
| IMG_MIN: 150, | |
| ICON_MIN: 50 | |
| }; | |
| var spec = exports.spec = { | |
| code: 'platformio', | |
| supportedMediaTypes: ['banner', 'native'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.pubId && bid.params.siteId); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var request = { | |
| id: bidRequests[0].bidderRequestId, | |
| at: 2, | |
| imp: bidRequests.map(function (slot) { | |
| return impression(slot); | |
| }), | |
| site: site(bidRequests), | |
| device: device() | |
| }; | |
| return { | |
| method: 'POST', | |
| url: '//piohbdisp.hb.adx1.com/', | |
| data: JSON.stringify(request) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(response, request) { | |
| return bidResponseAvailable(request, response.body); | |
| } | |
| }; | |
| function bidResponseAvailable(bidRequest, bidResponse) { | |
| var idToImpMap = {}; | |
| var idToBidMap = {}; | |
| var ortbRequest = parse(bidRequest.data); | |
| ortbRequest.imp.forEach(function (imp) { | |
| idToImpMap[imp.id] = imp; | |
| }); | |
| if (bidResponse) { | |
| bidResponse.seatbid.forEach(function (seatBid) { | |
| return seatBid.bid.forEach(function (bid) { | |
| idToBidMap[bid.impid] = bid; | |
| }); | |
| }); | |
| } | |
| var bids = []; | |
| Object.keys(idToImpMap).forEach(function (id) { | |
| if (idToBidMap[id]) { | |
| var bid = {}; | |
| bid.requestId = id; | |
| bid.adId = id; | |
| bid.creativeId = id; | |
| bid.cpm = idToBidMap[id].price; | |
| bid.currency = bidResponse.cur; | |
| bid.ttl = 360; | |
| bid.netRevenue = true; | |
| if (idToImpMap[id]['native']) { | |
| bid['native'] = nativeResponse(idToImpMap[id], idToBidMap[id]); | |
| var nurl = idToBidMap[id].nurl; | |
| nurl = nurl.replace(/\$(%7B|\{)AUCTION_IMP_ID(%7D|\})/gi, idToBidMap[id].impid); | |
| nurl = nurl.replace(/\$(%7B|\{)AUCTION_PRICE(%7D|\})/gi, idToBidMap[id].price); | |
| nurl = nurl.replace(/\$(%7B|\{)AUCTION_CURRENCY(%7D|\})/gi, bidResponse.cur); | |
| nurl = nurl.replace(/\$(%7B|\{)AUCTION_BID_ID(%7D|\})/gi, bidResponse.bidid); | |
| bid['native']['impressionTrackers'] = [nurl]; | |
| bid.mediaType = 'native'; | |
| } else { | |
| bid.ad = idToBidMap[id].adm; | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_IMP_ID(%7D|\})/gi, idToBidMap[id].impid); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_AD_ID(%7D|\})/gi, idToBidMap[id].adid); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_PRICE(%7D|\})/gi, idToBidMap[id].price); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_CURRENCY(%7D|\})/gi, bidResponse.cur); | |
| bid.ad = bid.ad.replace(/\$(%7B|\{)AUCTION_BID_ID(%7D|\})/gi, bidResponse.bidid); | |
| bid.width = idToImpMap[id].banner.w; | |
| bid.height = idToImpMap[id].banner.h; | |
| } | |
| bids.push(bid); | |
| } | |
| }); | |
| return bids; | |
| } | |
| function impression(slot) { | |
| return { | |
| id: slot.bidId, | |
| banner: banner(slot), | |
| 'native': nativeImpression(slot), | |
| bidfloor: slot.params.bidFloor || '0.000001', | |
| tagid: slot.params.placementId.toString() | |
| }; | |
| } | |
| function banner(slot) { | |
| if (!slot.nativeParams) { | |
| var size = slot.params.size.toUpperCase().split('X'); | |
| var width = parseInt(size[0]); | |
| var height = parseInt(size[1]); | |
| return { | |
| w: width, | |
| h: height | |
| }; | |
| }; | |
| } | |
| function nativeImpression(slot) { | |
| if (slot.nativeParams) { | |
| var assets = []; | |
| addAsset(assets, titleAsset(1, slot.nativeParams.title, NATIVE_DEFAULTS.TITLE_LEN)); | |
| addAsset(assets, dataAsset(2, slot.nativeParams.body, 2, NATIVE_DEFAULTS.DESCR_LEN)); | |
| addAsset(assets, dataAsset(3, slot.nativeParams.sponsoredBy, 1, NATIVE_DEFAULTS.SPONSORED_BY_LEN)); | |
| addAsset(assets, imageAsset(4, slot.nativeParams.icon, 1, NATIVE_DEFAULTS.ICON_MIN, NATIVE_DEFAULTS.ICON_MIN)); | |
| addAsset(assets, imageAsset(5, slot.nativeParams.image, 3, NATIVE_DEFAULTS.IMG_MIN, NATIVE_DEFAULTS.IMG_MIN)); | |
| return { | |
| request: JSON.stringify({ assets: assets }), | |
| ver: '1.1' | |
| }; | |
| } | |
| return null; | |
| } | |
| function addAsset(assets, asset) { | |
| if (asset) { | |
| assets.push(asset); | |
| } | |
| } | |
| function titleAsset(id, params, defaultLen) { | |
| if (params) { | |
| return { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| title: { | |
| len: params.len || defaultLen | |
| } | |
| }; | |
| } | |
| return null; | |
| } | |
| function imageAsset(id, params, type, defaultMinWidth, defaultMinHeight) { | |
| return params ? { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| img: { | |
| type: type, | |
| wmin: params.wmin || defaultMinWidth, | |
| hmin: params.hmin || defaultMinHeight | |
| } | |
| } : null; | |
| } | |
| function dataAsset(id, params, type, defaultLen) { | |
| return params ? { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| data: { | |
| type: type, | |
| len: params.len || defaultLen | |
| } | |
| } : null; | |
| } | |
| function site(bidderRequest) { | |
| var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.pubId : '0'; | |
| var siteId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.siteId : '0'; | |
| return { | |
| publisher: { | |
| id: pubId.toString(), | |
| domain: (0, _utils.getTopWindowLocation)().hostname | |
| }, | |
| id: siteId.toString(), | |
| ref: (0, _utils.getTopWindowReferrer)(), | |
| page: (0, _utils.getTopWindowLocation)().href | |
| }; | |
| } | |
| function device() { | |
| return { | |
| ua: navigator.userAgent, | |
| language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage, | |
| w: window.screen.width || window.innerWidth, | |
| h: window.screen.height || window.innerHeigh | |
| }; | |
| } | |
| function parse(rawResponse) { | |
| try { | |
| if (rawResponse) { | |
| return JSON.parse(rawResponse); | |
| } | |
| } catch (ex) { | |
| (0, _utils.logError)('platformio.parse', 'ERROR', ex); | |
| } | |
| return null; | |
| } | |
| function nativeResponse(imp, bid) { | |
| if (imp['native']) { | |
| var nativeAd = parse(bid.adm); | |
| var keys = {}; | |
| keys.image = {}; | |
| keys.icon = {}; | |
| if (nativeAd && nativeAd['native'] && nativeAd['native'].assets) { | |
| nativeAd['native'].assets.forEach(function (asset) { | |
| keys.title = asset.title ? asset.title.text : keys.title; | |
| keys.body = asset.data && asset.id === 2 ? asset.data.value : keys.body; | |
| keys.sponsoredBy = asset.data && asset.id === 3 ? asset.data.value : keys.sponsoredBy; | |
| keys.icon.url = asset.img && asset.id === 4 ? asset.img.url : keys.icon.url; | |
| keys.icon.width = asset.img && asset.id === 4 ? asset.img.w : keys.icon.width; | |
| keys.icon.height = asset.img && asset.id === 4 ? asset.img.h : keys.icon.height; | |
| keys.image.url = asset.img && asset.id === 5 ? asset.img.url : keys.image.url; | |
| keys.image.width = asset.img && asset.id === 5 ? asset.img.w : keys.image.width; | |
| keys.image.height = asset.img && asset.id === 5 ? asset.img.h : keys.image.height; | |
| }); | |
| if (nativeAd['native'].link) { | |
| keys.clickUrl = encodeURIComponent(nativeAd['native'].link.url); | |
| } | |
| return keys; | |
| } | |
| } | |
| return null; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 258: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[256]); | |
| pbjsChunk([42],{ | |
| /***/ 259: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(260); | |
| module.exports = __webpack_require__(261); | |
| /***/ }), | |
| /***/ 260: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'pollux'; | |
| var PLX_ENDPOINT_URL = '//adn.plxnt.com/prebid/v1'; | |
| var PLX_CURRENCY = 'EUR'; | |
| var PLX_TTL = 3600; | |
| var PLX_NETREVENUE = true; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['plx'], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (!bid.hasOwnProperty('params') || !bid.params.hasOwnProperty('zone')) { | |
| utils.logError('required param "zone" is missing for == ' + BIDDER_CODE + ' =='); | |
| return false; | |
| } | |
| return true; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| if (!Array.isArray(validBidRequests) || !validBidRequests.length) { | |
| return []; | |
| } | |
| var payload = []; | |
| var custom_url = null; | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| var bid = validBidRequests[i]; | |
| var request = { | |
| bidId: bid.bidId, | |
| zones: bid.params.zone, | |
| sizes: bid.sizes | |
| }; | |
| if (bid.bidderUrl && !custom_url) { | |
| custom_url = bid.bidderUrl; | |
| } | |
| payload.push(request); | |
| } | |
| var payloadString = JSON.stringify(payload); | |
| // build url parameters | |
| var domain = utils.getParameterByName('domain'); | |
| var tracker2 = utils.getParameterByName('tracker2'); | |
| var url_params = {}; | |
| if (domain) { | |
| url_params.domain = domain; | |
| } else { | |
| url_params.domain = utils.getTopWindowUrl(); | |
| } | |
| if (tracker2) { | |
| url_params.tracker2 = tracker2; | |
| } | |
| // build url | |
| var bidder_url = custom_url || PLX_ENDPOINT_URL; | |
| if (url_params) { | |
| bidder_url = bidder_url + '?' + utils.parseQueryStringParameters(url_params); | |
| } | |
| utils.logMessage('== ' + BIDDER_CODE + ' == request built: ' + bidder_url); | |
| return { | |
| method: 'POST', | |
| url: bidder_url, | |
| data: payloadString | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| if (!serverResponse || (typeof serverResponse === 'undefined' ? 'undefined' : _typeof(serverResponse)) === 'object' && !serverResponse.hasOwnProperty('body')) { | |
| utils.logMessage('No prebid response from == ' + BIDDER_CODE + ' == for bid requests:'); | |
| utils.logMessage(bidRequest); | |
| return bidResponses; | |
| } | |
| serverResponse = serverResponse.body; | |
| if (!Array.isArray(serverResponse) || !serverResponse.length) { | |
| utils.logMessage('No prebid response from == ' + BIDDER_CODE + ' == for bid requests:'); | |
| utils.logMessage(bidRequest); | |
| return bidResponses; | |
| } | |
| // loop through serverResponses | |
| for (var b in serverResponse) { | |
| var bid = serverResponse[b]; | |
| var bidResponse = { | |
| requestId: bid.bidId, // not request id, it's bid's id | |
| cpm: parseFloat(bid.cpm), | |
| width: parseInt(bid.width), | |
| height: parseInt(bid.height), | |
| ttl: PLX_TTL, | |
| creativeId: bid.creativeId, | |
| netRevenue: PLX_NETREVENUE, | |
| currency: PLX_CURRENCY | |
| }; | |
| if (bid.ad_type === 'url') { | |
| bidResponse.adUrl = bid.ad; | |
| } else { | |
| bidResponse.ad = bid.ad; | |
| } | |
| if (bid.referrer) { | |
| bidResponse.referrer = bid.referrer; | |
| } | |
| bidResponses.push(bidResponse); | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 261: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[259]); | |
| pbjsChunk([41],{ | |
| /***/ 264: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(265); | |
| /***/ }), | |
| /***/ 265: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| 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 _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; }; | |
| exports.PrebidServer = PrebidServer; | |
| var _adapter = __webpack_require__(25); | |
| var _adapter2 = _interopRequireDefault(_adapter); | |
| var _bidfactory = __webpack_require__(15); | |
| var _bidfactory2 = _interopRequireDefault(_bidfactory); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _ajax = __webpack_require__(6); | |
| var _constants = __webpack_require__(3); | |
| var _cookie = __webpack_require__(266); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _config = __webpack_require__(2); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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 getConfig = _config.config.getConfig; | |
| var TYPE = _constants.S2S.SRC; | |
| var _synced = false; | |
| var DEFAULT_S2S_TTL = 60; | |
| var DEFAULT_S2S_CURRENCY = 'USD'; | |
| var DEFAULT_S2S_NETREVENUE = true; | |
| var _s2sConfig = void 0; | |
| var s2sDefaultConfig = { | |
| enabled: false, | |
| timeout: 1000, | |
| maxBids: 1, | |
| adapter: 'prebidServer' | |
| }; | |
| _config.config.setDefaults({ | |
| 's2sConfig': s2sDefaultConfig | |
| }); | |
| // accountId and bidders params are not included here, should be configured by end-user | |
| var availVendorDefaults = { | |
| 'appnexus': { | |
| adapter: 'prebidServer', | |
| cookieSet: false, | |
| enabled: true, | |
| endpoint: '//prebid.adnxs.com/pbs/v1/auction', | |
| syncEndpoint: '//prebid.adnxs.com/pbs/v1/cookie_sync', | |
| timeout: 1000 | |
| }, | |
| 'rubicon': { | |
| adapter: 'prebidServer', | |
| cookieSet: false, | |
| enabled: true, | |
| endpoint: '//prebid-server.rubiconproject.com/auction', | |
| syncEndpoint: '//prebid-server.rubiconproject.com/cookie_sync', | |
| timeout: 500 | |
| } | |
| }; | |
| /** | |
| * Set config for server to server header bidding | |
| * @typedef {Object} options - required | |
| * @property {boolean} enabled enables S2S bidding | |
| * @property {string[]} bidders bidders to request S2S | |
| * @property {string} endpoint endpoint to contact | |
| * === optional params below === | |
| * @property {number} [timeout] timeout for S2S bidders - should be lower than `pbjs.requestBids({timeout})` | |
| * @property {boolean} [cacheMarkup] whether to cache the adm result | |
| * @property {string} [adapter] adapter code to use for S2S | |
| * @property {string} [syncEndpoint] endpoint URL for syncing cookies | |
| * @property {string} [cookieSetUrl] url for cookie set library, if passed then cookieSet is enabled | |
| */ | |
| function setS2sConfig(options) { | |
| if (options.defaultVendor) { | |
| var vendor = options.defaultVendor; | |
| var optionKeys = Object.keys(options); | |
| if (availVendorDefaults.hasOwnProperty(vendor)) { | |
| // vendor keys will be set if either: the key was not specified by user | |
| // or if the user did not set their own distinct value (ie using the system default) to override the vendor | |
| Object.keys(availVendorDefaults[vendor]).forEach(function (vendorKey) { | |
| if (s2sDefaultConfig[vendorKey] === options[vendorKey] || !(0, _includes2['default'])(optionKeys, vendorKey)) { | |
| options[vendorKey] = availVendorDefaults[vendor][vendorKey]; | |
| } | |
| }); | |
| } else { | |
| utils.logError('Incorrect or unavailable prebid server default vendor option: ' + vendor); | |
| return false; | |
| } | |
| } | |
| var keys = Object.keys(options); | |
| if (['accountId', 'bidders', 'endpoint'].filter(function (key) { | |
| if (!(0, _includes2['default'])(keys, key)) { | |
| utils.logError(key + ' missing in server to server config'); | |
| return true; | |
| } | |
| return false; | |
| }).length > 0) { | |
| return; | |
| } | |
| _s2sConfig = options; | |
| if (options.syncEndpoint) { | |
| queueSync(options.bidders); | |
| } | |
| } | |
| getConfig('s2sConfig', function (_ref) { | |
| var s2sConfig = _ref.s2sConfig; | |
| return setS2sConfig(s2sConfig); | |
| }); | |
| /** | |
| * @param {Array} bidderCodes list of bidders to request user syncs for. | |
| */ | |
| function queueSync(bidderCodes) { | |
| if (_synced) { | |
| return; | |
| } | |
| _synced = true; | |
| var payload = JSON.stringify({ | |
| uuid: utils.generateUUID(), | |
| bidders: bidderCodes | |
| }); | |
| (0, _ajax.ajax)(_s2sConfig.syncEndpoint, function (response) { | |
| try { | |
| response = JSON.parse(response); | |
| response.bidder_status.forEach(function (bidder) { | |
| return doBidderSync(bidder.usersync.type, bidder.usersync.url, bidder.bidder); | |
| }); | |
| } catch (e) { | |
| utils.logError(e); | |
| } | |
| }, payload, { | |
| contentType: 'text/plain', | |
| withCredentials: true | |
| }); | |
| } | |
| /** | |
| * Run a cookie sync for the given type, url, and bidder | |
| * | |
| * @param {string} type the type of sync, "image", "redirect", "iframe" | |
| * @param {string} url the url to sync | |
| * @param {string} bidder name of bidder doing sync for | |
| */ | |
| function doBidderSync(type, url, bidder) { | |
| if (!url) { | |
| utils.logError('No sync url for bidder "' + bidder + '": ' + url); | |
| } else if (type === 'image' || type === 'redirect') { | |
| utils.logMessage('Invoking image pixel user sync for bidder: "' + bidder + '"'); | |
| utils.triggerPixel(url); | |
| } else if (type == 'iframe') { | |
| utils.logMessage('Invoking iframe user sync for bidder: "' + bidder + '"'); | |
| utils.insertUserSyncIframe(url); | |
| } else { | |
| utils.logError('User sync type "' + type + '" not supported for bidder: "' + bidder + '"'); | |
| } | |
| } | |
| /** | |
| * Try to convert a value to a type. | |
| * If it can't be done, the value will be returned. | |
| * | |
| * @param {string} typeToConvert The target type. e.g. "string", "number", etc. | |
| * @param {*} value The value to be converted into typeToConvert. | |
| */ | |
| function tryConvertType(typeToConvert, value) { | |
| if (typeToConvert === 'string') { | |
| return value && value.toString(); | |
| } else if (typeToConvert === 'number') { | |
| return Number(value); | |
| } else { | |
| return value; | |
| } | |
| } | |
| var tryConvertString = tryConvertType.bind(null, 'string'); | |
| var tryConvertNumber = tryConvertType.bind(null, 'number'); | |
| var paramTypes = { | |
| 'appnexus': { | |
| 'member': tryConvertString, | |
| 'invCode': tryConvertString, | |
| 'placementId': tryConvertNumber | |
| }, | |
| 'rubicon': { | |
| 'accountId': tryConvertNumber, | |
| 'siteId': tryConvertNumber, | |
| 'zoneId': tryConvertNumber | |
| }, | |
| 'indexExchange': { | |
| 'siteID': tryConvertNumber | |
| }, | |
| 'audienceNetwork': { | |
| 'placementId': tryConvertString | |
| }, | |
| 'pubmatic': { | |
| 'publisherId': tryConvertString, | |
| 'adSlot': tryConvertString | |
| }, | |
| 'districtm': { | |
| 'member': tryConvertString, | |
| 'invCode': tryConvertString, | |
| 'placementId': tryConvertNumber | |
| }, | |
| 'pulsepoint': { | |
| 'cf': tryConvertString, | |
| 'cp': tryConvertNumber, | |
| 'ct': tryConvertNumber | |
| }, | |
| 'conversant': { | |
| 'site_id': tryConvertString, | |
| 'secure': tryConvertNumber, | |
| 'mobile': tryConvertNumber | |
| } | |
| }; | |
| /* | |
| * Modify an adunit's bidder parameters to match the expected parameter types | |
| */ | |
| function convertTypes(adUnits) { | |
| adUnits.forEach(function (adUnit) { | |
| adUnit.bids.forEach(function (bid) { | |
| var types = paramTypes[bid.bidder] || []; | |
| Object.keys(types).forEach(function (key) { | |
| if (bid.params[key]) { | |
| bid.params[key] = types[key](bid.params[key]); | |
| // don't send invalid values | |
| if (isNaN(bid.params[key])) { | |
| delete bid.params.key; | |
| } | |
| } | |
| }); | |
| }); | |
| }); | |
| } | |
| function _getDigiTrustQueryParams() { | |
| function getDigiTrustId() { | |
| var digiTrustUser = window.DigiTrust && (_config.config.getConfig('digiTrustId') || window.DigiTrust.getUser({ member: 'T9QSFKPDN9' })); | |
| return digiTrustUser && digiTrustUser.success && digiTrustUser.identity || null; | |
| } | |
| var digiTrustId = getDigiTrustId(); | |
| // Verify there is an ID and this user has not opted out | |
| if (!digiTrustId || digiTrustId.privacy && digiTrustId.privacy.optout) { | |
| return null; | |
| } | |
| return { | |
| id: digiTrustId.id, | |
| keyv: digiTrustId.keyv, | |
| pref: 0 | |
| }; | |
| } | |
| function _appendSiteAppDevice(request) { | |
| if (!request) return; | |
| // ORTB specifies app OR site | |
| if (_typeof(_config.config.getConfig('app')) === 'object') { | |
| request.app = _config.config.getConfig('app'); | |
| request.app.publisher = { id: _s2sConfig.accountId }; | |
| } else { | |
| request.site = { | |
| publisher: { id: _s2sConfig.accountId }, | |
| page: utils.getTopWindowUrl() | |
| }; | |
| } | |
| if (_typeof(_config.config.getConfig('device')) === 'object') { | |
| request.device = _config.config.getConfig('device'); | |
| } | |
| } | |
| /* | |
| * Protocol spec for legacy endpoint | |
| * e.g., https://<prebid-server-url>/v1/auction | |
| */ | |
| var LEGACY_PROTOCOL = { | |
| buildRequest: function buildRequest(s2sBidRequest, adUnits) { | |
| // pbs expects an ad_unit.video attribute if the imp is video | |
| adUnits.forEach(function (adUnit) { | |
| var videoMediaType = utils.deepAccess(adUnit, 'mediaTypes.video'); | |
| if (videoMediaType) { | |
| adUnit.video = _extends({}, videoMediaType); | |
| delete adUnit.mediaTypes; | |
| // default is assumed to be 'banner' so if there is a video type | |
| // we assume video only until PBS can support multi-format auction | |
| adUnit.media_types = [_mediaTypes.VIDEO]; | |
| } | |
| }); | |
| var request = { | |
| account_id: _s2sConfig.accountId, | |
| tid: s2sBidRequest.tid, | |
| max_bids: _s2sConfig.maxBids, | |
| timeout_millis: _s2sConfig.timeout, | |
| secure: _s2sConfig.secure, | |
| cache_markup: _s2sConfig.cacheMarkup, | |
| url: utils.getTopWindowUrl(), | |
| prebid_version: '1.7.0-pre', | |
| ad_units: adUnits, | |
| is_debug: !!getConfig('debug') | |
| }; | |
| _appendSiteAppDevice(request); | |
| var digiTrust = _getDigiTrustQueryParams(); | |
| if (digiTrust) { | |
| request.digiTrust = digiTrust; | |
| } | |
| return request; | |
| }, | |
| interpretResponse: function interpretResponse(result, bidRequests, requestedBidders) { | |
| var bids = []; | |
| if (result.status === 'OK' || result.status === 'no_cookie') { | |
| if (result.bidder_status) { | |
| result.bidder_status.forEach(function (bidder) { | |
| if (bidder.no_cookie) { | |
| doBidderSync(bidder.usersync.type, bidder.usersync.url, bidder.bidder); | |
| } | |
| }); | |
| } | |
| // do client-side syncs if available | |
| requestedBidders.forEach(function (bidder) { | |
| var clientAdapter = _adaptermanager2['default'].getBidAdapter(bidder); | |
| if (clientAdapter && clientAdapter.registerSyncs) { | |
| clientAdapter.registerSyncs([]); | |
| } | |
| }); | |
| if (result.bids) { | |
| result.bids.forEach(function (bidObj) { | |
| var bidRequest = utils.getBidRequest(bidObj.bid_id, bidRequests); | |
| var cpm = bidObj.price; | |
| var status = cpm !== 0 ? _constants.STATUS.GOOD : _constants.STATUS.NO_BID; | |
| var bidObject = _bidfactory2['default'].createBid(status, bidRequest); | |
| bidObject.source = TYPE; | |
| bidObject.creative_id = bidObj.creative_id; | |
| bidObject.bidderCode = bidObj.bidder; | |
| bidObject.cpm = cpm; | |
| if (bidObj.cache_id) { | |
| bidObject.cache_id = bidObj.cache_id; | |
| } | |
| if (bidObj.cache_url) { | |
| bidObject.cache_url = bidObj.cache_url; | |
| } | |
| // From ORTB see section 4.2.3: adm Optional means of conveying ad markup in case the bid wins; supersedes the win notice if markup is included in both. | |
| if (bidObj.media_type === _mediaTypes.VIDEO) { | |
| bidObject.mediaType = _mediaTypes.VIDEO; | |
| if (bidObj.adm) { | |
| bidObject.vastXml = bidObj.adm; | |
| } | |
| if (bidObj.nurl) { | |
| bidObject.vastUrl = bidObj.nurl; | |
| } | |
| // when video bid is already cached by Prebid Server, videoCacheKey and vastUrl should be provided properly | |
| if (bidObj.cache_id && bidObj.cache_url) { | |
| bidObject.videoCacheKey = bidObj.cache_id; | |
| bidObject.vastUrl = bidObj.cache_url; | |
| } | |
| } else { | |
| if (bidObj.adm && bidObj.nurl) { | |
| bidObject.ad = bidObj.adm; | |
| bidObject.ad += utils.createTrackPixelHtml(decodeURIComponent(bidObj.nurl)); | |
| } else if (bidObj.adm) { | |
| bidObject.ad = bidObj.adm; | |
| } else if (bidObj.nurl) { | |
| bidObject.adUrl = bidObj.nurl; | |
| } | |
| } | |
| bidObject.width = bidObj.width; | |
| bidObject.height = bidObj.height; | |
| bidObject.adserverTargeting = bidObj.ad_server_targeting; | |
| if (bidObj.deal_id) { | |
| bidObject.dealId = bidObj.deal_id; | |
| } | |
| bidObject.requestId = bidObj.bid_id; | |
| bidObject.creativeId = bidObj.creative_id; | |
| // TODO: Remove when prebid-server returns ttl, currency and netRevenue | |
| bidObject.ttl = bidObj.ttl ? bidObj.ttl : DEFAULT_S2S_TTL; | |
| bidObject.currency = bidObj.currency ? bidObj.currency : DEFAULT_S2S_CURRENCY; | |
| bidObject.netRevenue = bidObj.netRevenue ? bidObj.netRevenue : DEFAULT_S2S_NETREVENUE; | |
| if (result.burl) { | |
| bidObject.burl = result.burl; | |
| } | |
| bids.push({ adUnit: bidObj.code, bid: bidObject }); | |
| }); | |
| } | |
| } | |
| return bids; | |
| } | |
| }; | |
| /* | |
| * Protocol spec for OpenRTB endpoint | |
| * e.g., https://<prebid-server-url>/v1/openrtb2/auction | |
| */ | |
| var OPEN_RTB_PROTOCOL = { | |
| bidMap: {}, | |
| buildRequest: function buildRequest(s2sBidRequest, adUnits) { | |
| var _this = this; | |
| var imps = []; | |
| // transform ad unit into array of OpenRTB impression objects | |
| adUnits.forEach(function (adUnit) { | |
| // OpenRTB response contains the adunit code and bidder name. These are | |
| // combined to create a unique key for each bid since an id isn't returned | |
| adUnit.bids.forEach(function (bid) { | |
| var key = '' + adUnit.code + bid.bidder; | |
| _this.bidMap[key] = bid; | |
| }); | |
| var banner = void 0; | |
| // default to banner if mediaTypes isn't defined | |
| if (utils.isEmpty(adUnit.mediaTypes)) { | |
| var sizeObjects = adUnit.sizes.map(function (size) { | |
| return { w: size.w, h: size.h }; | |
| }); | |
| banner = { format: sizeObjects }; | |
| } | |
| var bannerParams = utils.deepAccess(adUnit, 'mediaTypes.banner'); | |
| if (bannerParams && bannerParams.sizes) { | |
| var sizes = utils.parseSizesInput(bannerParams.sizes); | |
| // get banner sizes in form [{ w: <int>, h: <int> }, ...] | |
| var format = sizes.map(function (size) { | |
| var _size$split = size.split('x'), | |
| _size$split2 = _slicedToArray(_size$split, 2), | |
| width = _size$split2[0], | |
| height = _size$split2[1]; | |
| var w = parseInt(width, 10); | |
| var h = parseInt(height, 10); | |
| return { w: w, h: h }; | |
| }); | |
| banner = { format: format }; | |
| } | |
| var video = void 0; | |
| var videoParams = utils.deepAccess(adUnit, 'mediaTypes.video'); | |
| if (!utils.isEmpty(videoParams)) { | |
| video = videoParams; | |
| } | |
| // get bidder params in form { <bidder code>: {...params} } | |
| var ext = adUnit.bids.reduce(function (acc, bid) { | |
| acc[bid.bidder] = bid.params; | |
| return acc; | |
| }, {}); | |
| var imp = { id: adUnit.code, ext: ext, secure: _s2sConfig.secure }; | |
| if (banner) { | |
| imp.banner = banner; | |
| } | |
| if (video) { | |
| imp.video = video; | |
| } | |
| imps.push(imp); | |
| }); | |
| var request = { | |
| id: s2sBidRequest.tid, | |
| source: { tid: s2sBidRequest.tid }, | |
| tmax: _s2sConfig.timeout, | |
| imp: imps, | |
| test: getConfig('debug') ? 1 : 0 | |
| }; | |
| _appendSiteAppDevice(request); | |
| var digiTrust = _getDigiTrustQueryParams(); | |
| if (digiTrust) { | |
| request.user = { ext: { digitrust: digiTrust } }; | |
| } | |
| return request; | |
| }, | |
| interpretResponse: function interpretResponse(response, bidRequests, requestedBidders) { | |
| var _this2 = this; | |
| var bids = []; | |
| if (response.seatbid) { | |
| // a seatbid object contains a `bid` array and a `seat` string | |
| response.seatbid.forEach(function (seatbid) { | |
| (seatbid.bid || []).forEach(function (bid) { | |
| var bidRequest = utils.getBidRequest(_this2.bidMap['' + bid.impid + seatbid.seat], bidRequests); | |
| var cpm = bid.price; | |
| var status = cpm !== 0 ? _constants.STATUS.GOOD : _constants.STATUS.NO_BID; | |
| var bidObject = _bidfactory2['default'].createBid(status, bidRequest); | |
| bidObject.source = TYPE; | |
| bidObject.bidderCode = seatbid.seat; | |
| bidObject.cpm = cpm; | |
| if (utils.deepAccess(bid, 'ext.prebid.type') === _mediaTypes.VIDEO) { | |
| bidObject.mediaType = _mediaTypes.VIDEO; | |
| if (bid.adm) { | |
| bidObject.vastXml = bid.adm; | |
| } | |
| if (bid.nurl) { | |
| bidObject.vastUrl = bid.nurl; | |
| } | |
| } else { | |
| // banner | |
| if (bid.adm && bid.nurl) { | |
| bidObject.ad = bid.adm; | |
| bidObject.ad += utils.createTrackPixelHtml(decodeURIComponent(bid.nurl)); | |
| } else if (bid.adm) { | |
| bidObject.ad = bid.adm; | |
| } else if (bid.nurl) { | |
| bidObject.adUrl = bid.nurl; | |
| } | |
| } | |
| bidObject.width = bid.w; | |
| bidObject.height = bid.h; | |
| if (bid.dealid) { | |
| bidObject.dealId = bid.dealid; | |
| } | |
| bidObject.requestId = bid.id; | |
| bidObject.creative_id = bid.crid; | |
| bidObject.creativeId = bid.crid; | |
| if (bid.burl) { | |
| bidObject.burl = bid.burl; | |
| } | |
| // TODO: Remove when prebid-server returns ttl, currency and netRevenue | |
| bidObject.ttl = bid.ttl ? bid.ttl : DEFAULT_S2S_TTL; | |
| bidObject.currency = bid.currency ? bid.currency : DEFAULT_S2S_CURRENCY; | |
| bidObject.netRevenue = bid.netRevenue ? bid.netRevenue : DEFAULT_S2S_NETREVENUE; | |
| bids.push({ adUnit: bid.impid, bid: bidObject }); | |
| }); | |
| }); | |
| } | |
| return bids; | |
| } | |
| }; | |
| /* | |
| * Returns the required protocol adapter to communicate with the configured | |
| * endpoint. The adapter is an object containing `buildRequest` and | |
| * `interpretResponse` functions. | |
| * | |
| * Usage: | |
| * // build JSON payload to send to server | |
| * const request = protocol().buildRequest(s2sBidRequest, adUnits); | |
| * | |
| * // turn server response into bid object array | |
| * const bids = protocol().interpretResponse(response, bidRequests, requestedBidders); | |
| */ | |
| var protocolAdapter = function protocolAdapter() { | |
| var OPEN_RTB_PATH = 'openrtb2/auction'; | |
| var endpoint = _s2sConfig && _s2sConfig.endpoint || ''; | |
| var isOpenRtb = ~endpoint.indexOf(OPEN_RTB_PATH); | |
| return isOpenRtb ? OPEN_RTB_PROTOCOL : LEGACY_PROTOCOL; | |
| }; | |
| /** | |
| * Bidder adapter for Prebid Server | |
| */ | |
| function PrebidServer() { | |
| var baseAdapter = new _adapter2['default']('prebidServer'); | |
| /* Prebid executes this function when the page asks to send out bid requests */ | |
| baseAdapter.callBids = function (s2sBidRequest, bidRequests, addBidResponse, done, ajax) { | |
| var adUnits = utils.deepClone(s2sBidRequest.ad_units); | |
| convertTypes(adUnits); | |
| // at this point ad units should have a size array either directly or mapped so filter for that | |
| var adUnitsWithSizes = adUnits.filter(function (unit) { | |
| return unit.sizes && unit.sizes.length; | |
| }); | |
| // in case config.bidders contains invalid bidders, we only process those we sent requests for | |
| var requestedBidders = adUnitsWithSizes.map(function (adUnit) { | |
| return adUnit.bids.map(function (bid) { | |
| return bid.bidder; | |
| }).filter(utils.uniques); | |
| }).reduce(utils.flatten).filter(utils.uniques); | |
| var request = protocolAdapter().buildRequest(s2sBidRequest, adUnitsWithSizes); | |
| var requestJson = JSON.stringify(request); | |
| ajax(_s2sConfig.endpoint, function (response) { | |
| return handleResponse(response, requestedBidders, bidRequests, addBidResponse, done); | |
| }, requestJson, { contentType: 'text/plain', withCredentials: true }); | |
| }; | |
| /* Notify Prebid of bid responses so bids can get in the auction */ | |
| function handleResponse(response, requestedBidders, bidRequests, addBidResponse, done) { | |
| var result = void 0; | |
| try { | |
| result = JSON.parse(response); | |
| var bids = protocolAdapter().interpretResponse(result, bidRequests, requestedBidders); | |
| bids.forEach(function (_ref2) { | |
| var adUnit = _ref2.adUnit, | |
| bid = _ref2.bid; | |
| if ((0, _bidderFactory.isValid)(adUnit, bid, bidRequests)) { | |
| addBidResponse(adUnit, bid); | |
| } | |
| }); | |
| if (result.status === 'no_cookie' && _s2sConfig.cookieSet && typeof _s2sConfig.cookieSetUrl === 'string') { | |
| // cookie sync | |
| (0, _cookie.cookieSet)(_s2sConfig.cookieSetUrl); | |
| } | |
| } catch (error) { | |
| utils.logError(error); | |
| } | |
| if (!result || result.status && (0, _includes2['default'])(result.status, 'Error')) { | |
| utils.logError('error parsing response: ', result.status); | |
| } | |
| done(); | |
| } | |
| return _extends(this, { | |
| callBids: baseAdapter.callBids, | |
| setBidderCode: baseAdapter.setBidderCode, | |
| type: TYPE | |
| }); | |
| } | |
| _adaptermanager2['default'].registerBidAdapter(new PrebidServer(), 'prebidServer'); | |
| /***/ }), | |
| /***/ 266: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _adloader = __webpack_require__(11); | |
| var _adloader2 = _interopRequireDefault(_adloader); | |
| 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; | |
| cookie.cookieSet = function (cookieSetUrl) { | |
| if (!utils.isSafariBrowser()) { | |
| return; | |
| } | |
| _adloader2['default'].loadScript(cookieSetUrl, null, true); | |
| }; | |
| /***/ }) | |
| },[264]); | |
| pbjsChunk([107],{ | |
| /***/ 267: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(268); | |
| /***/ }), | |
| /***/ 268: | |
| /***/ (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 _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; }; /** | |
| * This modules adds Publisher Common ID support to prebid.js. It's a simple numeric id | |
| * stored in the page's domain. When the module is included, an id is generated if needed, | |
| * persisted as a cookie, and automatically appended to all the bidRequest as bid.crumbs.pubcid. | |
| */ | |
| exports.isPubcidEnabled = isPubcidEnabled; | |
| exports.getExpInterval = getExpInterval; | |
| exports.requestBidHook = requestBidHook; | |
| exports.setCookie = setCookie; | |
| exports.getCookie = getCookie; | |
| exports.setConfig = setConfig; | |
| exports.initPubcid = initPubcid; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| 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_NAME = '_pubcid'; | |
| var DEFAULT_EXPIRES = 2628000; // 5-year worth of minutes | |
| var PUB_COMMON = 'PublisherCommonId'; | |
| var pubcidEnabled = true; | |
| var interval = DEFAULT_EXPIRES; | |
| function isPubcidEnabled() { | |
| return pubcidEnabled; | |
| } | |
| function getExpInterval() { | |
| return interval; | |
| } | |
| /** | |
| * Decorate ad units with pubcid. This hook function is called before the | |
| * real pbjs.requestBids is invoked, and can modify its parameter. The cookie is | |
| * not updated until this function is called. | |
| * @param {Object} config This is the same parameter as pbjs.requestBids, and config.adUnits will be updated. | |
| * @param {function} next The next function in the chain | |
| */ | |
| function requestBidHook(config, next) { | |
| var adUnits = config.adUnits || pbjs.adUnits; | |
| var pubcid = null; | |
| // Pass control to the next function if not enabled | |
| if (!pubcidEnabled) { | |
| return next.apply(this, arguments); | |
| } | |
| if (_typeof(window[PUB_COMMON]) === 'object') { | |
| // If the page includes its own pubcid object, then use that instead. | |
| pubcid = window[PUB_COMMON].getId(); | |
| utils.logMessage(PUB_COMMON + ': pubcid = ' + pubcid); | |
| } else { | |
| // Otherwise get the existing cookie or create a new id | |
| pubcid = getCookie(COOKIE_NAME) || utils.generateUUID(); | |
| // Update the cookie with the latest expiration date | |
| setCookie(COOKIE_NAME, pubcid, interval); | |
| utils.logMessage('pbjs: pubcid = ' + pubcid); | |
| } | |
| // Append pubcid to each bid object, which will be incorporated | |
| // into bid requests later. | |
| if (adUnits && pubcid) { | |
| adUnits.forEach(function (unit) { | |
| unit.bids.forEach(function (bid) { | |
| _extends(bid, { crumbs: { pubcid: pubcid } }); | |
| }); | |
| }); | |
| } | |
| return next.apply(this, arguments); | |
| } | |
| // Helper to set a cookie | |
| function setCookie(name, value, expires) { | |
| var expTime = new Date(); | |
| expTime.setTime(expTime.getTime() + expires * 1000 * 60); | |
| window.document.cookie = name + '=' + encodeURIComponent(value) + ';path=/;expires=' + expTime.toGMTString(); | |
| } | |
| // Helper to read a cookie | |
| function getCookie(name) { | |
| var m = window.document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]*)\\s*(;|$)'); | |
| return m ? decodeURIComponent(m[2]) : null; | |
| } | |
| /** | |
| * Configuration function | |
| * @param {boolean} enable Enable or disable pubcid. By default the module is enabled. | |
| * @param {number} expInterval Expiration interval of the cookie in minutes. | |
| */ | |
| function setConfig() { | |
| var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, | |
| _ref$enable = _ref.enable, | |
| enable = _ref$enable === undefined ? true : _ref$enable, | |
| _ref$expInterval = _ref.expInterval, | |
| expInterval = _ref$expInterval === undefined ? DEFAULT_EXPIRES : _ref$expInterval; | |
| pubcidEnabled = enable; | |
| interval = parseInt(expInterval, 10); | |
| if (isNaN(interval)) { | |
| interval = DEFAULT_EXPIRES; | |
| } | |
| } | |
| /** | |
| * Initialize module by 1) subscribe to configuration changes and 2) register hook | |
| */ | |
| function initPubcid() { | |
| _config.config.getConfig('pubcid', function (config) { | |
| return setConfig(config.pubcid); | |
| }); | |
| if (utils.cookiesAreEnabled()) { | |
| pbjs.requestBids.addHook(requestBidHook); | |
| } | |
| } | |
| initPubcid(); | |
| /***/ }) | |
| },[267]); | |
| pbjsChunk([40],{ | |
| /***/ 269: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(270); | |
| module.exports = __webpack_require__(271); | |
| /***/ }), | |
| /***/ 270: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 constants = __webpack_require__(3); | |
| var BIDDER_CODE = 'pubmatic'; | |
| var ENDPOINT = '//hbopenbid.pubmatic.com/translator?source=prebid-client'; | |
| var USYNCURL = '//ads.pubmatic.com/AdServer/js/showad.js#PIX&kdntuid=1&p='; | |
| var CURRENCY = 'USD'; | |
| var AUCTION_TYPE = 1; | |
| var UNDEFINED = undefined; | |
| var CUSTOM_PARAMS = { | |
| 'kadpageurl': '', // Custom page url | |
| 'gender': '', // User gender | |
| 'yob': '', // User year of birth | |
| 'lat': '', // User location - Latitude | |
| 'lon': '', // User Location - Longitude | |
| 'wiid': '', // OpenWrap Wrapper Impression ID | |
| 'profId': '', // OpenWrap Legacy: Profile ID | |
| 'verId': '' // OpenWrap Legacy: version ID | |
| }; | |
| var NET_REVENUE = false; | |
| var publisherId = 0; | |
| function _getDomainFromURL(url) { | |
| var anchor = document.createElement('a'); | |
| anchor.href = url; | |
| return anchor.hostname; | |
| } | |
| function _parseSlotParam(paramName, paramValue) { | |
| if (!utils.isStr(paramValue)) { | |
| paramValue && utils.logWarn('PubMatic: Ignoring param key: ' + paramName + ', expects string-value, found ' + (typeof paramValue === 'undefined' ? 'undefined' : _typeof(paramValue))); | |
| return UNDEFINED; | |
| } | |
| switch (paramName) { | |
| case 'pmzoneid': | |
| return paramValue.split(',').slice(0, 50).map(function (id) { | |
| return id.trim(); | |
| }).join(); | |
| case 'kadfloor': | |
| return parseFloat(paramValue) || UNDEFINED; | |
| case 'lat': | |
| return parseFloat(paramValue) || UNDEFINED; | |
| case 'lon': | |
| return parseFloat(paramValue) || UNDEFINED; | |
| case 'yob': | |
| return parseInt(paramValue) || UNDEFINED; | |
| default: | |
| return paramValue; | |
| } | |
| } | |
| function _cleanSlot(slotName) { | |
| if (utils.isStr(slotName)) { | |
| return slotName.replace(/^\s+/g, '').replace(/\s+$/g, ''); | |
| } | |
| return ''; | |
| } | |
| function _parseAdSlot(bid) { | |
| bid.params.adUnit = ''; | |
| bid.params.adUnitIndex = '0'; | |
| bid.params.width = 0; | |
| bid.params.height = 0; | |
| bid.params.adSlot = _cleanSlot(bid.params.adSlot); | |
| var slot = bid.params.adSlot; | |
| var splits = slot.split(':'); | |
| slot = splits[0]; | |
| if (splits.length == 2) { | |
| bid.params.adUnitIndex = splits[1]; | |
| } | |
| splits = slot.split('@'); | |
| if (splits.length != 2) { | |
| utils.logWarn('AdSlot Error: adSlot not in required format'); | |
| return; | |
| } | |
| bid.params.adUnit = splits[0]; | |
| splits = splits[1].split('x'); | |
| if (splits.length != 2) { | |
| utils.logWarn('AdSlot Error: adSlot not in required format'); | |
| return; | |
| } | |
| bid.params.width = parseInt(splits[0]); | |
| bid.params.height = parseInt(splits[1]); | |
| } | |
| function _initConf() { | |
| var conf = {}; | |
| conf.pageURL = utils.getTopWindowUrl(); | |
| conf.refURL = utils.getTopWindowReferrer(); | |
| return conf; | |
| } | |
| function _handleCustomParams(params, conf) { | |
| if (!conf.kadpageurl) { | |
| conf.kadpageurl = conf.pageURL; | |
| } | |
| var key, value, entry; | |
| for (key in CUSTOM_PARAMS) { | |
| if (CUSTOM_PARAMS.hasOwnProperty(key)) { | |
| value = params[key]; | |
| if (value) { | |
| entry = CUSTOM_PARAMS[key]; | |
| if ((typeof entry === 'undefined' ? 'undefined' : _typeof(entry)) === 'object') { | |
| // will be used in future when we want to process a custom param before using | |
| // 'keyname': {f: function() {}} | |
| value = entry.f(value, conf); | |
| } | |
| if (utils.isStr(value)) { | |
| conf[key] = value; | |
| } else { | |
| utils.logWarn('PubMatic: Ignoring param : ' + key + ' with value : ' + CUSTOM_PARAMS[key] + ', expects string-value, found ' + (typeof value === 'undefined' ? 'undefined' : _typeof(value))); | |
| } | |
| } | |
| } | |
| } | |
| return conf; | |
| } | |
| function _createOrtbTemplate(conf) { | |
| return { | |
| id: '' + new Date().getTime(), | |
| at: AUCTION_TYPE, | |
| cur: [CURRENCY], | |
| imp: [], | |
| site: { | |
| page: conf.pageURL, | |
| ref: conf.refURL, | |
| publisher: {} | |
| }, | |
| device: { | |
| ua: navigator.userAgent, | |
| js: 1, | |
| dnt: navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1' ? 1 : 0, | |
| h: screen.height, | |
| w: screen.width, | |
| language: navigator.language | |
| }, | |
| user: {}, | |
| ext: {} | |
| }; | |
| } | |
| function _createImpressionObject(bid, conf) { | |
| return { | |
| id: bid.bidId, | |
| tagid: bid.params.adUnit, | |
| bidfloor: _parseSlotParam('kadfloor', bid.params.kadfloor), | |
| secure: window.location.protocol === 'https:' ? 1 : 0, | |
| banner: { | |
| pos: 0, | |
| w: bid.params.width, | |
| h: bid.params.height, | |
| topframe: utils.inIframe() ? 0 : 1 | |
| }, | |
| ext: { | |
| pmZoneId: _parseSlotParam('pmzoneid', bid.params.pmzoneid) | |
| } | |
| }; | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. Valid bid request must have placementId and hbid | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (bid && bid.params) { | |
| if (!utils.isStr(bid.params.publisherId)) { | |
| utils.logWarn('PubMatic Error: publisherId is mandatory and cannot be numeric. Call to OpenBid will not be sent.'); | |
| return false; | |
| } | |
| if (!utils.isStr(bid.params.adSlot)) { | |
| utils.logWarn('PubMatic: adSlotId is mandatory and cannot be numeric. Call to OpenBid will not be sent.'); | |
| return false; | |
| } | |
| return true; | |
| } | |
| return false; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var conf = _initConf(); | |
| var payload = _createOrtbTemplate(conf); | |
| validBidRequests.forEach(function (bid) { | |
| _parseAdSlot(bid); | |
| if (!(bid.params.adSlot && bid.params.adUnit && bid.params.adUnitIndex && bid.params.width && bid.params.height)) { | |
| utils.logWarn('PubMatic: Skipping the non-standard adslot:', bid.params.adSlot, bid); | |
| return; | |
| } | |
| conf.pubId = conf.pubId || bid.params.publisherId; | |
| conf = _handleCustomParams(bid.params, conf); | |
| conf.transactionId = bid.transactionId; | |
| payload.imp.push(_createImpressionObject(bid, conf)); | |
| }); | |
| if (payload.imp.length == 0) { | |
| return; | |
| } | |
| payload.site.publisher.id = conf.pubId.trim(); | |
| publisherId = conf.pubId.trim(); | |
| payload.ext.wrapper = {}; | |
| payload.ext.wrapper.profile = conf.profId || UNDEFINED; | |
| payload.ext.wrapper.version = conf.verId || UNDEFINED; | |
| payload.ext.wrapper.wiid = conf.wiid || UNDEFINED; | |
| payload.ext.wrapper.wv = constants.REPO_AND_VERSION; | |
| payload.ext.wrapper.transactionId = conf.transactionId; | |
| payload.ext.wrapper.wp = 'pbjs'; | |
| payload.user.gender = conf.gender ? conf.gender.trim() : UNDEFINED; | |
| payload.user.geo = {}; | |
| payload.user.geo.lat = _parseSlotParam('lat', conf.lat); | |
| payload.user.geo.lon = _parseSlotParam('lon', conf.lon); | |
| payload.user.yob = _parseSlotParam('yob', conf.yob); | |
| payload.device.geo = {}; | |
| payload.device.geo.lat = _parseSlotParam('lat', conf.lat); | |
| payload.device.geo.lon = _parseSlotParam('lon', conf.lon); | |
| payload.site.page = conf.kadpageurl.trim() || payload.site.page.trim(); | |
| payload.site.domain = _getDomainFromURL(payload.site.page); | |
| return { | |
| method: 'POST', | |
| url: ENDPOINT, | |
| data: JSON.stringify(payload) | |
| }; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} response A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(response, request) { | |
| var bidResponses = []; | |
| try { | |
| if (response.body && response.body.seatbid && response.body.seatbid[0] && response.body.seatbid[0].bid) { | |
| response.body.seatbid[0].bid.forEach(function (bid) { | |
| var newBid = { | |
| requestId: bid.impid, | |
| cpm: (parseFloat(bid.price) || 0).toFixed(2), | |
| width: bid.w, | |
| height: bid.h, | |
| creativeId: bid.crid || bid.id, | |
| dealId: bid.dealid, | |
| currency: CURRENCY, | |
| netRevenue: NET_REVENUE, | |
| ttl: 300, | |
| referrer: utils.getTopWindowUrl(), | |
| ad: bid.adm | |
| }; | |
| bidResponses.push(newBid); | |
| }); | |
| } | |
| } catch (error) { | |
| utils.logError(error); | |
| } | |
| return bidResponses; | |
| }, | |
| /** | |
| * Register User Sync. | |
| */ | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: USYNCURL + publisherId | |
| }]; | |
| } else { | |
| utils.logWarn('PubMatic: Please enable iframe based user sync.'); | |
| } | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 271: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[269]); | |
| pbjsChunk([39],{ | |
| /***/ 272: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(273); | |
| /***/ }), | |
| /***/ 273: | |
| /***/ (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__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _constants = __webpack_require__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var utils = __webpack_require__(0); | |
| /**** | |
| * PubWise.io Analytics | |
| * Contact: [email protected] | |
| * Developer: Stephen Johnston | |
| * | |
| * For testing: | |
| * | |
| pbjs.enableAnalytics({ | |
| provider: 'pubwise', | |
| options: { | |
| site: 'test-test-test-test', | |
| endpoint: 'https://api.pubwise.io/api/v4/event/add/', | |
| } | |
| }); | |
| */ | |
| var analyticsType = 'endpoint'; | |
| var analyticsName = 'PubWise Analytics: '; | |
| var defaultUrl = 'https://api.pubwise.io/api/v4/event/default/'; | |
| var pubwiseVersion = '3.0'; | |
| var pubwiseSchema = 'AVOCET'; | |
| var configOptions = { site: '', endpoint: 'https://api.pubwise.io/api/v4/event/default/', debug: '' }; | |
| var pwAnalyticsEnabled = false; | |
| var utmKeys = { utm_source: '', utm_medium: '', utm_campaign: '', utm_term: '', utm_content: '' }; | |
| function markEnabled() { | |
| utils.logInfo(analyticsName + 'Enabled', configOptions); | |
| pwAnalyticsEnabled = true; | |
| } | |
| function enrichWithMetrics(dataBag) { | |
| try { | |
| dataBag['pw_version'] = pubwiseVersion; | |
| dataBag['pbjs_version'] = pbjs.version; | |
| dataBag['debug'] = configOptions.debug; | |
| } catch (e) { | |
| dataBag['error_metric'] = 1; | |
| } | |
| return dataBag; | |
| } | |
| function enrichWithUTM(dataBag) { | |
| var newUtm = false; | |
| try { | |
| for (var prop in utmKeys) { | |
| utmKeys[prop] = utils.getParameterByName(prop); | |
| if (utmKeys[prop] != '') { | |
| newUtm = true; | |
| dataBag[prop] = utmKeys[prop]; | |
| } | |
| } | |
| if (newUtm === false) { | |
| for (var _prop in utmKeys) { | |
| var itemValue = localStorage.getItem('pw-' + _prop); | |
| if (itemValue.length !== 0) { | |
| dataBag[_prop] = itemValue; | |
| } | |
| } | |
| } else { | |
| for (var _prop2 in utmKeys) { | |
| localStorage.setItem('pw-' + _prop2, utmKeys[_prop2]); | |
| } | |
| } | |
| } catch (e) { | |
| utils.logInfo(analyticsName + 'Error', e); | |
| dataBag['error_utm'] = 1; | |
| } | |
| return dataBag; | |
| } | |
| function sendEvent(eventType, data) { | |
| utils.logInfo(analyticsName + 'Event ' + eventType + ' ' + pwAnalyticsEnabled, data); | |
| // put the typical items in the data bag | |
| var dataBag = { | |
| eventType: eventType, | |
| args: data, | |
| target_site: configOptions.site, | |
| pubwiseSchema: pubwiseSchema, | |
| debug: configOptions.debug ? 1 : 0 | |
| }; | |
| // for certain events, track additional info | |
| if (eventType == _constants2['default'].EVENTS.AUCTION_INIT) { | |
| dataBag = enrichWithMetrics(dataBag); | |
| dataBag = enrichWithUTM(dataBag); | |
| } | |
| (0, _ajax.ajax)(configOptions.endpoint, function (result) { | |
| return utils.logInfo(analyticsName + 'Result', result); | |
| }, JSON.stringify(dataBag)); | |
| } | |
| var pubwiseAnalytics = _extends((0, _AnalyticsAdapter2['default'])({ | |
| defaultUrl: defaultUrl, | |
| analyticsType: analyticsType | |
| }), { | |
| // Override AnalyticsAdapter functions by supplying custom methods | |
| track: function track(_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| sendEvent(eventType, args); | |
| } | |
| }); | |
| pubwiseAnalytics.adapterEnableAnalytics = pubwiseAnalytics.enableAnalytics; | |
| pubwiseAnalytics.enableAnalytics = function (config) { | |
| if (config.options.debug === undefined) { | |
| config.options.debug = utils.debugTurnedOn(); | |
| } | |
| configOptions = config.options; | |
| markEnabled(); | |
| pubwiseAnalytics.adapterEnableAnalytics(config); | |
| }; | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: pubwiseAnalytics, | |
| code: 'pubwise' | |
| }); | |
| exports['default'] = pubwiseAnalytics; | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[272]); | |
| pbjsChunk([38],{ | |
| /***/ 274: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(275); | |
| /***/ }), | |
| /***/ 275: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| var _AnalyticsAdapter = __webpack_require__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| /** | |
| * pulsepoint.js - Analytics Adapter for PulsePoint | |
| */ | |
| var pulsepointAdapter = (0, _AnalyticsAdapter2['default'])({ | |
| global: 'PulsePointPrebidAnalytics', | |
| handler: 'on', | |
| analyticsType: 'bundle' | |
| }); | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: pulsepointAdapter, | |
| code: 'pulsepoint' | |
| }); | |
| exports['default'] = pulsepointAdapter; | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[274]); | |
| pbjsChunk([37],{ | |
| /***/ 276: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(277); | |
| module.exports = __webpack_require__(278); | |
| /***/ }), | |
| /***/ 277: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var _bidderFactory = __webpack_require__(1); | |
| /* eslint dot-notation:0, quote-props:0 */ | |
| var NATIVE_DEFAULTS = { | |
| TITLE_LEN: 100, | |
| DESCR_LEN: 200, | |
| SPONSORED_BY_LEN: 50, | |
| IMG_MIN: 150, | |
| ICON_MIN: 50 | |
| }; | |
| var DEFAULT_BID_TTL = 20; | |
| var DEFAULT_CURRENCY = 'USD'; | |
| var DEFAULT_NET_REVENUE = true; | |
| /** | |
| * PulsePoint Bid Adapter. | |
| * Contact: [email protected] | |
| * | |
| * Aliases - pulseLite and pulsepointLite are supported for backwards compatibility. | |
| * Formats - Display/Native/Outstream formats supported. | |
| * | |
| */ | |
| var spec = exports.spec = { | |
| code: 'pulsepoint', | |
| aliases: ['pulseLite', 'pulsepointLite'], | |
| supportedMediaTypes: ['banner', 'native'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.cp && bid.params.ct); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var request = { | |
| id: bidRequests[0].bidderRequestId, | |
| imp: bidRequests.map(function (slot) { | |
| return impression(slot); | |
| }), | |
| site: site(bidRequests), | |
| app: app(bidRequests), | |
| device: device() | |
| }; | |
| return { | |
| method: 'POST', | |
| url: '//bid.contextweb.com/header/ortb', | |
| data: JSON.stringify(request) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(response, request) { | |
| return bidResponseAvailable(request, response); | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: '//bh.contextweb.com/visitormatch' | |
| }]; | |
| } else if (syncOptions.pixelEnabled) { | |
| return [{ | |
| type: 'image', | |
| url: '//bh.contextweb.com/visitormatch/prebid' | |
| }]; | |
| } | |
| } | |
| }; | |
| /** | |
| * Callback for bids, after the call to PulsePoint completes. | |
| */ | |
| function bidResponseAvailable(bidRequest, bidResponse) { | |
| var idToImpMap = {}; | |
| var idToBidMap = {}; | |
| bidResponse = bidResponse.body; | |
| // extract the request bids and the response bids, keyed by impr-id | |
| var ortbRequest = parse(bidRequest.data); | |
| ortbRequest.imp.forEach(function (imp) { | |
| idToImpMap[imp.id] = imp; | |
| }); | |
| if (bidResponse) { | |
| bidResponse.seatbid.forEach(function (seatBid) { | |
| return seatBid.bid.forEach(function (bid) { | |
| idToBidMap[bid.impid] = bid; | |
| }); | |
| }); | |
| } | |
| var bids = []; | |
| Object.keys(idToImpMap).forEach(function (id) { | |
| if (idToBidMap[id]) { | |
| var bid = { | |
| requestId: id, | |
| cpm: idToBidMap[id].price, | |
| creative_id: id, | |
| creativeId: id, | |
| adId: id, | |
| ttl: DEFAULT_BID_TTL, | |
| netRevenue: DEFAULT_NET_REVENUE, | |
| currency: DEFAULT_CURRENCY | |
| }; | |
| if (idToImpMap[id]['native']) { | |
| bid['native'] = nativeResponse(idToImpMap[id], idToBidMap[id]); | |
| bid.mediaType = 'native'; | |
| } else { | |
| bid.ad = idToBidMap[id].adm; | |
| bid.width = idToImpMap[id].banner.w; | |
| bid.height = idToImpMap[id].banner.h; | |
| } | |
| applyExt(bid, idToBidMap[id]); | |
| bids.push(bid); | |
| } | |
| }); | |
| return bids; | |
| } | |
| function applyExt(bid, ortbBid) { | |
| if (ortbBid && ortbBid.ext) { | |
| bid.ttl = ortbBid.ext.ttl || bid.ttl; | |
| bid.currency = ortbBid.ext.currency || bid.currency; | |
| bid.netRevenue = ortbBid.ext.netRevenue != null ? ortbBid.ext.netRevenue : bid.netRevenue; | |
| } | |
| } | |
| /** | |
| * Produces an OpenRTBImpression from a slot config. | |
| */ | |
| function impression(slot) { | |
| return { | |
| id: slot.bidId, | |
| banner: banner(slot), | |
| 'native': nativeImpression(slot), | |
| tagid: slot.params.ct.toString() | |
| }; | |
| } | |
| /** | |
| * Produces an OpenRTB Banner object for the slot given. | |
| */ | |
| function banner(slot) { | |
| var size = adSize(slot); | |
| return slot.nativeParams ? null : { | |
| w: size[0], | |
| h: size[1] | |
| }; | |
| } | |
| /** | |
| * Produces an OpenRTB Native object for the slot given. | |
| */ | |
| function nativeImpression(slot) { | |
| if (slot.nativeParams) { | |
| var assets = []; | |
| addAsset(assets, titleAsset(assets.length + 1, slot.nativeParams.title, NATIVE_DEFAULTS.TITLE_LEN)); | |
| addAsset(assets, dataAsset(assets.length + 1, slot.nativeParams.body, 2, NATIVE_DEFAULTS.DESCR_LEN)); | |
| addAsset(assets, dataAsset(assets.length + 1, slot.nativeParams.sponsoredBy, 1, NATIVE_DEFAULTS.SPONSORED_BY_LEN)); | |
| addAsset(assets, imageAsset(assets.length + 1, slot.nativeParams.icon, 1, NATIVE_DEFAULTS.ICON_MIN, NATIVE_DEFAULTS.ICON_MIN)); | |
| addAsset(assets, imageAsset(assets.length + 1, slot.nativeParams.image, 3, NATIVE_DEFAULTS.IMG_MIN, NATIVE_DEFAULTS.IMG_MIN)); | |
| return { | |
| request: JSON.stringify({ assets: assets }), | |
| ver: '1.1' | |
| }; | |
| } | |
| return null; | |
| } | |
| /** | |
| * Helper method to add an asset to the assets list. | |
| */ | |
| function addAsset(assets, asset) { | |
| if (asset) { | |
| assets.push(asset); | |
| } | |
| } | |
| /** | |
| * Produces a Native Title asset for the configuration given. | |
| */ | |
| function titleAsset(id, params, defaultLen) { | |
| if (params) { | |
| return { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| title: { | |
| len: params.len || defaultLen | |
| } | |
| }; | |
| } | |
| return null; | |
| } | |
| /** | |
| * Produces a Native Image asset for the configuration given. | |
| */ | |
| function imageAsset(id, params, type, defaultMinWidth, defaultMinHeight) { | |
| return params ? { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| img: { | |
| type: type, | |
| wmin: params.wmin || defaultMinWidth, | |
| hmin: params.hmin || defaultMinHeight | |
| } | |
| } : null; | |
| } | |
| /** | |
| * Produces a Native Data asset for the configuration given. | |
| */ | |
| function dataAsset(id, params, type, defaultLen) { | |
| return params ? { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| data: { | |
| type: type, | |
| len: params.len || defaultLen | |
| } | |
| } : null; | |
| } | |
| /** | |
| * Produces an OpenRTB site object. | |
| */ | |
| function site(bidderRequest) { | |
| var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.cp : '0'; | |
| var appParams = bidderRequest[0].params.app; | |
| if (!appParams) { | |
| return { | |
| publisher: { | |
| id: pubId.toString() | |
| }, | |
| ref: referrer(), | |
| page: (0, _utils.getTopWindowLocation)().href | |
| }; | |
| } | |
| return null; | |
| } | |
| /** | |
| * Produces an OpenRTB App object. | |
| */ | |
| function app(bidderRequest) { | |
| var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.cp : '0'; | |
| var appParams = bidderRequest[0].params.app; | |
| if (appParams) { | |
| return { | |
| publisher: { | |
| id: pubId.toString() | |
| }, | |
| bundle: appParams.bundle, | |
| storeurl: appParams.storeUrl, | |
| domain: appParams.domain | |
| }; | |
| } | |
| return null; | |
| } | |
| /** | |
| * Attempts to capture the referrer url. | |
| */ | |
| function referrer() { | |
| try { | |
| return window.top.document.referrer; | |
| } catch (e) { | |
| return document.referrer; | |
| } | |
| } | |
| /** | |
| * Produces an OpenRTB Device object. | |
| */ | |
| function device() { | |
| return { | |
| ua: navigator.userAgent, | |
| language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage | |
| }; | |
| } | |
| /** | |
| * Safely parses the input given. Returns null on | |
| * parsing failure. | |
| */ | |
| function parse(rawResponse) { | |
| try { | |
| if (rawResponse) { | |
| return JSON.parse(rawResponse); | |
| } | |
| } catch (ex) { | |
| (0, _utils.logError)('pulsepointLite.safeParse', 'ERROR', ex); | |
| } | |
| return null; | |
| } | |
| /** | |
| * Determines the AdSize for the slot. | |
| */ | |
| function adSize(slot) { | |
| if (slot.params.cf) { | |
| var size = slot.params.cf.toUpperCase().split('X'); | |
| var width = parseInt(slot.params.cw || size[0], 10); | |
| var height = parseInt(slot.params.ch || size[1], 10); | |
| return [width, height]; | |
| } | |
| return [1, 1]; | |
| } | |
| /** | |
| * Parses the native response from the Bid given. | |
| */ | |
| function nativeResponse(imp, bid) { | |
| if (imp['native']) { | |
| var nativeAd = parse(bid.adm); | |
| var keys = {}; | |
| if (nativeAd && nativeAd['native'] && nativeAd['native'].assets) { | |
| nativeAd['native'].assets.forEach(function (asset) { | |
| keys.title = asset.title ? asset.title.text : keys.title; | |
| keys.body = asset.data && asset.data.type === 2 ? asset.data.value : keys.body; | |
| keys.sponsoredBy = asset.data && asset.data.type === 1 ? asset.data.value : keys.sponsoredBy; | |
| keys.image = asset.img && asset.img.type === 3 ? asset.img.url : keys.image; | |
| keys.icon = asset.img && asset.img.type === 1 ? asset.img.url : keys.icon; | |
| }); | |
| if (nativeAd['native'].link) { | |
| keys.clickUrl = encodeURIComponent(nativeAd['native'].link.url); | |
| } | |
| keys.impressionTrackers = nativeAd['native'].imptrackers; | |
| return keys; | |
| } | |
| } | |
| return null; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 278: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[276]); | |
| pbjsChunk([36],{ | |
| /***/ 279: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(280); | |
| module.exports = __webpack_require__(281); | |
| /***/ }), | |
| /***/ 280: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = exports.QUANTCAST_TTL = exports.QUANTCAST_TEST_PUBLISHER = exports.QUANTCAST_NET_REVENUE = exports.QUANTCAST_CALLBACK_URL_TEST = exports.QUANTCAST_CALLBACK_URL = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'quantcast'; | |
| var DEFAULT_BID_FLOOR = 0.0000000001; | |
| var QUANTCAST_CALLBACK_URL = exports.QUANTCAST_CALLBACK_URL = 'global.qc.rtb.quantserve.com'; | |
| var QUANTCAST_CALLBACK_URL_TEST = exports.QUANTCAST_CALLBACK_URL_TEST = 's2s-canary.quantserve.com'; | |
| var QUANTCAST_NET_REVENUE = exports.QUANTCAST_NET_REVENUE = true; | |
| var QUANTCAST_TEST_PUBLISHER = exports.QUANTCAST_TEST_PUBLISHER = 'test-publisher'; | |
| var QUANTCAST_TTL = exports.QUANTCAST_TTL = 4; | |
| /** | |
| * The documentation for Prebid.js Adapter 1.0 can be found at link below, | |
| * http://prebid.org/dev-docs/bidder-adapter-1.html | |
| */ | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Verify the `AdUnits.bids` response with `true` for valid request and `false` | |
| * for invalid request. | |
| * | |
| * @param {object} bid | |
| * @return boolean `true` is this is a valid bid, and `false` otherwise | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (!bid) { | |
| return false; | |
| } | |
| if (bid.mediaType === 'video') { | |
| return false; | |
| } | |
| return true; | |
| }, | |
| /** | |
| * Make a server request when the page asks Prebid.js for bids from a list of | |
| * `BidRequests`. | |
| * | |
| * @param {BidRequest[]} bidRequests A non-empty list of bid requests which should be send to Quantcast server | |
| * @return ServerRequest information describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidRequests) { | |
| var bids = bidRequests || []; | |
| var referrer = utils.getTopWindowUrl(); | |
| var loc = utils.getTopWindowLocation(); | |
| var domain = loc.hostname; | |
| var publisherTagURL = void 0; | |
| var publisherTagURLTest = void 0; | |
| // Switch the callback URL to Quantcast Canary Endpoint for testing purpose | |
| // `//` is not used because we have different port setting at our end | |
| switch (window.location.protocol) { | |
| case 'https:': | |
| publisherTagURL = 'https://' + QUANTCAST_CALLBACK_URL + ':8443/qchb'; | |
| publisherTagURLTest = 'https://' + QUANTCAST_CALLBACK_URL_TEST + ':8443/qchb'; | |
| break; | |
| default: | |
| publisherTagURL = 'http://' + QUANTCAST_CALLBACK_URL + ':8080/qchb'; | |
| publisherTagURLTest = 'http://' + QUANTCAST_CALLBACK_URL_TEST + ':8080/qchb'; | |
| } | |
| var bidRequestsList = bids.map(function (bid) { | |
| var bidSizes = []; | |
| bid.sizes.forEach(function (size) { | |
| bidSizes.push({ | |
| width: size[0], | |
| height: size[1] | |
| }); | |
| }); | |
| // Request Data Format can be found at https://wiki.corp.qc/display/adinf/QCX | |
| var requestData = { | |
| publisherId: bid.params.publisherId, | |
| requestId: bid.bidId, | |
| imp: [{ | |
| banner: { | |
| battr: bid.params.battr, | |
| sizes: bidSizes | |
| }, | |
| placementCode: bid.placementCode, | |
| bidFloor: bid.params.bidFloor || DEFAULT_BID_FLOOR | |
| }], | |
| site: { | |
| page: loc.href, | |
| referrer: referrer, | |
| domain: domain | |
| }, | |
| bidId: bid.bidId | |
| }; | |
| var data = JSON.stringify(requestData); | |
| var url = bid.params.publisherId === QUANTCAST_TEST_PUBLISHER ? publisherTagURLTest : publisherTagURL; | |
| return { | |
| data: data, | |
| method: 'POST', | |
| url: url | |
| }; | |
| }); | |
| return bidRequestsList; | |
| }, | |
| /** | |
| * Function get called when the browser has received the response from Quantcast server. | |
| * The function parse the response and create a `bidResponse` object containing one/more bids. | |
| * Returns an empty array if no valid bids | |
| * | |
| * Response Data Format can be found at https://wiki.corp.qc/display/adinf/QCX | |
| * | |
| * @param {*} serverResponse A successful response from Quantcast server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| * | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| if (serverResponse === undefined) { | |
| utils.logError('Server Response is undefined'); | |
| return []; | |
| } | |
| var response = serverResponse['body']; | |
| if (response === undefined || !response.hasOwnProperty('bids') || utils.isEmpty(response.bids)) { | |
| utils.logError('Sub-optimal JSON received from Quantcast server'); | |
| return []; | |
| } | |
| var bidResponsesList = response.bids.map(function (bid) { | |
| var ad = bid.ad, | |
| cpm = bid.cpm, | |
| width = bid.width, | |
| height = bid.height, | |
| creativeId = bid.creativeId, | |
| currency = bid.currency; | |
| return { | |
| requestId: response.requestId, | |
| cpm: cpm, | |
| width: width, | |
| height: height, | |
| ad: ad, | |
| ttl: QUANTCAST_TTL, | |
| creativeId: creativeId, | |
| netRevenue: QUANTCAST_NET_REVENUE, | |
| currency: currency | |
| }; | |
| }); | |
| return bidResponsesList; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 281: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[279]); | |
| pbjsChunk([35],{ | |
| /***/ 282: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(283); | |
| module.exports = __webpack_require__(284); | |
| /***/ }), | |
| /***/ 283: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'quantum'; | |
| var ENDPOINT_URL = '//s.sspqns.com/hb'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['quantx', 'qtx'], // short code | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.NATIVE], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params && bid.params.placementId); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(bidRequests) { | |
| return bidRequests.map(function (bid) { | |
| var qtxRequest = {}; | |
| var bidId = ''; | |
| var params = bid.params; | |
| var placementId = params.placementId; | |
| var devEnpoint = false; | |
| if (params.useDev && params.useDev === '1') { | |
| devEnpoint = '//sdev.sspqns.com/hb'; | |
| } | |
| var renderMode = 'native'; | |
| for (var i = 0; i < bid.sizes.length; i++) { | |
| if (bid.sizes[i][0] > 1 && bid.sizes[i][1] > 1) { | |
| renderMode = 'banner'; | |
| break; | |
| } | |
| } | |
| var mediaType = bid.mediaType === 'native' || utils.deepAccess(bid, 'mediaTypes.native') ? 'native' : 'banner'; | |
| if (mediaType === 'native') { | |
| renderMode = 'native'; | |
| } | |
| if (!bidId) { | |
| bidId = bid.bidId; | |
| } | |
| qtxRequest.auid = placementId; | |
| var url = devEnpoint || ENDPOINT_URL; | |
| return { | |
| method: 'GET', | |
| bidId: bidId, | |
| sizes: bid.sizes, | |
| mediaType: mediaType, | |
| renderMode: renderMode, | |
| url: url, | |
| 'data': qtxRequest | |
| }; | |
| }); | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {ServerResponse} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var serverBody = serverResponse.body; | |
| var bidResponses = []; | |
| var responseCPM = void 0; | |
| var bid = {}; | |
| var id = bidRequest.bidId; | |
| if (serverBody.price && serverBody.price !== 0) { | |
| responseCPM = parseFloat(serverBody.price); | |
| bid.creativeId = serverBody.creative_id || '0'; | |
| bid.cpm = responseCPM; | |
| bid.requestId = bidRequest.bidId; | |
| bid.width = 1; | |
| bid.height = 1; | |
| bid.ttl = 200; | |
| bid.netRevenue = true; | |
| bid.currency = 'USD'; | |
| if (serverBody.native) { | |
| bid.native = serverBody.native; | |
| } | |
| if (serverBody.cobj) { | |
| bid.cobj = serverBody.cobj; | |
| } | |
| bid.nurl = serverBody.nurl; | |
| bid.sync = serverBody.sync; | |
| if (bidRequest.renderMode && bidRequest.renderMode === 'banner') { | |
| bid.width = 300; | |
| bid.height = 225; | |
| if (serverBody.native) { | |
| var adAssetsUrl = '//cdn.elasticad.net/native/serve/js/quantx/quantumAd/'; | |
| var assets = serverBody.native.assets; | |
| var link = serverBody.native.link; | |
| var trackers = []; | |
| if (serverBody.native.imptrackers) { | |
| trackers = serverBody.native.imptrackers; | |
| } | |
| var jstracker = ''; | |
| if (serverBody.native.jstracker) { | |
| jstracker = serverBody.native.jstracker; | |
| } | |
| if (serverBody.nurl) { | |
| trackers.push(serverBody.nurl); | |
| } | |
| var ad = {}; | |
| ad['trackers'] = trackers; | |
| ad['jstrackers'] = jstracker; | |
| for (var i = 0; i < assets.length; i++) { | |
| var asset = assets[i]; | |
| switch (asset['id']) { | |
| case 1: | |
| ad['title'] = asset['title']['text']; | |
| break; | |
| case 2: | |
| ad['sponsor_logo'] = asset['img']['url']; | |
| break; | |
| case 3: | |
| ad['content'] = asset['data']['value']; | |
| break; | |
| case 4: | |
| ad['main_image'] = asset['img']['url']; | |
| break; | |
| case 6: | |
| ad['teaser_type'] = 'vast'; | |
| ad['video_url'] = asset['video']['vasttag']; | |
| break; | |
| case 10: | |
| ad['sponsor_name'] = asset['data']['value']; | |
| break; | |
| case 2001: | |
| ad['expanded_content_type'] = 'embed'; | |
| ad['expanded_summary'] = asset['data']['value']; | |
| break; | |
| case 2002: | |
| ad['expanded_content_type'] = 'vast'; | |
| ad['expanded_summary'] = asset['data']['value']; | |
| break; | |
| case 2003: | |
| ad['sponsor_url'] = asset['data']['value']; | |
| break; | |
| case 2004: | |
| // prism | |
| ad['content_type'] = 'prism'; | |
| break; | |
| case 2005: | |
| // internal_landing_page | |
| ad['content_type'] = 'internal_landing_page'; | |
| ad['internal_content_link'] = asset['data']['value']; | |
| break; | |
| case 2006: | |
| // teaser as vast | |
| ad['teaser_type'] = 'vast'; | |
| ad['video_url'] = asset['data']['value']; | |
| break; | |
| case 2007: | |
| ad['autoexpand_content_type'] = asset['data']['value']; | |
| break; | |
| case 2022: | |
| // content page | |
| ad['content_type'] = 'full_text'; | |
| ad['full_text'] = asset['data']['value']; | |
| break; | |
| } | |
| } | |
| ad['action_url'] = link.url; | |
| if (!ad['sponsor_url']) { | |
| ad['sponsor_url'] = ad['action_url']; | |
| } | |
| ad['clicktrackers'] = []; | |
| if (link.clicktrackers) { | |
| ad['clicktrackers'] = link.clicktrackers; | |
| } | |
| ad['main_image'] = '//resize-ssp.elasticad.net/scalecrop-290x130/' + window.btoa(ad['main_image']) + '/external'; | |
| bid.ad = '<div id="ead_' + id + '\">' + '<div class="ad_container ead_' + id + '" style="clear: both; display:inline-block;width:100%">' + ' <div class="image_content">' + ' <a href="' + ad['action_url'] + '" class="ea_expand" target="_blank"><img src="' + ad['main_image'] + '" class="ea_image ead_image">' + ' </a>' + ' </div>' + ' <div class="ead_content"><a href="' + ad['action_url'] + '" class="ea_expand" style="text-decoration: none" target="_blank"><h2 style="margin:0px;">' + ad['title'] + '</h2></a>' + ' <p class="ea_summary">' + ad['content'] + ' </p></div>' + ' <div style="text-align:right;" class="ea_hide_brand_logo ea_hide_brand_name">' + ' <p style="margin:0;"><span class="ea_creative_var_label">Sponsored by</span>' + ' <a href="' + ad['sponsor_url'] + '" class="ea_link" target="_blank" style="display:inline;" target="_blank"><img src="' + ad['sponsor_logo'] + '" class="ea_image" style="vertical-align:middle;"></a>' + ' </p>' + ' </div>' + '</div>' + '<script type="application/javascript">var eanAD = ' + JSON.stringify(ad) + ';</script>' + '<script src="' + adAssetsUrl + 'qad.js" type="application/javascript"></script>' + '<link rel="stylesheet" href="' + adAssetsUrl + 'qad.css">' + '</div>'; | |
| } | |
| } else { | |
| // native | |
| if (bidRequest.mediaType === 'native') { | |
| if (serverBody.native) { | |
| var _assets = serverBody.native.assets; | |
| var _link = serverBody.native.link; | |
| var _trackers = []; | |
| if (serverBody.native.imptrackers) { | |
| _trackers = serverBody.native.imptrackers; | |
| } | |
| if (serverBody.nurl) { | |
| _trackers.push(serverBody.nurl); | |
| } | |
| var native = {}; | |
| for (var _i = 0; _i < _assets.length; _i++) { | |
| var _asset = _assets[_i]; | |
| switch (_asset['id']) { | |
| case 1: | |
| native.title = _asset['title']['text']; | |
| break; | |
| case 2: | |
| native.icon = _asset['img']; | |
| break; | |
| case 3: | |
| native.body = _asset['data']['value']; | |
| break; | |
| case 4: | |
| native.image = _asset['img']; | |
| break; | |
| case 10: | |
| native.sponsoredBy = _asset['data']['value']; | |
| break; | |
| } | |
| } | |
| native.cta = 'read more'; | |
| if (serverBody.language) { | |
| native.cta = 'read more'; | |
| } | |
| native.clickUrl = _link.url; | |
| native.impressionTrackers = _trackers; | |
| if (_link.clicktrackers) { | |
| native.clickTrackers = _link.clicktrackers; | |
| } | |
| bid.qtx_native = utils.deepClone(serverBody.native); | |
| bid.native = native; | |
| } | |
| } | |
| } | |
| bidResponses.push(bid); | |
| } | |
| return bidResponses; | |
| }, | |
| /** | |
| * Register the user sync pixels which should be dropped after the auction. | |
| * | |
| * @param {SyncOptions} syncOptions Which user syncs are allowed? | |
| * @param {ServerResponse[]} serverResponses List of server's responses. | |
| * @return {UserSync[]} The user syncs which should be dropped. | |
| */ | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| var syncs = []; | |
| if (syncOptions.iframeEnabled) { | |
| syncs.push({ | |
| type: 'iframe', | |
| url: '//acdn.adnxs.com/ib/static/usersync/v3/async_usersync.html' | |
| }); | |
| } | |
| if (syncOptions.pixelEnabled && serverResponses.length > 0) { | |
| syncs.push({ | |
| type: 'image', | |
| url: serverResponses[0].body.sync[0] | |
| }); | |
| } | |
| return syncs; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 284: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[282]); | |
| pbjsChunk([34],{ | |
| /***/ 285: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(286); | |
| module.exports = __webpack_require__(287); | |
| /***/ }), | |
| /***/ 286: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = exports.ENDPOINT = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var _bidderFactory = __webpack_require__(1); | |
| var ENDPOINT = exports.ENDPOINT = '//app.readpeak.com/header/prebid'; | |
| var NATIVE_DEFAULTS = { | |
| TITLE_LEN: 70, | |
| DESCR_LEN: 120, | |
| SPONSORED_BY_LEN: 50, | |
| IMG_MIN: 150, | |
| ICON_MIN: 50, | |
| CTA_LEN: 50 | |
| }; | |
| var BIDDER_CODE = 'readpeak'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: ['native'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.publisherId && bid.nativeParams); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| var request = { | |
| id: bidRequests[0].bidderRequestId, | |
| imp: bidRequests.map(function (slot) { | |
| return impression(slot); | |
| }).filter(function (imp) { | |
| return imp.native != null; | |
| }), | |
| site: site(bidRequests), | |
| app: app(bidRequests), | |
| device: device(), | |
| isPrebid: true | |
| }; | |
| return { | |
| method: 'POST', | |
| url: ENDPOINT, | |
| data: JSON.stringify(request) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(response, request) { | |
| return bidResponseAvailable(request, response); | |
| } | |
| }; | |
| function bidResponseAvailable(bidRequest, bidResponse) { | |
| var idToImpMap = {}; | |
| var idToBidMap = {}; | |
| if (!bidResponse['body']) { | |
| return []; | |
| } | |
| bidResponse = bidResponse.body; | |
| parse(bidRequest.data).imp.forEach(function (imp) { | |
| idToImpMap[imp.id] = imp; | |
| }); | |
| if (bidResponse) { | |
| bidResponse.seatbid.forEach(function (seatBid) { | |
| return seatBid.bid.forEach(function (bid) { | |
| idToBidMap[bid.impid] = bid; | |
| }); | |
| }); | |
| } | |
| var bids = []; | |
| Object.keys(idToImpMap).forEach(function (id) { | |
| if (idToBidMap[id]) { | |
| var bid = { | |
| requestId: id, | |
| cpm: idToBidMap[id].price, | |
| creativeId: idToBidMap[id].crid, | |
| ttl: 300, | |
| netRevenue: true, | |
| mediaType: 'native', | |
| currency: bidResponse.cur, | |
| native: nativeResponse(idToImpMap[id], idToBidMap[id]) | |
| }; | |
| bids.push(bid); | |
| } | |
| }); | |
| return bids; | |
| } | |
| function impression(slot) { | |
| return { | |
| id: slot.bidId, | |
| native: nativeImpression(slot), | |
| bidfloor: slot.params.bidfloor || 0, | |
| bidfloorcur: slot.params.bidfloorcur || 'USD' | |
| }; | |
| } | |
| function nativeImpression(slot) { | |
| if (slot.nativeParams) { | |
| var assets = []; | |
| addAsset(assets, titleAsset(1, slot.nativeParams.title, NATIVE_DEFAULTS.TITLE_LEN)); | |
| addAsset(assets, imageAsset(2, slot.nativeParams.image, 3, NATIVE_DEFAULTS.IMG_MIN, NATIVE_DEFAULTS.IMG_MIN)); | |
| addAsset(assets, dataAsset(3, slot.nativeParams.sponsoredBy, 1, NATIVE_DEFAULTS.SPONSORED_BY_LEN)); | |
| addAsset(assets, dataAsset(4, slot.nativeParams.body, 2, NATIVE_DEFAULTS.DESCR_LEN)); | |
| addAsset(assets, dataAsset(5, slot.nativeParams.cta, 12, NATIVE_DEFAULTS.CTA_LEN)); | |
| return { | |
| request: JSON.stringify({ assets: assets }), | |
| ver: '1.1' | |
| }; | |
| } | |
| return null; | |
| } | |
| function addAsset(assets, asset) { | |
| if (asset) { | |
| assets.push(asset); | |
| } | |
| } | |
| function titleAsset(id, params, defaultLen) { | |
| if (params) { | |
| return { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| title: { | |
| len: params.len || defaultLen | |
| } | |
| }; | |
| } | |
| return null; | |
| } | |
| function imageAsset(id, params, type, defaultMinWidth, defaultMinHeight) { | |
| return params ? { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| img: { | |
| type: type, | |
| wmin: params.wmin || defaultMinWidth, | |
| hmin: params.hmin || defaultMinHeight | |
| } | |
| } : null; | |
| } | |
| function dataAsset(id, params, type, defaultLen) { | |
| return params ? { | |
| id: id, | |
| required: params.required ? 1 : 0, | |
| data: { | |
| type: type, | |
| len: params.len || defaultLen | |
| } | |
| } : null; | |
| } | |
| function site(bidderRequest) { | |
| var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.publisherId : '0'; | |
| var appParams = bidderRequest[0].params.app; | |
| if (!appParams) { | |
| return { | |
| publisher: { | |
| id: pubId.toString() | |
| }, | |
| id: pubId.toString(), | |
| ref: referrer(), | |
| page: (0, _utils.getTopWindowLocation)().href, | |
| domain: (0, _utils.getTopWindowLocation)().hostname | |
| }; | |
| } | |
| return null; | |
| } | |
| function app(bidderRequest) { | |
| var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.publisherId : '0'; | |
| var appParams = bidderRequest[0].params.app; | |
| if (appParams) { | |
| return { | |
| publisher: { | |
| id: pubId.toString() | |
| }, | |
| bundle: appParams.bundle, | |
| storeurl: appParams.storeUrl, | |
| domain: appParams.domain | |
| }; | |
| } | |
| return null; | |
| } | |
| function referrer() { | |
| try { | |
| return window.top.document.referrer; | |
| } catch (e) { | |
| return document.referrer; | |
| } | |
| } | |
| function device() { | |
| return { | |
| ua: navigator.userAgent, | |
| language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage | |
| }; | |
| } | |
| function parse(rawResponse) { | |
| try { | |
| if (rawResponse) { | |
| if ((typeof rawResponse === 'undefined' ? 'undefined' : _typeof(rawResponse)) === 'object') { | |
| return rawResponse; | |
| } else { | |
| return JSON.parse(rawResponse); | |
| } | |
| } | |
| } catch (ex) { | |
| (0, _utils.logError)('readpeakBidAdapter.safeParse', 'ERROR', ex); | |
| } | |
| return null; | |
| } | |
| function nativeResponse(imp, bid) { | |
| if (imp && imp['native']) { | |
| var nativeAd = parse(bid.adm); | |
| var keys = {}; | |
| if (nativeAd && nativeAd.assets) { | |
| nativeAd.assets.forEach(function (asset) { | |
| keys.title = asset.title ? asset.title.text : keys.title; | |
| keys.body = asset.data && asset.id === 4 ? asset.data.value : keys.body; | |
| keys.sponsoredBy = asset.data && asset.id === 3 ? asset.data.value : keys.sponsoredBy; | |
| keys.image = asset.img && asset.id === 2 ? asset.img.url : keys.image; | |
| keys.cta = asset.data && asset.id === 5 ? asset.data.value : keys.cta; | |
| }); | |
| if (nativeAd.link) { | |
| keys.clickUrl = encodeURIComponent(nativeAd.link.url); | |
| } | |
| keys.impressionTrackers = nativeAd.imptrackers; | |
| return keys; | |
| } | |
| } | |
| return null; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 287: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[285]); | |
| pbjsChunk([0],{ | |
| /***/ 288: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(289); | |
| module.exports = __webpack_require__(290); | |
| /***/ }), | |
| /***/ 289: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| var _AnalyticsAdapter = __webpack_require__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _constants = __webpack_require__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var utils = __webpack_require__(0); // RealVu Analytics Adapter | |
| var realvuAnalyticsAdapter = (0, _AnalyticsAdapter2['default'])({ | |
| global: 'realvuAnalytics', | |
| handler: 'on', | |
| analyticsType: 'bundle' | |
| }); | |
| window.top1 = window; | |
| try { | |
| var wnd = window; | |
| while (window.top1 != top && typeof wnd.document != 'undefined') { | |
| window.top1 = wnd; | |
| wnd = wnd.parent; | |
| } | |
| } catch (e) { | |
| /* continue regardless of error */ | |
| } | |
| window.top1.realvu_aa_fifo = window.top1.realvu_aa_fifo || []; | |
| window.top1.realvu_aa = window.top1.realvu_aa || { | |
| ads: [], | |
| x1: 0, | |
| y1: 0, | |
| x2: 0, | |
| y2: 0, | |
| t0: new Date(), | |
| nn: 0, | |
| frm: false, // check first if we are inside other domain iframe | |
| msg: [], | |
| foc: !window.top1.document.hidden, // 1-in, 0-out of focus | |
| c: '', // owner id | |
| sr: '', // | |
| beacons: [], // array of beacons to collect while 'conf' is not responded | |
| init: function init() { | |
| var z = this; | |
| var u = navigator.userAgent; | |
| z.device = u.match(/iPad|Tablet/gi) ? 'tablet' : u.match(/iPhone|iPod|Android|Opera Mini|IEMobile/gi) ? 'mobile' : 'desktop'; | |
| if (typeof z.len == 'undefined') z.len = 0; // check, meybe too much, just make it len:0, | |
| z.ie = navigator.appVersion.match(/MSIE/); | |
| z.saf = u.match(/Safari/) && !u.match(/Chrome/); | |
| z.ff = u.match(/Firefox/i); | |
| z.cr = u.match(/Chrome/); | |
| z.ope = window.opera; | |
| z.fr = 0; | |
| if (window.top1 != top) { | |
| z.fr = 2; | |
| if (typeof window.top1.$sf != 'undefined') { | |
| z.fr = 1; | |
| } | |
| } | |
| z.add_evt(window.top1, 'focus', function () { | |
| window.top1.realvu_aa.foc = 1; /* window.top1.realvu_aa.log('focus',-1); */ | |
| }); | |
| // z.add_evt(window.top1, "scroll", function(){window.top1.realvu_aa.foc=1;window.top1.realvu_aa.log('scroll focus',-1);}); | |
| z.add_evt(window.top1, 'blur', function () { | |
| window.top1.realvu_aa.foc = 0; /* window.top1.realvu_aa.log('blur',-1); */ | |
| }); | |
| // + http://www.w3.org/TR/page-visibility/ | |
| z.add_evt(window.top1.document, 'blur', function () { | |
| window.top1.realvu_aa.foc = 0; /* window.top1.realvu_aa.log('blur',-1); */ | |
| }); | |
| z.add_evt(window.top1, 'visibilitychange', function () { | |
| window.top1.realvu_aa.foc = !window.top1.document.hidden; | |
| /* window.top1.realvu_aa.log('vis-ch '+window.top1.realvu_aa.foc,-1); */ | |
| }); | |
| // - | |
| z.doLog = window.top1.location.search.match(/boost_log/) || document.referrer.match(/boost_log/) ? 1 : 0; | |
| if (z.doLog) { | |
| window.setTimeout(z.scr(window.top1.location.protocol + '//ac.realvu.net/realvu_aa_viz.js'), 500); | |
| } | |
| }, | |
| add_evt: function add_evt(elem, evtType, func) { | |
| if (elem.addEventListener) { | |
| elem.addEventListener(evtType, func, true); | |
| } else if (elem.attachEvent) { | |
| elem.attachEvent('on' + evtType, func); | |
| } else { | |
| elem['on' + evtType] = func; | |
| } | |
| }, | |
| update: function update() { | |
| var z = this; | |
| var de = window.top1.document.documentElement; | |
| z.x1 = window.top1.pageXOffset ? window.top1.pageXOffset : de.scrollLeft; | |
| z.y1 = window.top1.pageYOffset ? window.top1.pageYOffset : de.scrollTop; | |
| var w1 = window.top1.innerWidth ? window.top1.innerWidth : de.clientWidth; | |
| var h1 = window.top1.innerHeight ? window.top1.innerHeight : de.clientHeight; | |
| z.x2 = z.x1 + w1; | |
| z.y2 = z.y1 + h1; | |
| }, | |
| brd: function brd(s, p) { | |
| // return a board Width, s-element, p={Top,Right,Bottom, Left} | |
| var u = void 0; | |
| if (window.getComputedStyle) u = window.getComputedStyle(s, null);else u = s.style; | |
| var a = u['border' + p + 'Width']; | |
| return parseInt(a.length > 2 ? a.slice(0, -2) : 0); | |
| }, | |
| padd: function padd(s, p) { | |
| // return a board Width, s-element, p={Top,Right,Bottom, Left} | |
| var u = void 0; | |
| if (window.getComputedStyle) u = window.getComputedStyle(s, null);else u = s.style; | |
| var a = u['padding' + p]; | |
| return parseInt(a.length > 2 ? a.slice(0, -2) : 0); | |
| }, | |
| viz_area: function viz_area(x1, x2, y1, y2) { | |
| // coords of Ad | |
| if (this.fr == 1) { | |
| try { | |
| var iv = Math.round(100 * window.top1.$sf.ext.geom().self.iv); | |
| return iv; | |
| } catch (e) { | |
| /* continue regardless of error */ | |
| } | |
| } | |
| var xv1 = Math.max(x1, this.x1); | |
| var yv1 = Math.max(y1, this.y1); | |
| var xv2 = Math.min(x2, this.x2); | |
| var yv2 = Math.min(y2, this.y2); | |
| var A = Math.round(100 * ((xv2 - xv1) * (yv2 - yv1)) / ((x2 - x1) * (y2 - y1))); | |
| return A > 0 ? A : 0; | |
| }, | |
| viz_dist: function viz_dist(x1, x2, y1, y2) { | |
| // coords of Ad | |
| var d = Math.max(0, this.x1 - x2, x1 - this.x2) + Math.max(0, this.y1 - y2, y1 - this.y2); | |
| return d; | |
| }, | |
| track: function track(a, f, params) { | |
| var z = this; | |
| var s1 = z.tru(a, f) + params; | |
| if (f == 'conf') { | |
| z.scr(s1, a); | |
| z.log(' <a href=\'' + s1 + '\'>' + f + '</a>', a.num); | |
| } else { | |
| var bk = { | |
| s1: s1, | |
| a: a, | |
| f: f | |
| }; | |
| z.beacons.push(bk); | |
| } | |
| }, | |
| send_track: function send_track() { | |
| var z = this; | |
| if (z.sr >= 'a') { | |
| // conf, send beacons | |
| var bk = z.beacons.shift(); | |
| while (typeof bk != 'undefined') { | |
| bk.s1 = bk.s1.replace(/_sr=0*_/, '_sr=' + z.sr + '_'); | |
| z.log(' ' + bk.a.riff + ' ' + bk.a.unit_id + /* " "+pin.mode+ */' ' + bk.a.w + 'x' + bk.a.h + '@' + bk.a.x + ',' + bk.a.y + ' <a href=\'' + bk.s1 + '\'>' + bk.f + '</a>', bk.a.num); | |
| if (bk.a.rnd < Math.pow(10, 1 - (z.sr.charCodeAt(0) & 7))) { | |
| z.scr(bk.s1, bk.a); | |
| } | |
| bk = z.beacons.shift(); | |
| } | |
| } | |
| }, | |
| scr: function scr(s1, a) { | |
| var st = document.createElement('script'); | |
| st.async = true; | |
| st.type = 'text/javascript'; | |
| st.src = s1; | |
| if (a && a.dv0 != null) { | |
| a.dv0.appendChild(st); | |
| } else { | |
| var x = document.getElementsByTagName('script')[0]; | |
| x.parentNode.insertBefore(st, x); | |
| } | |
| }, | |
| tru: function tru(a, f) { | |
| var pin = a.pins[0]; | |
| var s2 = '//ac.realvu.net/flip/3/c=' + pin.partner_id + '_f=' + f + '_r=' + a.riff + '_s=' + a.w + 'x' + a.h; | |
| if (a.p) s2 += '_p=' + a.p; | |
| s2 += '_ps=' + this.enc(a.unit_id) + // 08-Jun-15 - _p= is replaced with _ps= - p-number, ps-string | |
| '_dv=' + this.device + | |
| // + '_a=' + this.enc(a.a) | |
| '_d=' + pin.mode + '_sr=' + this.sr + '_h=' + this.enc(a.ru) + '?'; | |
| return s2.replace(/%/g, '!'); | |
| }, | |
| enc: function enc(s1) { | |
| // return escape(s1).replace(/[0-9a-f]{5,}/gi,'RANDOM').replace(/\*/g, "%2A").replace(/_/g, "%5F").replace(/\+/g, | |
| return escape(s1).replace(/\*/g, '%2A').replace(/_/g, '%5F').replace(/\+/g, '%2B').replace(/\./g, '%2E').replace(/\x2F/g, '%2F'); | |
| }, | |
| findPosG: function findPosG(adi) { | |
| var t = this; | |
| var ad = adi; | |
| var xp = 0; | |
| var yp = 0; | |
| var dc = adi.ownerDocument; | |
| var wnd = dc.defaultView || dc.parentWindow; | |
| try { | |
| while (ad != null && typeof ad != 'undefined') { | |
| if (ad.getBoundingClientRect) { | |
| // Internet Explorer, Firefox 3+, Google Chrome, Opera 9.5+, Safari 4+ | |
| var r = ad.getBoundingClientRect(); | |
| xp += r.left; // +sL; | |
| yp += r.top; // +sT; | |
| if (wnd == window.top1) { | |
| xp += t.x1; | |
| yp += t.y1; | |
| } | |
| } else { | |
| if (ad.tagName == 'IFRAME') { | |
| xp += t.brd(ad, 'Left'); | |
| yp += t.brd(ad, 'Top'); | |
| } | |
| xp += ad.offsetLeft; | |
| yp += ad.offsetTop; | |
| var op = ad.offsetParent; | |
| var pn = ad.parentNode; | |
| var opf = ad; | |
| while (opf != null) { | |
| var cs = window.getComputedStyle(opf, null); | |
| if (cs.position == 'fixed') { | |
| if (cs.top) yp += parseInt(cs.top) + this.y1; | |
| } | |
| if (opf == op) break; | |
| opf = opf.parentNode; | |
| } | |
| while (op != null && typeof op != 'undefined') { | |
| xp += op.offsetLeft; | |
| yp += op.offsetTop; | |
| var ptn = op.tagName; | |
| if (t.cr || t.saf || t.ff && ptn == 'TD') { | |
| xp += t.brd(op, 'Left'); | |
| yp += t.brd(op, 'Top'); | |
| } | |
| if (ad.tagName != 'IFRAME' && op != document.body && op != document.documentElement) { | |
| xp -= op.scrollLeft; | |
| yp -= op.scrollTop; | |
| } | |
| if (!t.ie) { | |
| while (op != pn && pn != null) { | |
| xp -= pn.scrollLeft; | |
| yp -= pn.scrollTop; | |
| if (t.ff_o) { | |
| xp += t.brd(pn, 'Left'); | |
| yp += t.brd(pn, 'Top'); | |
| } | |
| pn = pn.parentNode; | |
| } | |
| } | |
| pn = pn.parentNode; | |
| op = op.offsetParent; | |
| } | |
| } | |
| if (this.fr) break; // inside different domain iframe or sf | |
| ad = wnd.frameElement; // in case Ad is allocated inside iframe here we go up | |
| wnd = wnd.parent; | |
| } | |
| } catch (e) { | |
| /* continue regardless of error */ | |
| } | |
| var q = { | |
| 'x': Math.round(xp), | |
| 'y': Math.round(yp) | |
| }; | |
| return q; | |
| }, | |
| poll: function poll() { | |
| var fifo = window.top1.realvu_aa_fifo; | |
| while (fifo.length > 0) { | |
| fifo.shift()(); | |
| } | |
| var z = this; | |
| z.update(); | |
| var now = new Date(); | |
| if (typeof z.ptm == 'undefined') { | |
| z.ptm = now; | |
| } | |
| var dvz = now - z.ptm; | |
| z.ptm = now; | |
| for (var i = 0; i < z.len; i++) { | |
| var a = z.ads[i]; | |
| var restored = false; | |
| if (a.div == null) { | |
| // ad unit is not found yet | |
| var adobj = document.getElementById(a.pins[0].unit_id); | |
| if (adobj == null) { | |
| restored = z.readPos(a); | |
| if (!restored) continue; // do nothing if not found | |
| } else { | |
| z.bind_obj(a, adobj); | |
| z.log('{m}"' + a.unit_id + '" is bound', a.num); | |
| } | |
| } | |
| if (!restored) { | |
| a.target = z.questA(a.div); | |
| var target = a.target !== null ? a.target : a.div; | |
| a.box.w = Math.max(target.offsetWidth, a.w); | |
| a.box.h = Math.max(target.offsetHeight, a.h); | |
| var q = z.findPosG(target); | |
| var pad = {}; | |
| pad.t = z.padd(target, 'Top'); | |
| pad.l = z.padd(target, 'Left'); | |
| pad.r = z.padd(target, 'Right'); | |
| pad.b = z.padd(target, 'Bottom'); | |
| var ax = q.x + pad.l; | |
| var ay = q.y + pad.t; | |
| a.box.x = ax; | |
| a.box.y = ay; | |
| if (a.box.w > a.w && a.box.w > 1) { | |
| ax += (a.box.w - a.w - pad.l - pad.r) / 2; | |
| } | |
| if (a.box.h > a.h && a.box.h > 1) { | |
| ay += (a.box.h - a.h - pad.t - pad.b) / 2; | |
| } | |
| if (ax > 0 && ay > 0 && (a.x != ax || a.y != ay)) { | |
| a.x = ax; | |
| a.y = ay; | |
| z.writePos(a); | |
| } | |
| } | |
| var vtr = a.box.w * a.box.h < 242500 ? 49 : 29; // treashfold more then 49% and more then 29% for "oversized" | |
| if (a.pins[0].edge) { | |
| vtr = a.pins[0].edge - 1; // override default edge 50% (>49) | |
| } | |
| a.vz = z.viz_area(a.box.x, a.box.x + a.box.w, a.box.y, a.box.y + a.box.h); | |
| a.r = z.fr > 1 ? 'frame' : a.vz > vtr && z.foc ? 'yes' : 'no'; // f-frame, y-yes in view,n-not in view | |
| if (a.y < 0) { | |
| a.r = 'out'; // if the unit intentionaly moved out, count it as out. | |
| } | |
| if (a.vz > vtr && z.foc) { | |
| a.vt += dvz; // real dt counter in milliseconds, because of poll() can be called irregularly | |
| a.vtu += dvz; | |
| } | |
| // now process every pin | |
| var plen = a.pins.length; | |
| for (var j = 0; j < plen; j++) { | |
| var pin = a.pins[j]; | |
| if (pin.state <= 1) { | |
| var dist = z.viz_dist(a.x, a.x + a.w, a.y, a.y + a.h); | |
| var near = pin.dist != null && dist <= pin.dist; | |
| // apply "near" rule for ad call only | |
| a.r = z.fr > 1 ? 'frame' : a.vz > vtr && z.foc ? 'yes' : 'no'; | |
| if (near && a.r == 'no') { | |
| a.r = 'yes'; | |
| } | |
| if (a.riff === '') { | |
| a.riff = a.r; | |
| var vr_score = z.score(a, 'v:r'); | |
| if (vr_score != null) { | |
| if (a.r == 'no' && vr_score > 75) { | |
| a.riff = 'yes'; | |
| } | |
| } | |
| var vv0_score = z.score(a, 'v:v0'); | |
| if (vv0_score != null) { | |
| if (a.r == 'yes' && vv0_score < 30 + 25 * Math.random()) { | |
| a.riff = 'no'; | |
| } | |
| } | |
| } | |
| if (pin.mode == 'kvp' || pin.mode == 'tx2' || (a.vz > vtr || near) && (pin.mode == 'in-view' || pin.mode == 'video')) { | |
| z.show(a, pin); // in-view or flip show immediately if initial realvu=yes, or delay is over | |
| } | |
| } | |
| if (pin.state == 2) { | |
| a.target = z.questA(a.div); | |
| if (a.target != null) { | |
| pin.state = 3; | |
| dvz = 0; | |
| a.vt = 0; | |
| // @if NODE_ENV='debug' | |
| var _now = new Date(); | |
| var msg = (_now.getTime() - time0) / 1000 + ' RENDERED ' + a.unit_id; | |
| utils.logMessage(msg); | |
| // @endif | |
| var rpt = z.bids_rpt(a, true); | |
| z.track(a, 'rend', rpt); | |
| z.incrMem(a, 'r', 'v:r'); | |
| } | |
| } | |
| if (pin.state > 2) { | |
| var tmin = pin.mode == 'video' ? 2E3 : 1E3; // mrc min view time | |
| if (a.vz > vtr) { | |
| pin.vt += dvz; // real dt counter in milliseconds, because of poll() can be called irregularly | |
| if (pin.state == 3) { | |
| pin.state = 4; | |
| z.incrMem(a, 'r', 'v:v0'); | |
| } | |
| if (pin.state == 4 && pin.vt >= tmin) { | |
| pin.state = 5; | |
| var _rpt = z.bids_rpt(a, true); | |
| z.track(a, 'view', _rpt); | |
| z.incrMem(a, 'v', 'v:r'); | |
| z.incrMem(a, 'v', 'v:v0'); | |
| } | |
| if (pin.state == 5 && pin.vt >= 5 * tmin) { | |
| pin.state = 6; | |
| var _rpt2 = z.bids_rpt(a, true); | |
| z.track(a, 'view2', _rpt2); | |
| } | |
| } else if (pin.vt < tmin) { | |
| pin.vt = 0; // reset to track continuous 1 sec | |
| } | |
| } | |
| if (pin.state >= 2 && pin.mode === 'tx2' && (a.vtu > pin.rotate || pin.delay > 0 && a.vtu > pin.delay && a.riff === 'no' && a.ncall < 2) && pin.tx2n > 0) { | |
| // flip or rotate | |
| pin.tx2n--; | |
| pin.state = 1; | |
| a.vtu = 0; | |
| a.target = null; | |
| } | |
| } | |
| } | |
| this.send_track(); | |
| }, | |
| questA: function questA(a) { | |
| // look for the visible object of ad_sizes size | |
| // returns the object or null | |
| if (a == null) return a; | |
| if (a.nodeType == Node.TEXT_NODE) { | |
| var dc = a.ownerDocument; | |
| var _wnd = dc.defaultView || dc.parentWindow; | |
| var par = a.parentNode; | |
| if (_wnd == _wnd.top) { | |
| return par; | |
| } else { | |
| return par.offsetParent; | |
| } | |
| } | |
| var not_friendly = false; | |
| var ain = null; | |
| var tn = a.tagName; | |
| if (tn == 'HEAD' || tn == 'SCRIPT') return null; | |
| if (tn == 'IFRAME') { | |
| ain = this.doc(a); | |
| if (ain == null) { | |
| not_friendly = true; | |
| } else { | |
| a = ain; | |
| tn = a.tagName; | |
| } | |
| } | |
| if (not_friendly || tn == 'OBJECT' || tn == 'IMG' || tn == 'EMBED' || tn == 'SVG' || tn == 'CANVAS' || tn == 'DIV' && a.style.backgroundImage) { | |
| var w1 = a.offsetWidth; | |
| var h1 = a.offsetHeight; | |
| if (w1 > 33 && h1 > 33 && a.style.display != 'none') return a; | |
| } | |
| if (a.hasChildNodes()) { | |
| var b = a.firstChild; | |
| while (b != null) { | |
| var c = this.questA(b); | |
| if (c != null) return c; | |
| b = b.nextSibling; | |
| } | |
| } | |
| return null; | |
| }, | |
| doc: function doc(f) { | |
| // return document of f-iframe, keep here "n" as a parameter because of call from setTimeout() | |
| var d = null; | |
| try { | |
| if (f.contentDocument) d = f.contentDocument; // DOM | |
| else if (f.contentWindow) d = f.contentWindow.document; // IE | |
| } catch (e) { | |
| /* continue regardless of error */ | |
| } | |
| return d; | |
| }, | |
| bind_obj: function bind_obj(a, adobj) { | |
| a.div = adobj; | |
| a.target = null; // initially null, found ad when served | |
| a.unit_id = adobj.id; // placement id or name | |
| a.w = adobj.offsetWidth || 1; // width, min 1 | |
| a.h = adobj.offsetHeight || 1; // height, min 1 | |
| }, | |
| add: function add(wnd1, p) { | |
| // p - realvu unit id | |
| var a = { | |
| num: this.len, | |
| x: 0, | |
| y: 0, | |
| box: { | |
| x: 0, | |
| y: 0, | |
| h: 1, | |
| w: 1 | |
| }, // measured ad box | |
| p: p, | |
| state: 0, // 0-init, (1-loaded,2-rendered,3-viewed) | |
| delay: 0, // delay in msec to show ad after gets in view | |
| vt: 0, // total view time | |
| vtu: 0, // view time to update and mem | |
| a: '', // ad_placement id | |
| wnd: wnd1, | |
| div: null, | |
| pins: [], | |
| frm: null, // it will be frame when "show" | |
| riff: '', // r to report | |
| rnd: Math.random(), | |
| ncall: 0, // a callback number | |
| rq_bids: [], // rq bids of registered partners | |
| bids: [] // array of bids | |
| }; | |
| a.ru = window.top1.location.hostname; | |
| window.top1.realvu_aa.ads[this.len++] = a; | |
| return a; | |
| }, | |
| fmt: function fmt(a, pin) { | |
| return { | |
| 'realvu': a.r, | |
| 'riff': a.riff, | |
| 'area': a.vz, | |
| 'ncall': a.ncall, | |
| 'n': a.num, | |
| 'id': a.unit_id, | |
| 'pin': pin | |
| }; | |
| }, | |
| show: function show(a, pin) { | |
| pin.state = 2; // 2-published | |
| pin.vt = 0; // reset view time counter | |
| if (pin.size) { | |
| var asz = this.setSize(pin.size); | |
| if (asz != null) { | |
| a.w = asz.w; | |
| a.h = asz.h; | |
| } | |
| } | |
| if (typeof pin.callback != 'undefined') { | |
| pin.callback(this.fmt(a, pin)); | |
| } | |
| a.ncall++; | |
| this.track(a, 'show', ''); | |
| }, | |
| check: function check(p1) { | |
| var pin = { | |
| dist: 150, | |
| state: 0, | |
| tx2n: 7 | |
| }; // if dist is set trigger ad when distance < pin.dist | |
| for (var attr in p1) { | |
| if (p1.hasOwnProperty(attr)) { | |
| if (attr == 'ad_sizes' && typeof p1[attr] == 'string') { | |
| pin[attr] = p1[attr].split(','); | |
| } else if (attr == 'edge') { | |
| try { | |
| var ed = parseInt(p1[attr]); | |
| if (ed > 0 && ed < 251) pin[attr] = ed; | |
| } catch (e) { | |
| /* continue regardless of error */ | |
| } | |
| } else { | |
| pin[attr] = p1[attr]; | |
| } | |
| } | |
| } | |
| var a = null; | |
| var z = this; | |
| try { | |
| // not to track the same object more than one time | |
| for (var i = 0; i < z.len; i++) { | |
| // if (z.ads[i].div == adobj) { a = z.ads[i]; break; } | |
| if (z.ads[i].unit_id == pin.unit_id) { | |
| a = z.ads[i]; | |
| break; | |
| } | |
| } | |
| pin.wnd = pin.wnd || window; | |
| if (a == null) { | |
| a = z.add(pin.wnd, pin.p); | |
| a.unit_id = pin.unit_id; | |
| var adobj = pin.unit ? pin.unit : document.getElementById(a.unit_id); | |
| if (adobj != null) { | |
| z.bind_obj(a, adobj); | |
| } else { | |
| z.log('{w}"' + pin.unit_id + '" not found', a.num); | |
| } | |
| if (pin.size) { | |
| var asz = z.setSize(pin.size); | |
| if (asz != null) { | |
| a.w = asz.w; | |
| a.h = asz.h; | |
| } | |
| } | |
| pin.delay = pin.delay || 0; // delay in msec | |
| if (typeof pin.mode == 'undefined') { | |
| if (typeof pin.callback != 'undefined' || typeof pin.content != 'undefined') { | |
| pin.mode = pin.delay > 0 ? 'tx2' : 'in-view'; | |
| } else { | |
| pin.mode = 'kvp'; | |
| } | |
| // delays are for views only | |
| } | |
| pin.vt = 0; // view time | |
| pin.state = 0; | |
| a.pins.push(pin); | |
| } | |
| if (this.sr === '') { | |
| z.track(a, 'conf', ''); | |
| this.sr = '0'; | |
| } | |
| this.poll(); | |
| return a; | |
| } catch (e) { | |
| z.log(e.message, -1); | |
| return { | |
| r: 'err' | |
| }; | |
| } | |
| }, | |
| setSize: function setSize(sa) { | |
| var sb = sa; | |
| try { | |
| if (typeof sa == 'string') sb = sa.split('x'); // pin.size is a string WWWxHHH or array | |
| else if (Array.isArray(sa)) { | |
| var mm = 4; | |
| while (--mm > 0 && Array.isArray(sa[0]) && Array.isArray(sa[0][0])) { | |
| sa = sa[0]; | |
| } | |
| for (var m = 0; m < sa.length; m++) { | |
| if (Array.isArray(sa[m])) { | |
| sb = sa[m]; // if size is [][] | |
| var s = sb[0] + 'x' + sb[1]; | |
| if (s == '300x250' || s == '728x90' || s == '320x50' || s == '970x90') { | |
| break; // use most popular sizes | |
| } | |
| } else if (sa.length > 1) { | |
| sb = sa; | |
| } | |
| } | |
| } | |
| var w1 = parseInt(sb[0]); | |
| var h1 = parseInt(sb[1]); | |
| return { | |
| w: w1, | |
| h: h1 | |
| }; | |
| } catch (e) { | |
| /* continue regardless of error */ | |
| } | |
| return null; | |
| }, | |
| // API functions | |
| addUnitById: function addUnitById(partner_id, unit_id, callback, delay) { | |
| var p1 = partner_id; | |
| if (typeof p1 == 'string') { | |
| p1 = { | |
| partner_id: partner_id, | |
| unit_id: unit_id, | |
| callback: callback, | |
| delay: delay | |
| }; | |
| } | |
| var a = window.top1.realvu_aa.check(p1); | |
| return a.r; | |
| }, | |
| checkBidIn: function checkBidIn(partnerId, args, b) { | |
| // process a bid from hb | |
| // b==true - add/update, b==false - update only | |
| if (args.cpm == 0) return; // collect only bids submitted | |
| var boost = window.top1.realvu_aa; | |
| var push_bid = false; | |
| var adi = null; | |
| if (!b) { | |
| // update only if already checked in by xyzBidAdapter | |
| for (var i = 0; i < boost.ads.length; i++) { | |
| adi = boost.ads[i]; | |
| if (adi.unit_id == args.adUnitCode) { | |
| push_bid = true; | |
| break; | |
| } | |
| } | |
| } else { | |
| push_bid = true; | |
| adi = window.top1.realvu_aa.check({ | |
| unit_id: args.adUnitCode, | |
| size: args.size, | |
| partner_id: partnerId | |
| }); | |
| } | |
| if (push_bid) { | |
| var pb = { | |
| bidder: args.bidder, | |
| cpm: args.cpm, | |
| size: args.size, | |
| adId: args.adId, | |
| requestId: args.requestId, | |
| crid: '', | |
| ttr: args.timeToRespond, | |
| winner: 0 | |
| }; | |
| if (args.creative_id) { | |
| pb.crid = args.creative_id; | |
| } | |
| adi.bids.push(pb); | |
| } | |
| }, | |
| checkBidWon: function checkBidWon(partnerId, args, b) { | |
| // b==true - add/update, b==false - update only | |
| var z = this; | |
| var unit_id = args.adUnitCode; | |
| for (var i = 0; i < z.ads.length; i++) { | |
| var adi = z.ads[i]; | |
| if (adi.unit_id == unit_id) { | |
| for (var j = 0; j < adi.bids.length; j++) { | |
| var bj = adi.bids[j]; | |
| if (bj.adId == args.adId) { | |
| bj.winner = 1; | |
| break; | |
| } | |
| } | |
| var rpt = z.bids_rpt(adi, false); | |
| z.track(adi, 'win', rpt); | |
| break; | |
| } | |
| } | |
| }, | |
| bids_rpt: function bids_rpt(a, wo) { | |
| // a-unit, wo=true - WinnerOnly | |
| var rpt = ''; | |
| for (var i = 0; i < a.bids.length; i++) { | |
| var g = a.bids[i]; | |
| if (wo && !g.winner) continue; | |
| rpt += '&bdr=' + g.bidder + '&cpm=' + g.cpm + '&vi=' + a.riff + '&gw=' + g.winner + '&crt=' + g.crid + '&ttr=' + g.ttr; | |
| // append bid partner_id if any | |
| var pid = ''; | |
| for (var j = 0; j < a.rq_bids.length; j++) { | |
| var rqb = a.rq_bids[j]; | |
| if (rqb.adId == g.adId) { | |
| pid = rqb.partner_id; | |
| break; | |
| } | |
| } | |
| rpt += '&bc=' + pid; | |
| } | |
| return rpt; | |
| }, | |
| getStatusById: function getStatusById(unit_id) { | |
| // return status object | |
| for (var i = 0; i < this.ads.length; i++) { | |
| var adi = this.ads[i]; | |
| if (adi.unit_id == unit_id) return this.fmt(adi); | |
| } | |
| return null; | |
| }, | |
| log: function log(m1, i) { | |
| if (this.doLog) { | |
| this.msg.push({ | |
| dt: new Date() - this.t0, | |
| s: 'U' + (i + 1) + m1 | |
| }); | |
| } | |
| }, | |
| keyPos: function keyPos(a) { | |
| if (a.pins[0].unit_id) { | |
| var level = 'L' + (window.top1.location.pathname.match(/\//g) || []).length; | |
| return 'realvu.' + level + '.' + a.pins[0].unit_id.replace(/[0-9]{5,}/gi, 'RANDOM'); | |
| } | |
| }, | |
| writePos: function writePos(a) { | |
| try { | |
| var v = a.x + ',' + a.y + ',' + a.w + ',' + a.h; | |
| localStorage.setItem(this.keyPos(a), v); | |
| } catch (ex) { | |
| /* continue regardless of error */ | |
| } | |
| }, | |
| readPos: function readPos(a) { | |
| try { | |
| var s = localStorage.getItem(this.keyPos(a)); | |
| if (s) { | |
| var v = s.split(','); | |
| a.x = parseInt(v[0], 10); | |
| a.y = parseInt(v[1], 10); | |
| a.w = parseInt(v[2], 10); | |
| a.h = parseInt(v[3], 10); | |
| a.box = { x: a.x, y: a.y, w: a.w, h: a.h }; | |
| return true; | |
| } | |
| } catch (ex) { | |
| /* do nothing */ | |
| } | |
| return false; | |
| }, | |
| incrMem: function incrMem(a, evt, name) { | |
| try { | |
| var k1 = this.keyPos(a) + '.' + name; | |
| var vmem = localStorage.getItem(k1); | |
| if (vmem == null) vmem = '1:3'; | |
| var vr = vmem.split(':'); | |
| var nv = parseInt(vr[0], 10); | |
| var nr = parseInt(vr[1], 10); | |
| if (evt == 'r') { | |
| nr <<= 1; | |
| nr |= 1; | |
| nv <<= 1; | |
| } | |
| if (evt == 'v') { | |
| nv |= 1; | |
| } | |
| localStorage.setItem(k1, nv + ':' + nr); | |
| } catch (ex) { | |
| /* do nothing */ | |
| } | |
| }, | |
| score: function score(a, name) { | |
| try { | |
| var vstr = localStorage.getItem(this.keyPos(a) + '.' + name); | |
| if (vstr != null) { | |
| var vr = vstr.split(':'); | |
| var nv = parseInt(vr[0], 10); | |
| var nr = parseInt(vr[1], 10); | |
| var sv = 0; | |
| var sr = 0; | |
| for (nr &= 0x3FF; nr > 0; nr >>>= 1, nv >>>= 1) { | |
| // count 10 deliveries | |
| if (nr & 0x1) sr++; | |
| if (nv & 0x1) sv++; | |
| } | |
| return Math.round(sv * 100 / sr); | |
| } | |
| } catch (ex) { | |
| /* do nothing */ | |
| } | |
| return null; | |
| } | |
| }; | |
| if (typeof window.top1.boost_poll == 'undefined') { | |
| window.top1.realvu_aa.init(); | |
| window.top1.boost_poll = setInterval(function () { | |
| window.top1 && window.top1.realvu_aa && window.top1.realvu_aa.poll(); | |
| }, 20); | |
| } | |
| var _options = {}; | |
| realvuAnalyticsAdapter.originEnableAnalytics = realvuAnalyticsAdapter.enableAnalytics; | |
| realvuAnalyticsAdapter.enableAnalytics = function (config) { | |
| _options = config.options; | |
| if (typeof _options.partnerId == 'undefined' || _options.partnerId == '') { | |
| utils.logError('Missed realvu.com partnerId parameter', 101, 'Missed partnerId parameter'); | |
| } | |
| realvuAnalyticsAdapter.originEnableAnalytics(config); | |
| return _options.partnerId; | |
| }; | |
| var time0 = new Date().getTime(); | |
| realvuAnalyticsAdapter.track = function (_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| // @if NODE_ENV='debug' | |
| var msg = ''; | |
| var now = new Date(); | |
| msg += (now.getTime() - time0) / 1000 + ' eventType=' + eventType; | |
| if (typeof args != 'undefined') { | |
| msg += ', args.bidder=' + args.bidder + ' args.adUnitCode=' + args.adUnitCode + ' args.adId=' + args.adId + ' args.cpm=' + args.cpm + ' creativei_id=' + args.creative_id; | |
| } | |
| // msg += '\nargs=' + JSON.stringify(args) + '<br>'; | |
| utils.logMessage(msg); | |
| // @endif | |
| var boost = window.top1.realvu_aa; | |
| var b = false; // false - update only, true - add if not checked in yet | |
| var partnerId = null; | |
| if (_options && _options.partnerId && args) { | |
| partnerId = _options.partnerId; | |
| var code = args.adUnitCode; | |
| b = _options.regAllUnits; | |
| if (!b && _options.unitIds) { | |
| for (var j = 0; j < _options.unitIds.length; j++) { | |
| if (code === _options.unitIds[j]) { | |
| b = true; | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| if (eventType === _constants2['default'].EVENTS.BID_RESPONSE) { | |
| boost.checkBidIn(partnerId, args, b); | |
| } else if (eventType === _constants2['default'].EVENTS.BID_WON) { | |
| boost.checkBidWon(partnerId, args, b); | |
| } | |
| }; | |
| // xyzBidAdapter calls checkin() to obtain "yes/no" viewability | |
| realvuAnalyticsAdapter.checkIn = function (bid, partnerId) { | |
| // find (or add if not registered yet) the unit in boost | |
| if (typeof partnerId == 'undefined' || partnerId == '') { | |
| utils.logError('Missed realvu.com partnerId parameter', 102, 'Missed partnerId parameter'); | |
| } | |
| var a = window.top1.realvu_aa.check({ | |
| unit_id: bid.adUnitCode, | |
| size: bid.sizes, | |
| partner_id: partnerId | |
| }); | |
| a.rq_bids.push({ | |
| bidder: bid.bidder, | |
| adId: bid.bidId, | |
| partner_id: partnerId | |
| }); | |
| return a.riff; | |
| }; | |
| realvuAnalyticsAdapter.isInView = function (adUnitCode) { | |
| var r = 'NA'; | |
| var s = window.top1.realvu_aa.getStatusById(adUnitCode); | |
| if (s) { | |
| r = s.realvu; | |
| } | |
| return r; | |
| }; | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: realvuAnalyticsAdapter, | |
| code: 'realvuAnalytics' | |
| }); | |
| module.exports = realvuAnalyticsAdapter; | |
| /***/ }), | |
| /***/ 290: | |
| /***/ (function(module, exports) { | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[288]); | |
| pbjsChunk([33],{ | |
| /***/ 291: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(292); | |
| module.exports = __webpack_require__(293); | |
| /***/ }), | |
| /***/ 292: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| function RhythmOneBidAdapter() { | |
| this.code = 'rhythmone'; | |
| this.supportedMediaTypes = [_mediaTypes.VIDEO, _mediaTypes.BANNER]; | |
| this.isBidRequestValid = function (bid) { | |
| return true; | |
| }; | |
| this.getUserSyncs = function (syncOptions) { | |
| var slots = []; | |
| var placementIds = []; | |
| for (var k in slotsToBids) { | |
| slots.push(k); | |
| placementIds.push(getFirstParam('placementId', [slotsToBids[k]])); | |
| } | |
| var data = { | |
| doc_version: 1, | |
| doc_type: 'Prebid Audit', | |
| placement_id: placementIds.join(',').replace(/[,]+/g, ',').replace(/^,|,$/g, '') | |
| }; | |
| var w = typeof window !== 'undefined' ? window : { document: { location: { href: '' } } }; | |
| var ao = w.document.location.ancestorOrigins; | |
| var q = []; | |
| var u = '//hbevents.1rx.io/audit?'; | |
| if (ao && ao.length > 0) { | |
| data.ancestor_origins = ao[ao.length - 1]; | |
| } | |
| data.popped = w.opener !== null ? 1 : 0; | |
| data.framed = w.top === w ? 0 : 1; | |
| try { | |
| data.url = w.top.document.location.href.toString(); | |
| } catch (ex) { | |
| data.url = w.document.location.href.toString(); | |
| } | |
| try { | |
| data.prebid_version = '1.7.0-pre'; | |
| data.prebid_timeout = config.getConfig('bidderTimeout'); | |
| } catch (ex) {} | |
| data.response_ms = Date.now() - loadStart; | |
| data.placement_codes = slots.join(','); | |
| data.bidder_version = version; | |
| for (var _k in data) { | |
| q.push(encodeURIComponent(_k) + '=' + encodeURIComponent(_typeof(data[_k]) === 'object' ? JSON.stringify(data[_k]) : data[_k])); | |
| } | |
| q.sort(); | |
| if (syncOptions.pixelEnabled) { | |
| return [{ | |
| type: 'image', | |
| url: u + q.join('&') | |
| }]; | |
| } | |
| }; | |
| function getFirstParam(key, validBidRequests) { | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| if (validBidRequests[i].params && validBidRequests[i].params[key]) { | |
| return validBidRequests[i].params[key]; | |
| } | |
| } | |
| } | |
| var slotsToBids = {}; | |
| var that = this; | |
| var version = '1.0.0.0'; | |
| var loadStart = Date.now(); | |
| this.buildRequests = function (BRs) { | |
| var fallbackPlacementId = getFirstParam('placementId', BRs); | |
| if (fallbackPlacementId === undefined || BRs.length < 1) { | |
| return []; | |
| } | |
| loadStart = Date.now(); | |
| slotsToBids = {}; | |
| var query = []; | |
| var w = typeof window !== 'undefined' ? window : {}; | |
| function p(k, v, d) { | |
| if (v instanceof Array) { | |
| v = v.join(d || ','); | |
| } | |
| if (typeof v !== 'undefined') { | |
| query.push(encodeURIComponent(k) + '=' + encodeURIComponent(v)); | |
| } | |
| } | |
| function attempt(valueFunction, defaultValue) { | |
| try { | |
| return valueFunction(); | |
| } catch (ex) {} | |
| return defaultValue; | |
| } | |
| p('domain', attempt(function () { | |
| var d = w.document.location.ancestorOrigins; | |
| if (d && d.length > 0) { | |
| return d[d.length - 1]; | |
| } | |
| return w.top.document.location.hostname; // try/catch is in the attempt function | |
| }, '')); | |
| p('url', attempt(function () { | |
| var l; | |
| // try/catch is in the attempt function | |
| try { | |
| l = w.top.document.location.href.toString(); | |
| } catch (ex) { | |
| l = w.document.location.href.toString(); | |
| } | |
| return l; | |
| }, '')); | |
| function getRMPUrl() { | |
| var url = getFirstParam('endpoint', BRs) || '//tag.1rx.io/rmp/{placementId}/0/{path}?z={zone}'; | |
| var defaultZone = getFirstParam('zone', BRs) || '1r'; | |
| var defaultPath = getFirstParam('path', BRs) || 'mvo'; | |
| url = url.replace(/\{placementId\}/i, fallbackPlacementId); | |
| url = url.replace(/\{zone\}/i, defaultZone); | |
| url = url.replace(/\{path\}/i, defaultPath); | |
| p('title', attempt(function () { | |
| return w.top.document.title; | |
| }, '')); // try/catch is in the attempt function | |
| p('dsh', w.screen ? w.screen.height : ''); | |
| p('dsw', w.screen ? w.screen.width : ''); | |
| p('tz', new Date().getTimezoneOffset()); | |
| p('dtype', /(ios|ipod|ipad|iphone|android)/i.test(w.navigator.userAgent) ? 1 : /(smart[-]?tv|hbbtv|appletv|googletv|hdmi|netcast\.tv|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b)/i.test(w.navigator.userAgent) ? 3 : 2); | |
| p('flash', attempt(function () { | |
| var n = w.navigator; | |
| var p = n.plugins; | |
| var m = n.mimeTypes; | |
| var t = 'application/x-shockwave-flash'; | |
| var x = w.ActiveXObject; | |
| if (p && p['Shockwave Flash'] && m && m[t] && m[t].enabledPlugin) { | |
| return 1; | |
| } | |
| if (x) { | |
| try { | |
| if (new w.ActiveXObject('ShockwaveFlash.ShockwaveFlash')) { | |
| return 1; | |
| } | |
| } catch (e) {} | |
| } | |
| return 0; | |
| }, 0)); | |
| var heights = []; | |
| var widths = []; | |
| var floors = []; | |
| var mediaTypes = []; | |
| var i = 0; | |
| var configuredPlacements = []; | |
| var fat = /(^v|(\.0)+$)/gi; | |
| p('hbv', w.pbjs.version.replace(fat, '') + ',' + version.replace(fat, '')); | |
| for (; i < BRs.length; i++) { | |
| var th = []; | |
| var tw = []; | |
| var params = BRs[i].params || {}; | |
| slotsToBids[BRs[i].adUnitCode || BRs[i].placementCode] = BRs[i]; | |
| if (BRs[i].sizes.length > 0 && typeof BRs[i].sizes[0] === 'number') { | |
| BRs[i].sizes = [BRs[i].sizes]; | |
| } | |
| for (var j = 0; j < BRs[i].sizes.length; j++) { | |
| tw.push(BRs[i].sizes[j][0]); | |
| th.push(BRs[i].sizes[j][1]); | |
| } | |
| configuredPlacements.push(BRs[i].adUnitCode || BRs[i].placementCode); | |
| heights.push(th.join('|')); | |
| widths.push(tw.join('|')); | |
| mediaTypes.push(BRs[i].mediaTypes && BRs[i].mediaTypes.video ? 'v' : 'd'); | |
| floors.push(params.floor || 0); | |
| } | |
| p('imp', configuredPlacements); | |
| p('w', widths); | |
| p('h', heights); | |
| p('floor', floors); | |
| p('t', mediaTypes); | |
| url += '&' + query.join('&') + '&'; | |
| return url; | |
| } | |
| return [{ | |
| method: 'GET', | |
| url: getRMPUrl() | |
| }]; | |
| }; | |
| this.interpretResponse = function (serverResponse) { | |
| var responses = serverResponse.body || []; | |
| var bids = []; | |
| var i = 0; | |
| if (responses.seatbid) { | |
| var temp = []; | |
| for (i = 0; i < responses.seatbid.length; i++) { | |
| for (var j = 0; j < responses.seatbid[i].bid.length; j++) { | |
| temp.push(responses.seatbid[i].bid[j]); | |
| } | |
| } | |
| responses = temp; | |
| } | |
| for (i = 0; i < responses.length; i++) { | |
| var bid = responses[i]; | |
| var bidRequest = slotsToBids[bid.impid]; | |
| var bidResponse = { | |
| requestId: bidRequest.bidId, | |
| bidderCode: that.code, | |
| cpm: parseFloat(bid.price), | |
| width: bid.w, | |
| height: bid.h, | |
| creativeId: bid.crid, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 1000 | |
| }; | |
| if (bidRequest.mediaTypes && bidRequest.mediaTypes.video) { | |
| bidResponse.vastUrl = bid.nurl; | |
| bidResponse.mediaType = 'video'; | |
| bidResponse.ttl = 10000; | |
| } else { | |
| bidResponse.ad = bid.adm; | |
| } | |
| bids.push(bidResponse); | |
| } | |
| return bids; | |
| }; | |
| } | |
| var spec = exports.spec = new RhythmOneBidAdapter(); | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 293: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[291]); | |
| pbjsChunk([32],{ | |
| /***/ 294: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(295); | |
| module.exports = __webpack_require__(296); | |
| /***/ }), | |
| /***/ 295: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.internals = exports.spec = exports.ROTATION_ZONE = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _Renderer = __webpack_require__(16); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'rockyou'; | |
| var BASE_REQUEST_PATH = 'https://tas.rockyou.net/servlet/rotator/'; | |
| var IFRAME_SYNC_URL = 'https://prebid.tas-sync.rockyou.net/usersync2/prebid'; | |
| var VAST_PLAYER_LOCATION = 'https://rya-static.rockyou.com/rya/js/PreBidPlayer.js'; | |
| var ROTATION_ZONE = exports.ROTATION_ZONE = 'prod'; | |
| var isBidRequestValid = function isBidRequestValid(bid) { | |
| return !!bid.params && !!bid.params.placementId; | |
| }; | |
| /** | |
| * The RockYou Ad Serving system currently only accepts one placementId | |
| * per Ad request. For this reason, the first placementId indicated | |
| * will be chosen as the predominant placementId for this request. | |
| */ | |
| var determineOptimalPlacementId = function determineOptimalPlacementId(bidRequest) { | |
| return bidRequest.params.placementId; | |
| }; | |
| var determineOptimalRequestId = function determineOptimalRequestId(bidRequest) { | |
| return bidRequest.bidId; | |
| }; | |
| var buildSiteComponent = function buildSiteComponent(bidRequest) { | |
| var topLocation = utils.getTopWindowLocation(); | |
| var site = { | |
| domain: topLocation.hostname, | |
| page: topLocation.href, | |
| ref: topLocation.origin | |
| }; | |
| return site; | |
| }; | |
| var buildDeviceComponent = function buildDeviceComponent(bidRequest) { | |
| var device = { | |
| js: 1, | |
| language: 'language' in navigator ? navigator.language : null | |
| }; | |
| return device; | |
| }; | |
| var extractValidSize = function extractValidSize(bidRequest) { | |
| var width = null; | |
| var height = null; | |
| var requestedSizes = []; | |
| var mediaTypes = bidRequest.mediaTypes; | |
| if (mediaTypes && (mediaTypes.banner && mediaTypes.banner.sizes || mediaTypes.video && mediaTypes.video.playerSize)) { | |
| if (mediaTypes.banner) { | |
| requestedSizes = mediaTypes.banner.sizes; | |
| } else { | |
| requestedSizes = [mediaTypes.video.playerSize]; | |
| } | |
| } else if (!utils.isEmpty(bidRequest.sizes)) { | |
| requestedSizes = bidRequest.sizes; | |
| } | |
| // Ensure the size array is normalized | |
| var conformingSize = utils.parseSizesInput(requestedSizes); | |
| if (!utils.isEmpty(conformingSize) && conformingSize[0] != null) { | |
| // Currently only the first size is utilized | |
| var splitSizes = conformingSize[0].split('x'); | |
| width = parseInt(splitSizes[0]); | |
| height = parseInt(splitSizes[1]); | |
| } | |
| return { | |
| w: width, | |
| h: height | |
| }; | |
| }; | |
| var generateVideoComponent = function generateVideoComponent(bidRequest) { | |
| var impSize = extractValidSize(bidRequest); | |
| return { | |
| w: impSize.w, | |
| h: impSize.h | |
| }; | |
| }; | |
| var generateBannerComponent = function generateBannerComponent(bidRequest) { | |
| var impSize = extractValidSize(bidRequest); | |
| return { | |
| w: impSize.w, | |
| h: impSize.h | |
| }; | |
| }; | |
| var generateImpBody = function generateImpBody(bidRequest) { | |
| var mediaTypes = bidRequest.mediaTypes; | |
| var banner = null; | |
| var video = null; | |
| // Assume banner if the mediatype is not included | |
| if (mediaTypes && mediaTypes.video) { | |
| video = generateVideoComponent(bidRequest); | |
| } else { | |
| banner = generateBannerComponent(bidRequest); | |
| } | |
| return { | |
| id: bidRequest.index, | |
| banner: banner, | |
| video: video | |
| }; | |
| }; | |
| var generatePayload = function generatePayload(bidRequest) { | |
| // Generate the expected OpenRTB payload | |
| var payload = { | |
| id: determineOptimalRequestId(bidRequest), | |
| site: buildSiteComponent(bidRequest), | |
| device: buildDeviceComponent(bidRequest), | |
| imp: [generateImpBody(bidRequest)] | |
| }; | |
| return JSON.stringify(payload); | |
| }; | |
| var overridableProperties = function overridableProperties(request) { | |
| var rendererLocation = VAST_PLAYER_LOCATION; | |
| var baseRequestPath = BASE_REQUEST_PATH; | |
| var rotationZone = ROTATION_ZONE; | |
| if (!utils.isEmpty(request.rendererOverride)) { | |
| rendererLocation = request.rendererOverride; | |
| } | |
| if (request.params) { | |
| if (!utils.isEmpty(request.params.baseRequestPath)) { | |
| baseRequestPath = request.params.baseRequestPath; | |
| } | |
| if (!utils.isEmpty(request.params.rotationZone)) { | |
| rotationZone = request.params.rotationZone; | |
| } | |
| } | |
| return { | |
| rendererLocation: rendererLocation, | |
| baseRequestPath: baseRequestPath, | |
| rotationZone: rotationZone | |
| }; | |
| }; | |
| var buildRequests = function buildRequests(validBidRequests, requestRoot) { | |
| var requestType = 'POST'; | |
| var requestUrl = null; | |
| var requestPayload = null; | |
| var mediaTypes = null; | |
| var adUnitCode = null; | |
| var rendererOverride = null; | |
| var results = []; | |
| // Due to the nature of how URLs are generated, there must | |
| // be at least one bid request present for this to function | |
| // correctly | |
| if (!utils.isEmpty(validBidRequests)) { | |
| results = validBidRequests.map(function (bidRequest) { | |
| var serverLocations = overridableProperties(bidRequest); | |
| // requestUrl is the full endpoint w/ relevant adspot paramters | |
| var placementId = determineOptimalPlacementId(bidRequest); | |
| requestUrl = '' + serverLocations.baseRequestPath + placementId + '/0/vo?z=' + serverLocations.rotationZone; | |
| // requestPayload is the POST body JSON for the OpenRtb request | |
| requestPayload = generatePayload(bidRequest); | |
| mediaTypes = bidRequest.mediaTypes; | |
| adUnitCode = bidRequest.adUnitCode; | |
| rendererOverride = bidRequest.rendererOverride; | |
| return { | |
| method: requestType, | |
| type: requestType, | |
| url: requestUrl, | |
| data: requestPayload, | |
| mediaTypes: mediaTypes, | |
| requestId: requestRoot.bidderRequestId, | |
| bidId: bidRequest.bidId, | |
| adUnitCode: adUnitCode, | |
| rendererOverride: rendererOverride | |
| }; | |
| }); | |
| } | |
| return results; | |
| }; | |
| var outstreamRender = function outstreamRender(bid) { | |
| // push to render queue because player may not be loaded yet | |
| bid.renderer.push(function () { | |
| var adUnitCode = bid.renderer.config.adUnitCode; | |
| try { | |
| RockYouVastPlayer.render(adUnitCode, bid, playerCallbacks(bid.renderer)); | |
| } catch (pbe) { | |
| utils.logError(pbe); | |
| } | |
| }); | |
| }; | |
| var rockYouEventTranslation = function rockYouEventTranslation(rockYouEvent) { | |
| var translated = void 0; | |
| switch (rockYouEvent) { | |
| case 'LOAD': | |
| translated = 'loaded'; | |
| break; | |
| case 'IMPRESSION': | |
| translated = 'impression'; | |
| break; | |
| case 'COMPLETE': | |
| case 'ERROR': | |
| translated = 'ended'; | |
| break; | |
| } | |
| return translated; | |
| }; | |
| var playerCallbacks = function playerCallbacks(renderer) { | |
| return function (id, eventName) { | |
| eventName = rockYouEventTranslation(eventName); | |
| if (eventName) { | |
| renderer.handleVideoEvent({ id: id, eventName: eventName }); | |
| } | |
| }; | |
| }; | |
| var generateRenderer = function generateRenderer(bid, adUnitCode, rendererLocation) { | |
| var renderer = _Renderer.Renderer.install({ | |
| url: rendererLocation, | |
| config: { | |
| adText: 'RockYou Outstream Video Ad', | |
| adUnitCode: adUnitCode | |
| }, | |
| id: bid.id | |
| }); | |
| bid.renderer = renderer; | |
| try { | |
| renderer.setRender(outstreamRender); | |
| } catch (err) { | |
| utils.logWarn('Prebid Error calling setRender on renderer', err); | |
| } | |
| renderer.setEventHandlers({ | |
| impression: function impression() { | |
| return utils.logMessage('RockYou outstream video impression event'); | |
| }, | |
| loaded: function loaded() { | |
| return utils.logMessage('RockYou outstream video loaded event'); | |
| }, | |
| ended: function ended() { | |
| utils.logMessage('RockYou outstream renderer video event'); | |
| document.querySelector('#' + adUnitCode).style.display = 'none'; | |
| } | |
| }); | |
| return renderer; | |
| }; | |
| var interpretResponse = function interpretResponse(serverResponse, request) { | |
| var responses = []; | |
| if (serverResponse.body) { | |
| var responseBody = serverResponse.body; | |
| if (responseBody != null) { | |
| var seatBids = responseBody.seatbid; | |
| if (!(utils.isEmpty(seatBids) || utils.isEmpty(seatBids[0].bid))) { | |
| var bid = seatBids[0].bid[0]; | |
| // handle any values that may end up undefined | |
| var nullify = function nullify(value) { | |
| return typeof value === 'undefined' ? null : value; | |
| }; | |
| var ttl = null; | |
| if (bid.ext) { | |
| ttl = nullify(bid.ext.ttl); | |
| } | |
| var bidWidth = nullify(bid.w); | |
| var bidHeight = nullify(bid.h); | |
| var bannerCreative = null; | |
| var videoXml = null; | |
| var mediaType = null; | |
| var renderer = null; | |
| if (request.mediaTypes && request.mediaTypes.video) { | |
| videoXml = bid.adm; | |
| mediaType = _mediaTypes.VIDEO; | |
| var serversideLocations = overridableProperties(request); | |
| renderer = generateRenderer(bid, request.adUnitCode, serversideLocations.rendererLocation); | |
| } else { | |
| bannerCreative = bid.adm; | |
| } | |
| var response = { | |
| requestId: request.bidId, | |
| cpm: bid.price, | |
| width: bidWidth, | |
| height: bidHeight, | |
| ad: bannerCreative, | |
| ttl: ttl, | |
| creativeId: bid.adid, | |
| netRevenue: true, | |
| currency: responseBody.cur, | |
| vastUrl: null, | |
| vastXml: videoXml, | |
| dealId: null, | |
| mediaType: mediaType, | |
| renderer: renderer | |
| }; | |
| responses.push(response); | |
| } | |
| } | |
| } | |
| return responses; | |
| }; | |
| var getUserSyncs = function getUserSyncs(syncOptions, serverResponses) { | |
| var syncs = []; | |
| if (syncOptions.iframeEnabled) { | |
| syncs.push({ | |
| type: 'iframe', | |
| url: IFRAME_SYNC_URL | |
| }); | |
| } | |
| return syncs; | |
| }; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['ry'], | |
| isBidRequestValid: isBidRequestValid, | |
| buildRequests: buildRequests, | |
| interpretResponse: interpretResponse, | |
| getUserSyncs: getUserSyncs, | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO] | |
| }; | |
| var internals = exports.internals = { | |
| playerCallbacks: playerCallbacks, | |
| generateRenderer: generateRenderer | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 296: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[294]); | |
| pbjsChunk([31],{ | |
| /***/ 297: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(298); | |
| /***/ }), | |
| /***/ 298: | |
| /***/ (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 _AnalyticsAdapter = __webpack_require__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _constants = __webpack_require__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var utils = __webpack_require__(0); | |
| var url = '//pa.rxthdr.com/analytic'; | |
| var analyticsType = 'endpoint'; | |
| var auctionInitConst = _constants2['default'].EVENTS.AUCTION_INIT; | |
| var auctionEndConst = _constants2['default'].EVENTS.AUCTION_END; | |
| var bidWonConst = _constants2['default'].EVENTS.BID_WON; | |
| var bidRequestConst = _constants2['default'].EVENTS.BID_REQUESTED; | |
| var bidAdjustmentConst = _constants2['default'].EVENTS.BID_ADJUSTMENT; | |
| var bidResponseConst = _constants2['default'].EVENTS.BID_RESPONSE; | |
| var initOptions = { publisherIds: [], utmTagData: [], adUnits: [] }; | |
| var bidWon = { options: {}, events: [] }; | |
| var eventStack = { options: {}, events: [] }; | |
| var auctionStatus = 'not_started'; | |
| var localStoragePrefix = 'roxot_analytics_'; | |
| var utmTags = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; | |
| var utmTimeoutKey = 'utm_timeout'; | |
| var utmTimeout = 60 * 60 * 1000; | |
| var sessionTimeout = 60 * 60 * 1000; | |
| var sessionIdStorageKey = 'session_id'; | |
| var sessionTimeoutKey = 'session_timeout'; | |
| function getParameterByName(param) { | |
| var vars = {}; | |
| window.location.href.replace(location.hash, '').replace(/[?&]+([^=&]+)=?([^&]*)?/gi, function (m, key, value) { | |
| vars[key] = value !== undefined ? value : ''; | |
| }); | |
| return vars[param] ? vars[param] : ''; | |
| } | |
| function buildSessionIdLocalStorageKey() { | |
| return localStoragePrefix.concat(sessionIdStorageKey); | |
| } | |
| function buildSessionIdTimeoutLocalStorageKey() { | |
| return localStoragePrefix.concat(sessionTimeoutKey); | |
| } | |
| function updateSessionId() { | |
| if (isSessionIdTimeoutExpired()) { | |
| var newSessionId = utils.generateUUID(); | |
| localStorage.setItem(buildSessionIdLocalStorageKey(), newSessionId); | |
| } | |
| initOptions.sessionId = getSessionId(); | |
| updateSessionIdTimeout(); | |
| } | |
| function updateSessionIdTimeout() { | |
| localStorage.setItem(buildSessionIdTimeoutLocalStorageKey(), Date.now()); | |
| } | |
| function isSessionIdTimeoutExpired() { | |
| var cpmSessionTimestamp = localStorage.getItem(buildSessionIdTimeoutLocalStorageKey()); | |
| return Date.now() - cpmSessionTimestamp > sessionTimeout; | |
| } | |
| function getSessionId() { | |
| return localStorage.getItem(buildSessionIdLocalStorageKey()) ? localStorage.getItem(buildSessionIdLocalStorageKey()) : ''; | |
| } | |
| function updateUtmTimeout() { | |
| localStorage.setItem(buildUtmLocalStorageTimeoutKey(), Date.now()); | |
| } | |
| function isUtmTimeoutExpired() { | |
| var utmTimestamp = localStorage.getItem(buildUtmLocalStorageTimeoutKey()); | |
| return Date.now() - utmTimestamp > utmTimeout; | |
| } | |
| function buildUtmLocalStorageTimeoutKey() { | |
| return localStoragePrefix.concat(utmTimeoutKey); | |
| } | |
| function buildUtmLocalStorageKey(utmMarkKey) { | |
| return localStoragePrefix.concat(utmMarkKey); | |
| } | |
| function checkOptions() { | |
| if (typeof initOptions.publisherIds === 'undefined') { | |
| return false; | |
| } | |
| return initOptions.publisherIds.length > 0; | |
| } | |
| function checkAdUnitConfig() { | |
| if (typeof initOptions.adUnits === 'undefined') { | |
| return false; | |
| } | |
| return initOptions.adUnits.length > 0; | |
| } | |
| function buildBidWon(eventType, args) { | |
| bidWon.options = initOptions; | |
| if (checkAdUnitConfig()) { | |
| if ((0, _includes2['default'])(initOptions.adUnits, args.adUnitCode)) { | |
| bidWon.events = [{ args: args, eventType: eventType }]; | |
| } | |
| } else { | |
| bidWon.events = [{ args: args, eventType: eventType }]; | |
| } | |
| } | |
| function buildEventStack() { | |
| eventStack.options = initOptions; | |
| } | |
| function filterBidsByAdUnit(bids) { | |
| var filteredBids = []; | |
| bids.forEach(function (bid) { | |
| if ((0, _includes2['default'])(initOptions.adUnits, bid.placementCode)) { | |
| filteredBids.push(bid); | |
| } | |
| }); | |
| return filteredBids; | |
| } | |
| function isValidEvent(eventType, adUnitCode) { | |
| if (checkAdUnitConfig()) { | |
| var validationEvents = [bidAdjustmentConst, bidResponseConst, bidWonConst]; | |
| if (!(0, _includes2['default'])(initOptions.adUnits, adUnitCode) && (0, _includes2['default'])(validationEvents, eventType)) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| function isValidEventStack() { | |
| if (eventStack.events.length > 0) { | |
| return eventStack.events.some(function (event) { | |
| return bidRequestConst === event.eventType || bidWonConst === event.eventType; | |
| }); | |
| } | |
| return false; | |
| } | |
| function isValidBidWon() { | |
| return bidWon.events.length > 0; | |
| } | |
| function flushEventStack() { | |
| eventStack.events = []; | |
| } | |
| function flushBidWon() { | |
| bidWon.events = []; | |
| } | |
| var roxotAdapter = _extends((0, _AnalyticsAdapter2['default'])({ url: url, analyticsType: analyticsType }), { | |
| track: function track(_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| if (!checkOptions()) { | |
| return; | |
| } | |
| var info = _extends({}, args); | |
| if (info && info.ad) { | |
| info.ad = ''; | |
| } | |
| if (eventType === auctionInitConst) { | |
| auctionStatus = 'started'; | |
| flushEventStack(); | |
| } | |
| if (eventType === bidWonConst && auctionStatus === 'not_started') { | |
| updateSessionId(); | |
| buildBidWon(eventType, info); | |
| if (isValidBidWon()) { | |
| send(eventType, bidWon, 'bidWon'); | |
| } | |
| flushBidWon(); | |
| return; | |
| } | |
| if (eventType === auctionEndConst) { | |
| updateSessionId(); | |
| buildEventStack(eventType); | |
| if (isValidEventStack()) { | |
| send(eventType, eventStack, 'eventStack'); | |
| } | |
| flushEventStack(); | |
| auctionStatus = 'not_started'; | |
| } else { | |
| pushEvent(eventType, info); | |
| } | |
| } | |
| }); | |
| roxotAdapter.originEnableAnalytics = roxotAdapter.enableAnalytics; | |
| roxotAdapter.enableAnalytics = function (config) { | |
| initOptions = config.options; | |
| initOptions.utmTagData = this.buildUtmTagData(); | |
| utils.logInfo('Roxot Analytics enabled with config', initOptions); | |
| roxotAdapter.originEnableAnalytics(config); | |
| }; | |
| roxotAdapter.buildUtmTagData = function () { | |
| var utmTagData = {}; | |
| var utmTagsDetected = false; | |
| utmTags.forEach(function (utmTagKey) { | |
| var utmTagValue = getParameterByName(utmTagKey); | |
| if (utmTagValue !== '') { | |
| utmTagsDetected = true; | |
| } | |
| utmTagData[utmTagKey] = utmTagValue; | |
| }); | |
| utmTags.forEach(function (utmTagKey) { | |
| if (utmTagsDetected) { | |
| localStorage.setItem(buildUtmLocalStorageKey(utmTagKey), utmTagData[utmTagKey]); | |
| updateUtmTimeout(); | |
| } else { | |
| if (!isUtmTimeoutExpired()) { | |
| utmTagData[utmTagKey] = localStorage.getItem(buildUtmLocalStorageKey(utmTagKey)) ? localStorage.getItem(buildUtmLocalStorageKey(utmTagKey)) : ''; | |
| updateUtmTimeout(); | |
| } | |
| } | |
| }); | |
| return utmTagData; | |
| }; | |
| function send(eventType, data, sendDataType) { | |
| var fullUrl = url + '?publisherIds[]=' + initOptions.publisherIds.join('&publisherIds[]=') + '&host=' + window.location.hostname; | |
| var xhr = new XMLHttpRequest(); | |
| xhr.open('POST', fullUrl, true); | |
| xhr.setRequestHeader('Content-Type', 'text/plain'); | |
| xhr.withCredentials = true; | |
| xhr.onreadystatechange = function (result) { | |
| if (this.readyState != 4) return; | |
| utils.logInfo('Event ' + eventType + ' sent ' + sendDataType + ' to roxot prebid analytic with result' + result); | |
| }; | |
| xhr.send(JSON.stringify(data)); | |
| }; | |
| function pushEvent(eventType, args) { | |
| if (eventType === bidRequestConst) { | |
| if (checkAdUnitConfig()) { | |
| args.bids = filterBidsByAdUnit(args.bids); | |
| } | |
| if (args.bids.length > 0) { | |
| eventStack.events.push({ eventType: eventType, args: args }); | |
| } | |
| } else { | |
| if (isValidEvent(eventType, args.adUnitCode)) { | |
| eventStack.events.push({ eventType: eventType, args: args }); | |
| } | |
| } | |
| } | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: roxotAdapter, | |
| code: 'roxot' | |
| }); | |
| exports['default'] = roxotAdapter; | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[297]); | |
| pbjsChunk([30],{ | |
| /***/ 299: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(300); | |
| module.exports = __webpack_require__(301); | |
| /***/ }), | |
| /***/ 300: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'rtbdemand'; | |
| var BIDDER_SERVER = 'bidding.rtbdemand.com'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.zoneid); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests, bidderRequest) { | |
| return validBidRequests.map(function (bidRequest) { | |
| var server = bidRequest.params.server || BIDDER_SERVER; | |
| var parse = getSize(bidderRequest.bids[0].sizes); | |
| var payload = { | |
| from: 'hb', | |
| v: '1.0', | |
| request_id: bidRequest.bidderRequestId, | |
| imp_id: bidRequest.bidId, | |
| aff: bidRequest.params.zoneid, | |
| bid_floor: parseFloat(bidRequest.params.floor) > 0 ? bidRequest.params.floor : 0, | |
| charset: document.charSet || document.characterSet, | |
| site_domain: document.location.hostname, | |
| site_page: window.location.href, | |
| subid: 'hb', | |
| flashver: getFlashVersion(), | |
| tmax: bidderRequest.timeout, | |
| hb: '1', | |
| name: document.location.hostname, | |
| width: parse.width, | |
| height: parse.height, | |
| device_width: screen.width, | |
| device_height: screen.height, | |
| dnt: navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1' ? 1 : 0, | |
| secure: isSecure(), | |
| make: navigator.vendor ? navigator.vendor : '' | |
| }; | |
| if (document.referrer) { | |
| payload.referrer = document.referrer; | |
| } | |
| return { | |
| method: 'GET', | |
| url: '//' + server + '/hb', | |
| data: payload | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| serverResponse = serverResponse.body; | |
| var bidResponses = []; | |
| if (serverResponse && serverResponse.seatbid) { | |
| serverResponse.seatbid.forEach(function (seatBid) { | |
| return seatBid.bid.forEach(function (bid) { | |
| var bidResponse = { | |
| requestId: bid.impid, | |
| creativeId: bid.impid, | |
| cpm: bid.price, | |
| width: bid.w, | |
| height: bid.h, | |
| ad: bid.adm, | |
| netRevenue: true, | |
| currency: 'USD', | |
| ttl: 360 | |
| }; | |
| bidResponses.push(bidResponse); | |
| }); | |
| }); | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| return [{ | |
| type: 'iframe', | |
| url: '//' + BIDDER_SERVER + '/delivery/matches.php?type=iframe' | |
| }]; | |
| } | |
| } | |
| }; | |
| function getFlashVersion() { | |
| var plugins, plugin, result; | |
| if (navigator.plugins && navigator.plugins.length > 0) { | |
| plugins = navigator.plugins; | |
| for (var i = 0; i < plugins.length && !result; i++) { | |
| plugin = plugins[i]; | |
| if (plugin.name.indexOf('Shockwave Flash') > -1) { | |
| result = plugin.description.split('Shockwave Flash ')[1]; | |
| } | |
| } | |
| } | |
| return result || ''; | |
| } | |
| /* 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; | |
| } | |
| function isSecure() { | |
| return document.location.protocol === 'https:'; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 301: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[299]); | |
| pbjsChunk([29],{ | |
| /***/ 302: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(303); | |
| module.exports = __webpack_require__(304); | |
| /***/ }), | |
| /***/ 303: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _includes = __webpack_require__(8); | |
| var _includes2 = _interopRequireDefault(_includes); | |
| 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 BIDDER_CODE = 'rtbhouse'; | |
| var REGIONS = ['prebid-eu', 'prebid-us', 'prebid-asia']; | |
| var ENDPOINT_URL = 'creativecdn.com/bidder/prebid/bids'; | |
| var DEFAULT_CURRENCY_ARR = ['USD']; // NOTE - USD is the only supported currency right now; Hardcoded for bids | |
| /** | |
| * Helpers | |
| */ | |
| function buildEndpointUrl(region) { | |
| return 'https://' + region + '.' + ENDPOINT_URL; | |
| } | |
| /** | |
| * Produces an OpenRTBImpression from a slot config. | |
| */ | |
| function mapImpression(slot) { | |
| return { | |
| id: slot.bidId, | |
| banner: mapBanner(slot), | |
| tagid: slot.adUnitCode.toString() | |
| }; | |
| } | |
| /** | |
| * Produces an OpenRTB Banner object for the slot given. | |
| */ | |
| function mapBanner(slot) { | |
| return { | |
| w: slot.sizes[0][0], | |
| h: slot.sizes[0][1], | |
| format: mapSizes(slot.sizes) | |
| }; | |
| } | |
| /** | |
| * Produce openRTB banner.format object | |
| */ | |
| function mapSizes(slot_sizes) { | |
| var format = []; | |
| slot_sizes.forEach(function (elem) { | |
| format.push({ | |
| w: elem[0], | |
| h: elem[1] | |
| }); | |
| }); | |
| return format; | |
| } | |
| /** | |
| * Produces an OpenRTB site object. | |
| */ | |
| function mapSite(validRequest) { | |
| var pubId = validRequest && validRequest.length > 0 ? validRequest[0].params.publisherId : 'unknown'; | |
| return { | |
| publisher: { | |
| id: pubId.toString() | |
| }, | |
| page: utils.getTopWindowUrl(), | |
| name: utils.getOrigin() | |
| }; | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.BANNER], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!((0, _includes2['default'])(REGIONS, bid.params.region) && bid.params.publisherId); | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var request = { | |
| id: validBidRequests[0].auctionId, | |
| imp: validBidRequests.map(function (slot) { | |
| return mapImpression(slot); | |
| }), | |
| site: mapSite(validBidRequests), | |
| cur: DEFAULT_CURRENCY_ARR, | |
| test: validBidRequests[0].params.test || 0 | |
| }; | |
| return { | |
| method: 'POST', | |
| url: buildEndpointUrl(validBidRequests[0].params.region), | |
| data: JSON.stringify(request) | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, originalRequest) { | |
| serverResponse = serverResponse.body; | |
| var bids = []; | |
| if (utils.isArray(serverResponse)) { | |
| serverResponse.forEach(function (serverBid) { | |
| if (serverBid.price !== 0) { | |
| var bid = { | |
| requestId: serverBid.impid, | |
| mediaType: _mediaTypes.BANNER, | |
| cpm: serverBid.price, | |
| creativeId: serverBid.adid, | |
| ad: serverBid.adm, | |
| width: serverBid.w, | |
| height: serverBid.h, | |
| ttl: 55, | |
| netRevenue: true, | |
| currency: 'USD' | |
| }; | |
| bids.push(bid); | |
| } | |
| }); | |
| } | |
| return bids; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 304: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[302]); | |
| pbjsChunk([28],{ | |
| /***/ 305: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(306); | |
| module.exports = __webpack_require__(307); | |
| /***/ }), | |
| /***/ 306: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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; }; | |
| exports.masSizeOrdering = masSizeOrdering; | |
| exports.resetUserSync = resetUserSync; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| var _mediaTypes = __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; } } | |
| var INTEGRATION = 'pbjs_lite_v1.7.0-pre'; | |
| function isSecure() { | |
| return location.protocol === 'https:'; | |
| } | |
| // use protocol relative urls for http or https | |
| var FASTLANE_ENDPOINT = '//fastlane.rubiconproject.com/a/api/fastlane.json'; | |
| var VIDEO_ENDPOINT = '//fastlane-adv.rubiconproject.com/v1/auction/video'; | |
| var SYNC_ENDPOINT = 'https://tap-secure.rubiconproject.com/partner/scripts/rubicon/emily.html?rtb_ext=1'; | |
| var TIMEOUT_BUFFER = 500; | |
| var sizeMap = { | |
| 1: '468x60', | |
| 2: '728x90', | |
| 5: '120x90', | |
| 8: '120x600', | |
| 9: '160x600', | |
| 10: '300x600', | |
| 13: '200x200', | |
| 14: '250x250', | |
| 15: '300x250', | |
| 16: '336x280', | |
| 19: '300x100', | |
| 31: '980x120', | |
| 32: '250x360', | |
| 33: '180x500', | |
| 35: '980x150', | |
| 37: '468x400', | |
| 38: '930x180', | |
| 43: '320x50', | |
| 44: '300x50', | |
| 48: '300x300', | |
| 54: '300x1050', | |
| 55: '970x90', | |
| 57: '970x250', | |
| 58: '1000x90', | |
| 59: '320x80', | |
| 60: '320x150', | |
| 61: '1000x1000', | |
| 65: '640x480', | |
| 67: '320x480', | |
| 68: '1800x1000', | |
| 72: '320x320', | |
| 73: '320x160', | |
| 78: '980x240', | |
| 79: '980x300', | |
| 80: '980x400', | |
| 83: '480x300', | |
| 94: '970x310', | |
| 96: '970x210', | |
| 101: '480x320', | |
| 102: '768x1024', | |
| 103: '480x280', | |
| 108: '320x240', | |
| 113: '1000x300', | |
| 117: '320x100', | |
| 125: '800x250', | |
| 126: '200x600', | |
| 144: '980x600', | |
| 195: '600x300', | |
| 199: '640x200', | |
| 213: '1030x590', | |
| 214: '980x360' | |
| }; | |
| utils._each(sizeMap, function (item, key) { | |
| return sizeMap[item] = key; | |
| }); | |
| var spec = exports.spec = { | |
| code: 'rubicon', | |
| aliases: ['rubiconLite'], | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO], | |
| /** | |
| * @param {object} bid | |
| * @return boolean | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (_typeof(bid.params) !== 'object') { | |
| return false; | |
| } | |
| var params = bid.params; | |
| if (!/^\d+$/.test(params.accountId)) { | |
| return false; | |
| } | |
| var parsedSizes = parseSizes(bid); | |
| if (parsedSizes.length < 1) { | |
| return false; | |
| } | |
| if (spec.hasVideoMediaType(bid)) { | |
| // support instream only | |
| if (utils.deepAccess(bid, 'mediaTypes.' + _mediaTypes.VIDEO) && utils.deepAccess(bid, 'mediaTypes.' + _mediaTypes.VIDEO + '.context') !== 'instream' || _typeof(params.video) !== 'object' || !params.video.size_id) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| }, | |
| /** | |
| * @param {BidRequest[]} bidRequests | |
| * @param bidderRequest | |
| * @return ServerRequest[] | |
| */ | |
| buildRequests: function buildRequests(bidRequests, bidderRequest) { | |
| return bidRequests.map(function (bidRequest) { | |
| bidRequest.startTime = new Date().getTime(); | |
| var page_url = _config.config.getConfig('pageUrl'); | |
| if (bidRequest.params.referrer) { | |
| page_url = bidRequest.params.referrer; | |
| } else if (!page_url) { | |
| page_url = utils.getTopWindowUrl(); | |
| } | |
| page_url = bidRequest.params.secure ? page_url.replace(/^http:/i, 'https:') : page_url; | |
| if (spec.hasVideoMediaType(bidRequest)) { | |
| var params = bidRequest.params; | |
| var size = parseSizes(bidRequest); | |
| var _data = { | |
| page_url: page_url, | |
| resolution: _getScreenResolution(), | |
| account_id: params.accountId, | |
| integration: INTEGRATION, | |
| 'x_source.tid': bidRequest.transactionId, | |
| timeout: bidderRequest.timeout - (Date.now() - bidderRequest.auctionStart + TIMEOUT_BUFFER), | |
| stash_creatives: true, | |
| ae_pass_through_parameters: params.video.aeParams, | |
| slots: [] | |
| }; | |
| // Define the slot object | |
| var slotData = { | |
| site_id: params.siteId, | |
| zone_id: params.zoneId, | |
| position: parsePosition(params.position), | |
| floor: parseFloat(params.floor) > 0.01 ? params.floor : 0.01, | |
| element_id: bidRequest.adUnitCode, | |
| name: bidRequest.adUnitCode, | |
| language: params.video.language, | |
| width: size[0], | |
| height: size[1], | |
| size_id: params.video.size_id | |
| }; | |
| if (params.inventory && _typeof(params.inventory) === 'object') { | |
| slotData.inventory = params.inventory; | |
| } | |
| if (params.keywords && Array.isArray(params.keywords)) { | |
| slotData.keywords = params.keywords; | |
| } | |
| if (params.visitor && _typeof(params.visitor) === 'object') { | |
| slotData.visitor = params.visitor; | |
| } | |
| _data.slots.push(slotData); | |
| return { | |
| method: 'POST', | |
| url: VIDEO_ENDPOINT, | |
| data: _data, | |
| bidRequest: bidRequest | |
| }; | |
| } | |
| // non-video request builder | |
| var _bidRequest$params = bidRequest.params, | |
| accountId = _bidRequest$params.accountId, | |
| siteId = _bidRequest$params.siteId, | |
| zoneId = _bidRequest$params.zoneId, | |
| position = _bidRequest$params.position, | |
| floor = _bidRequest$params.floor, | |
| keywords = _bidRequest$params.keywords, | |
| visitor = _bidRequest$params.visitor, | |
| inventory = _bidRequest$params.inventory, | |
| userId = _bidRequest$params.userId; | |
| // defaults | |
| floor = (floor = parseFloat(floor)) > 0.01 ? floor : 0.01; | |
| position = position || 'btf'; | |
| // use rubicon sizes if provided, otherwise adUnit.sizes | |
| var parsedSizes = parseSizes(bidRequest); | |
| // using array to honor ordering. if order isn't important (it shouldn't be), an object would probably be preferable | |
| var data = ['account_id', accountId, 'site_id', siteId, 'zone_id', zoneId, 'size_id', parsedSizes[0], 'alt_size_ids', parsedSizes.slice(1).join(',') || undefined, 'p_pos', position, 'rp_floor', floor, 'rp_secure', isSecure() ? '1' : '0', 'tk_flint', INTEGRATION, 'x_source.tid', bidRequest.transactionId, 'p_screen_res', _getScreenResolution(), 'kw', keywords, 'tk_user_key', userId]; | |
| if (visitor !== null && (typeof visitor === 'undefined' ? 'undefined' : _typeof(visitor)) === 'object') { | |
| utils._each(visitor, function (item, key) { | |
| return data.push('tg_v.' + key, item); | |
| }); | |
| } | |
| if (inventory !== null && (typeof inventory === 'undefined' ? 'undefined' : _typeof(inventory)) === 'object') { | |
| utils._each(inventory, function (item, key) { | |
| return data.push('tg_i.' + key, item); | |
| }); | |
| } | |
| data.push('rand', Math.random(), 'rf', page_url); | |
| data = data.concat(_getDigiTrustQueryParams()); | |
| data = data.reduce(function (memo, curr, index) { | |
| return index % 2 === 0 && data[index + 1] !== undefined ? memo + curr + '=' + encodeURIComponent(data[index + 1]) + '&' : memo; | |
| }, '').slice(0, -1); // remove trailing & | |
| return { | |
| method: 'GET', | |
| url: FASTLANE_ENDPOINT, | |
| data: data, | |
| bidRequest: bidRequest | |
| }; | |
| }); | |
| }, | |
| /** | |
| * Test if bid has mediaType or mediaTypes set for video. | |
| * note: 'mediaType' has been deprecated, however support will remain for a transitional period | |
| * @param {BidRequest} bidRequest | |
| * @returns {boolean} | |
| */ | |
| hasVideoMediaType: function hasVideoMediaType(bidRequest) { | |
| return bidRequest.mediaType === _mediaTypes.VIDEO || typeof utils.deepAccess(bidRequest, 'mediaTypes.' + _mediaTypes.VIDEO) !== 'undefined'; | |
| }, | |
| /** | |
| * @param {*} responseObj | |
| * @param {BidRequest} bidRequest | |
| * @return {Bid[]} An array of bids which | |
| */ | |
| interpretResponse: function interpretResponse(responseObj, _ref) { | |
| var bidRequest = _ref.bidRequest; | |
| responseObj = responseObj.body; | |
| var ads = responseObj.ads; | |
| // check overall response | |
| if ((typeof responseObj === 'undefined' ? 'undefined' : _typeof(responseObj)) !== 'object' || responseObj.status !== 'ok') { | |
| return []; | |
| } | |
| // video ads array is wrapped in an object | |
| if ((typeof bidRequest === 'undefined' ? 'undefined' : _typeof(bidRequest)) === 'object' && spec.hasVideoMediaType(bidRequest) && (typeof ads === 'undefined' ? 'undefined' : _typeof(ads)) === 'object') { | |
| ads = ads[bidRequest.adUnitCode]; | |
| } | |
| // check the ad response | |
| if (!Array.isArray(ads) || ads.length < 1) { | |
| return []; | |
| } | |
| // if there are multiple ads, sort by CPM | |
| ads = ads.sort(_adCpmSort); | |
| return ads.reduce(function (bids, ad) { | |
| if (ad.status !== 'ok') { | |
| return []; | |
| } | |
| var bid = { | |
| requestId: bidRequest.bidId, | |
| currency: 'USD', | |
| creativeId: ad.creative_id, | |
| cpm: ad.cpm || 0, | |
| dealId: ad.deal, | |
| ttl: 300, // 5 minutes | |
| netRevenue: _config.config.getConfig('rubicon.netRevenue') || false, | |
| rubicon: { | |
| advertiserId: ad.advertiser, | |
| networkId: ad.network | |
| } | |
| }; | |
| if (ad.creative_type) { | |
| bid.mediaType = ad.creative_type; | |
| } | |
| if (ad.creative_type === _mediaTypes.VIDEO) { | |
| bid.width = bidRequest.params.video.playerWidth; | |
| bid.height = bidRequest.params.video.playerHeight; | |
| bid.vastUrl = ad.creative_depot_url; | |
| bid.impression_id = ad.impression_id; | |
| bid.videoCacheKey = ad.impression_id; | |
| } else { | |
| bid.ad = _renderCreative(ad.script, ad.impression_id); | |
| var _sizeMap$ad$size_id$s = sizeMap[ad.size_id].split('x').map(function (num) { | |
| return Number(num); | |
| }); | |
| var _sizeMap$ad$size_id$s2 = _slicedToArray(_sizeMap$ad$size_id$s, 2); | |
| bid.width = _sizeMap$ad$size_id$s2[0]; | |
| bid.height = _sizeMap$ad$size_id$s2[1]; | |
| } | |
| // add server-side targeting | |
| bid.rubiconTargeting = (Array.isArray(ad.targeting) ? ad.targeting : []).reduce(function (memo, item) { | |
| memo[item.key] = item.values[0]; | |
| return memo; | |
| }, { 'rpfl_elemid': bidRequest.adUnitCode }); | |
| bids.push(bid); | |
| return bids; | |
| }, []); | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (!hasSynced && syncOptions.iframeEnabled) { | |
| hasSynced = true; | |
| return { | |
| type: 'iframe', | |
| url: SYNC_ENDPOINT | |
| }; | |
| } | |
| } | |
| }; | |
| function _adCpmSort(adA, adB) { | |
| return (adB.cpm || 0.0) - (adA.cpm || 0.0); | |
| } | |
| function _getScreenResolution() { | |
| return [window.screen.width, window.screen.height].join('x'); | |
| } | |
| function _getDigiTrustQueryParams() { | |
| function getDigiTrustId() { | |
| var digiTrustUser = window.DigiTrust && (_config.config.getConfig('digiTrustId') || window.DigiTrust.getUser({ member: 'T9QSFKPDN9' })); | |
| return digiTrustUser && digiTrustUser.success && digiTrustUser.identity || null; | |
| } | |
| var digiTrustId = getDigiTrustId(); | |
| // Verify there is an ID and this user has not opted out | |
| if (!digiTrustId || digiTrustId.privacy && digiTrustId.privacy.optout) { | |
| return []; | |
| } | |
| return ['dt.id', digiTrustId.id, 'dt.keyv', digiTrustId.keyv, 'dt.pref', 0]; | |
| } | |
| function _renderCreative(script, impId) { | |
| return '<html>\n<head><script type=\'text/javascript\'>inDapIF=true;</script></head>\n<body style=\'margin : 0; padding: 0;\'>\n<!-- Rubicon Project Ad Tag -->\n<div data-rp-impression-id=\'' + impId + '\'>\n<script type=\'text/javascript\'>' + script + '</script>\n</div>\n</body>\n</html>'; | |
| } | |
| function parseSizes(bid) { | |
| var params = bid.params; | |
| if (spec.hasVideoMediaType(bid)) { | |
| var size = []; | |
| if (_typeof(params.video) === 'object' && params.video.playerWidth && params.video.playerHeight) { | |
| size = [params.video.playerWidth, params.video.playerHeight]; | |
| } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0 && Array.isArray(bid.sizes[0]) && bid.sizes[0].length > 1) { | |
| size = bid.sizes[0]; | |
| } | |
| return size; | |
| } | |
| var sizes = Array.isArray(params.sizes) ? params.sizes : mapSizes(bid.sizes); | |
| return masSizeOrdering(sizes); | |
| } | |
| function mapSizes(sizes) { | |
| return utils.parseSizesInput(sizes) | |
| // map sizes while excluding non-matches | |
| .reduce(function (result, size) { | |
| var mappedSize = parseInt(sizeMap[size], 10); | |
| if (mappedSize) { | |
| result.push(mappedSize); | |
| } | |
| return result; | |
| }, []); | |
| } | |
| function parsePosition(position) { | |
| if (position === 'atf' || position === 'btf') { | |
| return position; | |
| } | |
| return 'unknown'; | |
| } | |
| function masSizeOrdering(sizes) { | |
| var MAS_SIZE_PRIORITY = [15, 2, 9]; | |
| return sizes.sort(function (first, second) { | |
| // sort by MAS_SIZE_PRIORITY priority order | |
| var firstPriority = MAS_SIZE_PRIORITY.indexOf(first); | |
| var secondPriority = MAS_SIZE_PRIORITY.indexOf(second); | |
| if (firstPriority > -1 || secondPriority > -1) { | |
| if (firstPriority === -1) { | |
| return 1; | |
| } | |
| if (secondPriority === -1) { | |
| return -1; | |
| } | |
| return firstPriority - secondPriority; | |
| } | |
| // and finally ascending order | |
| return first - second; | |
| }); | |
| } | |
| var hasSynced = false; | |
| function resetUserSync() { | |
| hasSynced = false; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 307: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[305]); | |
| pbjsChunk([27],{ | |
| /***/ 308: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(309); | |
| module.exports = __webpack_require__(310); | |
| /***/ }), | |
| /***/ 309: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _bidderFactory = __webpack_require__(1); | |
| var _config = __webpack_require__(2); | |
| 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 BIDDER_CODE = 'rxrtb'; | |
| var DEFAULT_HOST = 'bid.rxrtb.bid'; | |
| var AUCTION_TYPE = 2; | |
| var RESPONSE_TTL = 900; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.BANNER], | |
| isBidRequestValid: function isBidRequestValid(bidRequest) { | |
| return 'params' in bidRequest && bidRequest.params.source !== undefined && bidRequest.params.id !== undefined && utils.isInteger(bidRequest.params.id) && bidRequest.params.token !== undefined; | |
| }, | |
| buildRequests: function buildRequests(validBidRequests) { | |
| var requests = []; | |
| for (var i = 0; i < validBidRequests.length; i++) { | |
| var prebidReq = makePrebidRequest(validBidRequests[i]); | |
| if (prebidReq) { | |
| requests.push(prebidReq); | |
| } | |
| } | |
| return requests; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var rtbResp = serverResponse.body; | |
| if (!rtbResp || !rtbResp.seatbid) { | |
| return []; | |
| } | |
| var bidResponses = []; | |
| for (var i = 0; i < rtbResp.seatbid.length; i++) { | |
| var seatbid = rtbResp.seatbid[i]; | |
| for (var j = 0; j < seatbid.bid.length; j++) { | |
| var bid = seatbid.bid[j]; | |
| var bidResponse = { | |
| requestId: bid.impid, | |
| cpm: bid.price, | |
| width: bid.w, | |
| height: bid.h, | |
| mediaType: _mediaTypes.BANNER, | |
| creativeId: bid.crid, | |
| currency: rtbResp.cur || 'USD', | |
| netRevenue: true, | |
| ttl: bid.exp || RESPONSE_TTL, | |
| ad: bid.adm | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| return []; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| function getDomain(url) { | |
| var a = document.createElement('a'); | |
| a.href = url; | |
| return a.host; | |
| } | |
| function makePrebidRequest(req) { | |
| var host = req.params.host || DEFAULT_HOST; | |
| var url = '//' + host + '/dsp?id=' + req.params.id + '&token=' + req.params.token; | |
| var reqData = makeRtbRequest(req); | |
| return { | |
| method: 'POST', | |
| url: url, | |
| data: JSON.stringify(reqData) | |
| }; | |
| } | |
| function makeRtbRequest(req) { | |
| var imp = []; | |
| imp.push(makeImp(req)); | |
| return { | |
| 'id': req.auctionId, | |
| 'imp': imp, | |
| 'site': makeSite(req), | |
| 'device': makeDevice(), | |
| 'hb': 1, | |
| 'at': req.params.at || AUCTION_TYPE, | |
| 'cur': ['USD'], | |
| 'badv': req.params.badv || '', | |
| 'bcat': req.params.bcat || '' | |
| }; | |
| } | |
| function makeImp(req) { | |
| var imp = { | |
| 'id': req.bidId, | |
| 'tagid': req.adUnitCode, | |
| 'banner': makeBanner(req) | |
| }; | |
| if (req.params.bidfloor && isFinite(req.params.bidfloor)) { | |
| imp.bidfloor = req.params.bidfloor; | |
| } | |
| return imp; | |
| } | |
| function makeBanner(req) { | |
| var format = []; | |
| var banner = {}; | |
| for (var i = 0; i < req.sizes.length; i++) { | |
| format.push({ | |
| w: req.sizes[i][0], | |
| h: req.sizes[i][1] | |
| }); | |
| } | |
| banner.format = format; | |
| if (req.params.pos && utils.isInteger(req.params.pos)) { | |
| banner.pos = req.params.pos; | |
| } | |
| return banner; | |
| } | |
| function makeSite(req) { | |
| return { | |
| 'id': req.params.source, | |
| 'domain': getDomain(_config.config.getConfig('publisherDomain')), | |
| 'page': utils.getTopWindowUrl(), | |
| 'ref': utils.getTopWindowReferrer() | |
| }; | |
| } | |
| function makeDevice() { | |
| return { | |
| 'ua': window.navigator.userAgent || '', | |
| 'ip': 1 | |
| }; | |
| } | |
| /***/ }), | |
| /***/ 310: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[308]); | |
| pbjsChunk([106],{ | |
| /***/ 311: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(312); | |
| /***/ }), | |
| /***/ 312: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.CLIENT = exports.SERVER = undefined; | |
| exports.getSourceBidderMap = getSourceBidderMap; | |
| exports.getSource = getSource; | |
| var _config = __webpack_require__(2); | |
| var _adaptermanager = __webpack_require__(7); | |
| 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 SERVER = exports.SERVER = 'server'; | |
| var CLIENT = exports.CLIENT = 'client'; | |
| var testing = false; // whether testing is turned on | |
| var bidSource = {}; // store bidder sources determined from s2sConfing bidderControl | |
| // load s2sConfig | |
| _config.config.getConfig('s2sConfig', function (config) { | |
| testing = config.s2sConfig && config.s2sConfig.testing; | |
| calculateBidSources(config.s2sConfig); | |
| }); | |
| function getSourceBidderMap() { | |
| var _sourceBidders, _ref2; | |
| var adUnits = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; | |
| var sourceBidders = (_sourceBidders = {}, _defineProperty(_sourceBidders, SERVER, {}), _defineProperty(_sourceBidders, CLIENT, {}), _sourceBidders); | |
| // bail if testing is not turned on | |
| if (!testing) { | |
| var _ref; | |
| return _ref = {}, _defineProperty(_ref, SERVER, []), _defineProperty(_ref, CLIENT, []), _ref; | |
| } | |
| adUnits.forEach(function (adUnit) { | |
| // if any adUnit bidders specify a bidSource, include them | |
| (adUnit.bids || []).forEach(function (bid) { | |
| // calculate the source once and store on bid object | |
| bid.calcSource = bid.calcSource || getSource(bid.bidSource); | |
| // if no bidSource at bid level, default to bidSource from bidder | |
| bid.finalSource = bid.calcSource || bidSource[bid.bidder] || CLIENT; // default to client | |
| // add bidder to sourceBidders data structure | |
| sourceBidders[bid.finalSource][bid.bidder] = true; | |
| }); | |
| }); | |
| // make sure all bidders in bidSource are in sourceBidders | |
| Object.keys(bidSource).forEach(function (bidder) { | |
| sourceBidders[bidSource[bidder]][bidder] = true; | |
| }); | |
| // return map of source => array of bidders | |
| return _ref2 = {}, _defineProperty(_ref2, SERVER, Object.keys(sourceBidders[SERVER])), _defineProperty(_ref2, CLIENT, Object.keys(sourceBidders[CLIENT])), _ref2; | |
| } | |
| /** | |
| * @function calculateBidSources determines the source for each s2s bidder based on bidderControl weightings. these can be overridden at the adUnit level | |
| * @param s2sConfig server-to-server configuration | |
| */ | |
| function calculateBidSources() { | |
| var s2sConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
| // bail if testing is not turned on | |
| if (!testing) { | |
| return; | |
| } | |
| bidSource = {}; // reset bid sources | |
| // calculate bid source (server/client) for each s2s bidder | |
| var bidderControl = s2sConfig.bidderControl || {}; | |
| (s2sConfig.bidders || []).forEach(function (bidder) { | |
| bidSource[bidder] = getSource(bidderControl[bidder] && bidderControl[bidder].bidSource) || SERVER; // default to server | |
| }); | |
| } | |
| /** | |
| * @function getSource() gets a random source based on the given sourceWeights (export just for testing) | |
| * @param sourceWeights mapping of relative weights of potential sources. for example {server: 1, client: 3} should do a server request 25% of the time and a client request 75% of the time. | |
| * @param bidSources list of possible bid sources: "server", "client". In theory could get the sources from the sourceWeights keys, but this is publisher config defined, so bidSources let's us constrain that. | |
| * @return the chosen source ("server" or "client"), or undefined if none chosen | |
| */ | |
| function getSource() { | |
| var sourceWeights = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
| var bidSources = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [SERVER, CLIENT]; | |
| var srcIncWeight = {}; // store incremental weights of each source | |
| var totWeight = 0; | |
| bidSources.forEach(function (source) { | |
| totWeight += sourceWeights[source] || 0; | |
| srcIncWeight[source] = totWeight; | |
| }); | |
| if (!totWeight) return; // bail if no source weights | |
| // choose a source randomly based on weights | |
| var rndWeight = Math.random() * totWeight; | |
| for (var i = 0; i < bidSources.length; i++) { | |
| var source = bidSources[i]; | |
| // choose the first source with an incremental weight > random weight | |
| if (rndWeight < srcIncWeight[source]) return source; | |
| } | |
| } | |
| // inject the s2sTesting module into the adaptermanager rather than importing it | |
| // importing it causes the packager to include it even when it's not explicitly included in the build | |
| (0, _adaptermanager.setS2STestingModule)(exports); | |
| /***/ }) | |
| },[311]); | |
| pbjsChunk([26],{ | |
| /***/ 313: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(314); | |
| module.exports = __webpack_require__(315); | |
| /***/ }), | |
| /***/ 314: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 spec = exports.spec = { | |
| code: 'sekindoUM', | |
| supportedMediaTypes: ['banner', 'video'], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| if (bid.mediaType == 'video' || _typeof(bid.mediaTypes) == 'object' && _typeof(bid.mediaTypes.video) == 'object') { | |
| if (_typeof(bid.params.video) != 'object' || typeof bid.params.video.playerWidth == 'undefined' || typeof bid.params.video.playerHeight == 'undefined') { | |
| return false; | |
| } | |
| } | |
| return !!bid.params.spaceId; | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests, bidderRequest) { | |
| var pubUrl = null; | |
| if (parent !== window) { | |
| pubUrl = document.referrer; | |
| } else { | |
| pubUrl = window.location.href; | |
| } | |
| return validBidRequests.map(function (bidRequest) { | |
| var subId = utils.getBidIdParameter('subId', bidRequest.params); | |
| var spaceId = utils.getBidIdParameter('spaceId', bidRequest.params); | |
| var bidfloor = utils.getBidIdParameter('bidfloor', bidRequest.params); | |
| var protocol = document.location.protocol === 'https:' ? 's' : ''; | |
| var queryString = ''; | |
| queryString = utils.tryAppendQueryString(queryString, 's', spaceId); | |
| queryString = utils.tryAppendQueryString(queryString, 'subId', subId); | |
| queryString = utils.tryAppendQueryString(queryString, 'pubUrl', pubUrl); | |
| queryString = utils.tryAppendQueryString(queryString, 'hbTId', bidRequest.transactionId); | |
| queryString = utils.tryAppendQueryString(queryString, 'hbBidId', bidRequest.bidId); | |
| queryString = utils.tryAppendQueryString(queryString, 'hbver', '4'); | |
| queryString = utils.tryAppendQueryString(queryString, 'hbcb', '1'); /// legasy | |
| queryString = utils.tryAppendQueryString(queryString, 'dcpmflr', bidfloor); | |
| queryString = utils.tryAppendQueryString(queryString, 'protocol', protocol); | |
| queryString = utils.tryAppendQueryString(queryString, 'x', bidRequest.params.width); | |
| queryString = utils.tryAppendQueryString(queryString, 'y', bidRequest.params.height); | |
| if (bidRequest.mediaType === 'video' || _typeof(bidRequest.mediaTypes) == 'object' && _typeof(bidRequest.mediaTypes.video) == 'object') { | |
| queryString = utils.tryAppendQueryString(queryString, 'x', bidRequest.params.playerWidth); | |
| queryString = utils.tryAppendQueryString(queryString, 'y', bidRequest.params.playerHeight); | |
| if (typeof vid_vastType != 'undefined') { | |
| queryString = utils.tryAppendQueryString(queryString, 'vid_vastType', bidRequest.params.vid_vastType); | |
| } | |
| if (_typeof(bidRequest.mediaTypes) == 'object' && _typeof(bidRequest.mediaTypes.video) == 'object' && typeof bidRequest.mediaTypes.video.context == 'string') { | |
| queryString = utils.tryAppendQueryString(queryString, 'vid_context', bidRequest.mediaTypes.video.context); | |
| } | |
| } | |
| var endpointUrl = 'http' + protocol + '://hb.sekindo.com/live/liveView.php'; | |
| return { | |
| method: 'GET', | |
| url: endpointUrl, | |
| data: queryString | |
| }; | |
| }); | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| if ((typeof serverResponse === 'undefined' ? 'undefined' : _typeof(serverResponse)) !== 'object') { | |
| return []; | |
| } | |
| var bidResponses = []; | |
| var bidResponse = { | |
| requestId: serverResponse.body.id, | |
| bidderCode: spec.code, | |
| cpm: serverResponse.body.cpm, | |
| width: serverResponse.body.width, | |
| height: serverResponse.body.height, | |
| creativeId: serverResponse.body.creativeId, | |
| currency: serverResponse.body.currency, | |
| netRevenue: serverResponse.body.netRevenue, | |
| ttl: serverResponse.body.ttl | |
| }; | |
| if (bidRequest.mediaType == 'video') { | |
| if (typeof serverResponse.body.vastUrl != 'undefined') { | |
| bidResponse.vastUrl = serverResponse.body.vastUrl; | |
| } else { | |
| bidResponse.vastXml = serverResponse.body.vastXml; | |
| } | |
| } else { | |
| bidResponse.ad = serverResponse.body.ad; | |
| } | |
| bidResponses.push(bidResponse); | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 315: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[313]); | |
| pbjsChunk([25],{ | |
| /***/ 316: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(317); | |
| module.exports = __webpack_require__(318); | |
| /***/ }), | |
| /***/ 317: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'serverbid'; | |
| var CONFIG = { | |
| 'serverbid': { | |
| 'BASE_URI': 'https://e.serverbid.com/api/v2' | |
| }, | |
| 'connectad': { | |
| 'BASE_URI': 'https://i.connectad.io/api/v2' | |
| }, | |
| 'onefiftytwo': { | |
| 'BASE_URI': 'https://e.serverbid.com/api/v2' | |
| }, | |
| 'insticator': { | |
| 'BASE_URI': 'https://e.serverbid.com/api/v2' | |
| }, | |
| 'adsparc': { | |
| 'BASE_URI': 'https://e.serverbid.com/api/v2' | |
| }, | |
| 'automatad': { | |
| 'BASE_URI': 'https://e.serverbid.com/api/v2' | |
| } | |
| }; | |
| var siteId = 0; | |
| var bidder = 'serverbid'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['connectad', 'onefiftytwo', 'insticator', 'adsparc', 'automatad'], | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params.networkId && bid.params.siteId); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| // Do we need to group by bidder? i.e. to make multiple requests for | |
| // different endpoints. | |
| var ret = { | |
| method: 'POST', | |
| url: '', | |
| data: '', | |
| bidRequest: [] | |
| }; | |
| if (validBidRequests.length < 1) { | |
| return ret; | |
| } | |
| var ENDPOINT_URL = void 0; | |
| // These variables are used in creating the user sync URL. | |
| siteId = validBidRequests[0].params.siteId; | |
| bidder = validBidRequests[0].params.bidder; | |
| var data = _extends({ | |
| placements: [], | |
| time: Date.now(), | |
| user: {}, | |
| url: utils.getTopWindowUrl(), | |
| referrer: document.referrer, | |
| enableBotFiltering: true, | |
| includePricingData: true, | |
| parallel: true | |
| }, validBidRequests[0].params); | |
| validBidRequests.map(function (bid) { | |
| var config = CONFIG[bid.bidder]; | |
| ENDPOINT_URL = config.BASE_URI; | |
| var placement = _extends({ | |
| divName: bid.bidId, | |
| adTypes: bid.adTypes || getSize(bid.sizes) | |
| }, bid.params); | |
| if (placement.networkId && placement.siteId) { | |
| data.placements.push(placement); | |
| } | |
| }); | |
| ret.data = JSON.stringify(data); | |
| ret.bidRequest = validBidRequests; | |
| ret.url = ENDPOINT_URL; | |
| return ret; | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bid = void 0; | |
| var bids = void 0; | |
| var bidId = void 0; | |
| var bidObj = void 0; | |
| var bidResponses = []; | |
| bids = bidRequest.bidRequest; | |
| serverResponse = (serverResponse || {}).body; | |
| for (var i = 0; i < bids.length; i++) { | |
| bid = {}; | |
| bidObj = bids[i]; | |
| bidId = bidObj.bidId; | |
| if (serverResponse) { | |
| var decision = serverResponse.decisions && serverResponse.decisions[bidId]; | |
| var price = decision && decision.pricing && decision.pricing.clearPrice; | |
| if (decision && price) { | |
| bid.requestId = bidId; | |
| bid.cpm = price; | |
| bid.width = decision.width; | |
| bid.height = decision.height; | |
| bid.ad = retrieveAd(decision); | |
| bid.currency = 'USD'; | |
| bid.creativeId = decision.adId; | |
| bid.ttl = 360; | |
| bid.netRevenue = true; | |
| bid.referrer = utils.getTopWindowUrl(); | |
| bidResponses.push(bid); | |
| } | |
| } | |
| } | |
| return bidResponses; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions) { | |
| if (syncOptions.iframeEnabled) { | |
| if (bidder === 'connectad') { | |
| return [{ | |
| type: 'iframe', | |
| url: '//cdn.connectad.io/connectmyusers.php' | |
| }]; | |
| } else { | |
| return [{ | |
| type: 'iframe', | |
| url: '//s.zkcdn.net/ss/' + siteId + '.html' | |
| }]; | |
| } | |
| } else { | |
| utils.logWarn(bidder + ': Please enable iframe based user syncing.'); | |
| } | |
| } | |
| }; | |
| var sizeMap = [null, '120x90', '120x90', '468x60', '728x90', '300x250', '160x600', '120x600', '300x100', '180x150', '336x280', '240x400', '234x60', '88x31', '120x60', '120x240', '125x125', '220x250', '250x250', '250x90', '0x0', '200x90', '300x50', '320x50', '320x480', '185x185', '620x45', '300x125', '800x250']; | |
| sizeMap[77] = '970x90'; | |
| sizeMap[123] = '970x250'; | |
| sizeMap[43] = '300x600'; | |
| sizeMap[286] = '970x66'; | |
| sizeMap[3230] = '970x280'; | |
| sizeMap[429] = '486x60'; | |
| sizeMap[374] = '700x500'; | |
| sizeMap[934] = '300x1050'; | |
| sizeMap[1578] = '320x100'; | |
| sizeMap[331] = '320x250'; | |
| sizeMap[3301] = '320x267'; | |
| sizeMap[2730] = '728x250'; | |
| function getSize(sizes) { | |
| var result = []; | |
| sizes.forEach(function (size) { | |
| var index = sizeMap.indexOf(size[0] + 'x' + size[1]); | |
| if (index >= 0) { | |
| result.push(index); | |
| } | |
| }); | |
| return result; | |
| } | |
| function retrieveAd(decision) { | |
| return decision.contents && decision.contents[0] && decision.contents[0].body + utils.createTrackPixelHtml(decision.impressionUrl); | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 318: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[316]); | |
| pbjsChunk([105],{ | |
| /***/ 319: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(320); | |
| /***/ }), | |
| /***/ 320: | |
| /***/ (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__(25); | |
| var _adapter2 = _interopRequireDefault(_adapter); | |
| var _bidfactory = __webpack_require__(15); | |
| var _bidfactory2 = _interopRequireDefault(_bidfactory); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| var _constants = __webpack_require__(3); | |
| var _config = __webpack_require__(2); | |
| 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 TYPE = _constants.S2S.SRC; | |
| var getConfig = _config.config.getConfig; | |
| var REQUIRED_S2S_CONFIG_KEYS = ['siteId', 'networkId', 'bidders']; | |
| var _s2sConfig = void 0; | |
| var bidder = 'serverbidServer'; | |
| var ServerBidServerAdapter; | |
| ServerBidServerAdapter = function ServerBidServerAdapter() { | |
| var baseAdapter = new _adapter2['default']('serverbidServer'); | |
| var BASE_URI = 'https://e.serverbid.com/api/v2'; | |
| var sizeMap = [null, '120x90', '120x90', '468x60', '728x90', '300x250', '160x600', '120x600', '300x100', '180x150', '336x280', '240x400', '234x60', '88x31', '120x60', '120x240', '125x125', '220x250', '250x250', '250x90', '0x0', '200x90', '300x50', '320x50', '320x480', '185x185', '620x45', '300x125', '800x250']; | |
| sizeMap[77] = '970x90'; | |
| sizeMap[123] = '970x250'; | |
| sizeMap[43] = '300x600'; | |
| function setS2sConfig(options) { | |
| if (options.adapter != bidder) return; | |
| var contains = function contains(xs, x) { | |
| return xs.indexOf(x) > -1; | |
| }; | |
| var userConfig = Object.keys(options); | |
| REQUIRED_S2S_CONFIG_KEYS.forEach(function (key) { | |
| if (!contains(userConfig, key)) { | |
| utils.logError(key + ' missing in server to server config'); | |
| return void 0; // void 0 to beat the linter | |
| } | |
| }); | |
| _s2sConfig = options; | |
| } | |
| getConfig('s2sConfig', function (_ref) { | |
| var s2sConfig = _ref.s2sConfig; | |
| return setS2sConfig(s2sConfig); | |
| }); | |
| function getLocalConfig() { | |
| return _s2sConfig || {}; | |
| } | |
| function _convertFields(bid) { | |
| var safeBid = bid || {}; | |
| var converted = {}; | |
| var name = safeBid.bidder; | |
| converted[name] = safeBid.params; | |
| return converted; | |
| } | |
| baseAdapter.callBids = function (s2sBidRequest, bidRequests, addBidResponse, done, ajax) { | |
| var params = s2sBidRequest; | |
| var shouldDoWorkFn = function shouldDoWorkFn(bidRequest) { | |
| return bidRequest && bidRequest.ad_units && utils.isArray(bidRequest.ad_units) && bidRequest.ad_units.length; | |
| }; | |
| if (shouldDoWorkFn(params)) { | |
| _callBids(s2sBidRequest, bidRequests, addBidResponse, done, ajax); | |
| } | |
| }; | |
| function _callBids(s2sBidRequest, bidRequests, addBidResponse, done, ajax) { | |
| var bidRequest = s2sBidRequest; | |
| var data = { | |
| placements: [], | |
| time: Date.now(), | |
| user: {}, | |
| url: utils.getTopWindowUrl(), | |
| referrer: document.referrer, | |
| enableBotFiltering: true, | |
| includePricingData: true, | |
| parallel: true | |
| }; | |
| var allBids = []; | |
| for (var i = 0; i < bidRequest.ad_units.length; i++) { | |
| var adunit = bidRequest.ad_units[i]; | |
| var siteId = _s2sConfig.siteId; | |
| var networkId = getLocalConfig().networkId; | |
| var sizes = adunit.sizes; | |
| var bids = adunit.bids || []; | |
| // one placement for each of the bids | |
| for (var _i = 0; _i < bids.length; _i++) { | |
| var bid = bids[_i]; | |
| bid.code = adunit.code; | |
| allBids.push(bid); | |
| var placement = _extends({}, { | |
| divName: bid.bid_id, | |
| networkId: networkId, | |
| siteId: siteId, | |
| adTypes: bid.adTypes || getSize(sizes), | |
| bidders: _convertFields(bid), | |
| skipSelection: true | |
| }); | |
| if (placement.networkId && placement.siteId) { | |
| data.placements.push(placement); | |
| } | |
| } | |
| } | |
| if (data.placements.length) { | |
| ajax(BASE_URI, _responseCallback(addBidResponse, allBids, done), JSON.stringify(data), { method: 'POST', withCredentials: true, contentType: 'application/json' }); | |
| } | |
| } | |
| function _responseCallback(addBidResponse, bids, done) { | |
| return function (resp) { | |
| var bid = void 0; | |
| var bidId = void 0; | |
| var result = void 0; | |
| var bidObj = void 0; | |
| var bidCode = void 0; | |
| var placementCode = void 0; | |
| var skipSelectionRequestsReturnArray = function skipSelectionRequestsReturnArray(decision) { | |
| return (decision || []).length ? decision[0] : {}; | |
| }; | |
| try { | |
| result = JSON.parse(resp); | |
| } catch (error) { | |
| utils.logError(error); | |
| } | |
| for (var i = 0; i < bids.length; i++) { | |
| bidObj = bids[i]; | |
| bidId = bidObj.bid_id; | |
| bidObj.bidId = bidObj.bid_id; | |
| bidCode = bidObj.bidder; | |
| placementCode = bidObj.code; | |
| var noBid = function noBid(bidObj) { | |
| bid = _bidfactory2['default'].createBid(_constants.STATUS.NO_BID, bidObj); | |
| bid.bidderCode = bidCode; | |
| return bid; | |
| }; | |
| if (result) { | |
| var decision = result.decisions && skipSelectionRequestsReturnArray(result.decisions[bidId]); | |
| var price = decision && decision.pricing && decision.pricing.clearPrice; | |
| if (decision && price) { | |
| bid = _bidfactory2['default'].createBid(_constants.STATUS.GOOD, bidObj); | |
| bid = _extends(bid, { bidderCode: bidCode, | |
| cpm: price, | |
| width: decision.width, | |
| height: decision.height, | |
| ad: retrieveAd(decision) }); | |
| } else { | |
| bid = noBid(bidObj); | |
| } | |
| } else { | |
| bid = noBid(bidObj); | |
| } | |
| addBidResponse(placementCode, bid); | |
| } | |
| done(); | |
| }; | |
| }; | |
| function retrieveAd(decision) { | |
| return decision.contents && decision.contents[0] && decision.contents[0].body + utils.createTrackPixelHtml(decision.impressionUrl); | |
| } | |
| function getSize(sizes) { | |
| var width = 'w'; | |
| var height = 'h'; | |
| var result = []; | |
| sizes.forEach(function (size) { | |
| var index = sizeMap.indexOf(size[width] + 'x' + size[height]); | |
| if (index >= 0) { | |
| result.push(index); | |
| } | |
| }); | |
| return result; | |
| } | |
| // Export the `callBids` function, so that Prebid.js can execute | |
| // this function when the page asks to send out bid requests. | |
| return _extends(this, { | |
| queueSync: baseAdapter.queueSync, | |
| callBids: baseAdapter.callBids, | |
| setBidderCode: baseAdapter.setBidderCode, | |
| type: TYPE | |
| }); | |
| }; | |
| ServerBidServerAdapter.createNew = function () { | |
| return new ServerBidServerAdapter(); | |
| }; | |
| _adaptermanager2['default'].registerBidAdapter(new ServerBidServerAdapter(), bidder); | |
| module.exports = ServerBidServerAdapter; | |
| /***/ }) | |
| },[319]); | |
| pbjsChunk([24],{ | |
| /***/ 321: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| module.exports = __webpack_require__(322); | |
| /***/ }), | |
| /***/ 322: | |
| /***/ (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 _AnalyticsAdapter = __webpack_require__(5); | |
| var _AnalyticsAdapter2 = _interopRequireDefault(_AnalyticsAdapter); | |
| var _adaptermanager = __webpack_require__(7); | |
| var _adaptermanager2 = _interopRequireDefault(_adaptermanager); | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | |
| var utils = __webpack_require__(0); | |
| var emptyUrl = ''; | |
| var analyticsType = 'endpoint'; | |
| var STR_BIDDER_CODE = 'sharethrough'; | |
| var STR_VERSION = '0.1.0'; | |
| var sharethroughAdapter = _extends((0, _AnalyticsAdapter2['default'])({ | |
| emptyUrl: emptyUrl, | |
| analyticsType: analyticsType | |
| }), { | |
| STR_BEACON_HOST: document.location.protocol + '//b.sharethrough.com/butler?', | |
| placementCodeSet: {}, | |
| track: function track(_ref) { | |
| var eventType = _ref.eventType, | |
| args = _ref.args; | |
| if (eventType === 'bidRequested' && args.bidderCode === 'sharethrough') { | |
| var bids = args.bids; | |
| var keys = Object.keys(bids); | |
| for (var i = 0; i < keys.length; i++) { | |
| this.placementCodeSet[bids[keys[i]].placementCode] = args.bids[keys[i]]; | |
| } | |
| } | |
| if (eventType === 'bidWon') { | |
| this.bidWon(args); | |
| } | |
| }, | |
| bidWon: function bidWon(args) { | |
| var curBidderCode = args.bidderCode; | |
| if (curBidderCode !== STR_BIDDER_CODE && args.adUnitCode in this.placementCodeSet) { | |
| var strBid = this.placementCodeSet[args.adUnitCode]; | |
| this.fireLoseBeacon(curBidderCode, args.cpm, strBid.adserverRequestId, 'headerBidLose'); | |
| } | |
| }, | |
| fireLoseBeacon: function fireLoseBeacon(winningBidderCode, winningCPM, arid, type) { | |
| var loseBeaconUrl = this.STR_BEACON_HOST; | |
| loseBeaconUrl = utils.tryAppendQueryString(loseBeaconUrl, 'winnerBidderCode', winningBidderCode); | |
| loseBeaconUrl = utils.tryAppendQueryString(loseBeaconUrl, 'winnerCpm', winningCPM); | |
| loseBeaconUrl = utils.tryAppendQueryString(loseBeaconUrl, 'arid', arid); | |
| loseBeaconUrl = utils.tryAppendQueryString(loseBeaconUrl, 'type', type); | |
| loseBeaconUrl = this.appendEnvFields(loseBeaconUrl); | |
| this.fireBeacon(loseBeaconUrl); | |
| }, | |
| appendEnvFields: function appendEnvFields(url) { | |
| url = utils.tryAppendQueryString(url, 'hbVersion', '1.7.0-pre'); | |
| url = utils.tryAppendQueryString(url, 'strVersion', STR_VERSION); | |
| url = utils.tryAppendQueryString(url, 'hbSource', 'prebid'); | |
| return url; | |
| }, | |
| fireBeacon: function fireBeacon(theUrl) { | |
| var img = new Image(); | |
| img.src = theUrl; | |
| } | |
| }); | |
| _adaptermanager2['default'].registerAnalyticsAdapter({ | |
| adapter: sharethroughAdapter, | |
| code: 'sharethrough' | |
| }); | |
| exports['default'] = sharethroughAdapter; | |
| /***/ }), | |
| /***/ 5: | |
| /***/ (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__(3); | |
| var _constants2 = _interopRequireDefault(_constants); | |
| var _adloader = __webpack_require__(11); | |
| 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__(9); | |
| 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 SET_TARGETING = _constants2['default'].EVENTS.SET_TARGETING; | |
| var AD_RENDER_FAILED = _constants2['default'].EVENTS.AD_RENDER_FAILED; | |
| 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, SET_TARGETING, function (args) { | |
| return _this2.enqueue({ eventType: SET_TARGETING, args: args }); | |
| }), _defineProperty(_handlers2, AUCTION_END, function (args) { | |
| return _this2.enqueue({ eventType: AUCTION_END, args: args }); | |
| }), _defineProperty(_handlers2, AD_RENDER_FAILED, function (args) { | |
| return _this2.enqueue({ eventType: AD_RENDER_FAILED, 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); | |
| } | |
| } | |
| /***/ }) | |
| },[321]); | |
| pbjsChunk([23],{ | |
| /***/ 323: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(324); | |
| module.exports = __webpack_require__(325); | |
| /***/ }), | |
| /***/ 324: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.sharethroughAdapterSpec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var BIDDER_CODE = 'sharethrough'; | |
| var VERSION = '2.0.0'; | |
| var STR_ENDPOINT = document.location.protocol + '//btlr.sharethrough.com/header-bid/v1'; | |
| var sharethroughAdapterSpec = exports.sharethroughAdapterSpec = { | |
| code: BIDDER_CODE, | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!bid.params.pkey && bid.bidder === BIDDER_CODE; | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| return bidRequests.map(function (bid) { | |
| return { | |
| method: 'GET', | |
| url: STR_ENDPOINT, | |
| data: { | |
| bidId: bid.bidId, | |
| placement_key: bid.params.pkey, | |
| hbVersion: '1.7.0-pre', | |
| strVersion: VERSION, | |
| hbSource: 'prebid' | |
| } | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(_ref, req) { | |
| var body = _ref.body; | |
| if (!Object.keys(body).length) return []; | |
| var creative = body.creatives[0]; | |
| return [{ | |
| requestId: req.data.bidId, | |
| width: 0, | |
| height: 0, | |
| cpm: creative.cpm, | |
| creativeId: creative.creative.creative_key, | |
| deal_id: creative.creative.deal_id, | |
| currency: 'USD', | |
| netRevenue: true, | |
| ttl: 360, | |
| ad: generateAd(body, req) | |
| }]; | |
| } | |
| }; | |
| function generateAd(body, req) { | |
| var strRespId = 'str_response_' + req.data.bidId; | |
| return '\n <div data-str-native-key="' + req.data.placement_key + '" data-stx-response-name="' + strRespId + '">\n </div>\n <script>var ' + strRespId + ' = "' + b64EncodeUnicode(JSON.stringify(body)) + '"</script>\n <script src="//native.sharethrough.com/assets/sfp-set-targeting.js"></script>\n <script>\n (function() {\n if (!(window.STR && window.STR.Tag) && !(window.top.STR && window.top.STR.Tag)) {\n const sfp_js = document.createElement(\'script\');\n sfp_js.src = "//native.sharethrough.com/assets/sfp.js";\n sfp_js.type = \'text/javascript\';\n sfp_js.charset = \'utf-8\';\n try {\n window.top.document.getElementsByTagName(\'body\')[0].appendChild(sfp_js);\n } catch (e) {\n console.log(e);\n }\n }\n })()\n </script>'; | |
| } | |
| // See https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem | |
| function b64EncodeUnicode(str) { | |
| return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) { | |
| return String.fromCharCode('0x' + p1); | |
| })); | |
| } | |
| (0, _bidderFactory.registerBidder)(sharethroughAdapterSpec); | |
| /***/ }), | |
| /***/ 325: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[323]); | |
| pbjsChunk([22],{ | |
| /***/ 326: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(327); | |
| module.exports = __webpack_require__(328); | |
| /***/ }), | |
| /***/ 327: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| var _config = __webpack_require__(2); | |
| var _bidderFactory = __webpack_require__(1); | |
| 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 BIDDER_CODE = 'smartadserver'; | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| aliases: ['smart'], // short code | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid The bid params to validate. | |
| * @return boolean True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params && bid.params.siteId && bid.params.pageId && bid.params.formatId && bid.params.domain); | |
| }, | |
| /** | |
| * Make a server request from the list of BidRequests. | |
| * | |
| * @param {validBidRequests[]} - an array of bids | |
| * @return ServerRequest Info describing the request to the server. | |
| */ | |
| buildRequests: function buildRequests(validBidRequests) { | |
| // use bidderRequest.bids[] to get bidder-dependent request info | |
| // if your bidder supports multiple currencies, use config.getConfig(currency) | |
| // to find which one the ad server needs | |
| // pull requested transaction ID from bidderRequest.bids[].transactionId | |
| return validBidRequests.map(function (bid) { | |
| var payload = { | |
| siteid: bid.params.siteId, | |
| pageid: bid.params.pageId, | |
| formatid: bid.params.formatId, | |
| currencyCode: _config.config.getConfig('currency.adServerCurrency'), | |
| bidfloor: bid.params.bidfloor || 0.0, | |
| targeting: bid.params.target && bid.params.target != '' ? bid.params.target : undefined, | |
| tagId: bid.adUnitCode, | |
| sizes: bid.sizes.map(function (size) { | |
| return { | |
| w: size[0], | |
| h: size[1] | |
| }; | |
| }), | |
| pageDomain: utils.getTopWindowUrl(), | |
| transactionId: bid.transactionId, | |
| timeout: _config.config.getConfig('bidderTimeout'), | |
| bidId: bid.bidId | |
| }; | |
| var payloadString = JSON.stringify(payload); | |
| return { | |
| method: 'POST', | |
| url: bid.params.domain + '/prebid/v1', | |
| data: payloadString | |
| }; | |
| }); | |
| }, | |
| /** | |
| * Unpack the response from the server into a list of bids. | |
| * | |
| * @param {*} serverResponse A successful response from the server. | |
| * @return {Bid[]} An array of bids which were nested inside the server. | |
| */ | |
| interpretResponse: function interpretResponse(serverResponse, bidRequest) { | |
| var bidResponses = []; | |
| var response = serverResponse.body; | |
| try { | |
| if (response) { | |
| var bidResponse = { | |
| requestId: JSON.parse(bidRequest.data).bidId, | |
| cpm: response.cpm, | |
| width: response.width, | |
| height: response.height, | |
| creativeId: response.creativeId, | |
| dealId: response.dealId, | |
| currency: response.currency, | |
| netRevenue: response.isNetCpm, | |
| ttl: response.ttl, | |
| referrer: utils.getTopWindowUrl(), | |
| adUrl: response.adUrl, | |
| ad: response.ad | |
| }; | |
| bidResponses.push(bidResponse); | |
| } | |
| } catch (error) { | |
| console.log('Error while parsing smart server response'); | |
| } | |
| return bidResponses; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 328: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[326]); | |
| pbjsChunk([21],{ | |
| /***/ 329: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(330); | |
| module.exports = __webpack_require__(331); | |
| /***/ }), | |
| /***/ 330: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _bidderFactory = __webpack_require__(1); | |
| var _mediaTypes = __webpack_require__(4); | |
| var _utils = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils); | |
| 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 BIDDER_CODE = 'smartyads'; | |
| var URL = '//ssp-nj.webtradehub.com/?c=o&m=multi'; | |
| var URL_SYNC = '//ssp-nj.webtradehub.com/?c=o&m=cookie'; | |
| function isBidResponseValid(bid) { | |
| if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { | |
| return false; | |
| } | |
| switch (bid['mediaType']) { | |
| case _mediaTypes.BANNER: | |
| return Boolean(bid.width && bid.height && bid.ad); | |
| case _mediaTypes.VIDEO: | |
| return Boolean(bid.vastUrl); | |
| case _mediaTypes.NATIVE: | |
| return Boolean(bid.title && bid.image && bid.impressionTrackers); | |
| default: | |
| return false; | |
| } | |
| } | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| supportedMediaTypes: [_mediaTypes.BANNER, _mediaTypes.VIDEO, _mediaTypes.NATIVE], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return Boolean(bid.bidId && bid.params && !isNaN(bid.params.placementId)); | |
| }, | |
| buildRequests: function buildRequests() { | |
| var validBidRequests = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; | |
| var winTop = window; | |
| try { | |
| window.top.location.toString(); | |
| winTop = window.top; | |
| } catch (e) { | |
| utils.logMessage(e); | |
| } | |
| var location = utils.getTopWindowLocation(); | |
| var placements = []; | |
| var request = { | |
| 'deviceWidth': winTop.screen.width, | |
| 'deviceHeight': winTop.screen.height, | |
| 'language': navigator && navigator.language ? navigator.language : '', | |
| 'secure': location.protocol === 'https:' ? 1 : 0, | |
| 'host': location.host, | |
| 'page': location.pathname, | |
| 'placements': placements | |
| }; | |
| var len = validBidRequests.length; | |
| for (var i = 0; i < len; i++) { | |
| var bid = validBidRequests[i]; | |
| placements.push({ | |
| placementId: bid.params.placementId, | |
| bidId: bid.bidId, | |
| traffic: bid.params.traffic || _mediaTypes.BANNER | |
| }); | |
| } | |
| return { | |
| method: 'POST', | |
| url: URL, | |
| data: request | |
| }; | |
| }, | |
| interpretResponse: function interpretResponse(serverResponse) { | |
| var response = []; | |
| serverResponse = serverResponse.body; | |
| for (var i = 0; i < serverResponse.length; i++) { | |
| var resItem = serverResponse[i]; | |
| if (isBidResponseValid(resItem)) { | |
| delete resItem.mediaType; | |
| response.push(resItem); | |
| } | |
| } | |
| return response; | |
| }, | |
| getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { | |
| return [{ | |
| type: 'image', | |
| url: URL_SYNC | |
| }]; | |
| } | |
| }; | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 331: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[329]); | |
| pbjsChunk([20],{ | |
| /***/ 332: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(333); | |
| module.exports = __webpack_require__(334); | |
| /***/ }), | |
| /***/ 333: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = undefined; | |
| var _utils = __webpack_require__(0); | |
| var _bidderFactory = __webpack_require__(1); | |
| var spec = exports.spec = { | |
| code: 'somoaudience', | |
| aliases: ['somo'], | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid && bid.params && bid.params.placementId); | |
| }, | |
| buildRequests: function buildRequests(bidRequests) { | |
| return bidRequests.map(function (bidRequest) { | |
| return { | |
| method: 'POST', | |
| url: '//publisher-east.mobileadtrading.com/rtb/bid?s=' + bidRequest.params.placementId.toString(), | |
| data: openRtbRequest(bidRequest), | |
| bidRequest: bidRequest | |
| }; | |
| }); | |
| }, | |
| interpretResponse: function interpretResponse(response, request) { | |
| return bidResponseAvailable(request, response); | |
| } | |
| }; | |
| function bidResponseAvailable(bidRequest, bidResponse) { | |
| var bidResponses = []; | |
| var bidId = 1; | |
| if (typeof bidRequest != 'undefined' && typeof bidRequest.bidRequest != 'undefined' && typeof bidRequest.bidRequest.bidId != 'undefined') { | |
| bidId = bidRequest.bidRequest.bidId; | |
| } | |
| if (bidResponse.body) { | |
| var bidData = bidResponse.body.seatbid[0].bid[0]; | |
| var bid = { | |
| requestId: bidId, | |
| cpm: bidData.price, | |
| width: bidData.w, | |
| height: bidData.h, | |
| ad: bidData.adm, | |
| ttl: 360, | |
| creativeId: bidData.crid, | |
| adId: bidId, | |
| netRevenue: false, | |
| currency: 'USD' | |
| }; | |
| bidResponses.push(bid); | |
| } | |
| return bidResponses; | |
| } | |
| function openRtbRequest(bidRequest) { | |
| return { | |
| id: bidRequest.bidderRequestId, | |
| imp: [openRtbImpression(bidRequest)], | |
| at: 1, | |
| tmax: 400, | |
| site: openRtbSite(bidRequest), | |
| app: openRtbApp(bidRequest), | |
| device: openRtbDevice() | |
| }; | |
| } | |
| function openRtbImpression(bidRequest) { | |
| return { | |
| id: bidRequest.bidId, | |
| banner: {} | |
| }; | |
| } | |
| function isApp(bidRequest) { | |
| if (bidRequest.params.app) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| function openRtbSite(bidRequest) { | |
| if (!isApp(bidRequest)) { | |
| var pageUrl = (0, _utils.getTopWindowLocation)().href; | |
| var domain = (0, _utils.getTopWindowLocation)().hostname; | |
| return { | |
| ref: (0, _utils.getTopWindowReferrer)(), | |
| page: pageUrl, | |
| domain: domain | |
| }; | |
| } else { | |
| return null; | |
| } | |
| } | |
| function openRtbApp(bidRequest) { | |
| if (isApp(bidRequest)) { | |
| var appParams = bidRequest.params.app; | |
| return { | |
| bundle: appParams.bundle ? appParams.bundle : null, | |
| storeurl: appParams.storeUrl ? appParams.storeUrl : null, | |
| domain: appParams.domain ? appParams.domain : null, | |
| name: appParams.name ? appParams.name : null | |
| }; | |
| } else { | |
| return null; | |
| } | |
| } | |
| function openRtbDevice() { | |
| return { | |
| ua: navigator.userAgent, | |
| language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage | |
| }; | |
| } | |
| (0, _bidderFactory.registerBidder)(spec); | |
| /***/ }), | |
| /***/ 334: | |
| /***/ (function(module, exports) { | |
| /***/ }) | |
| },[332]); | |
| pbjsChunk([19],{ | |
| /***/ 335: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| __webpack_require__(336); | |
| module.exports = __webpack_require__(337); | |
| /***/ }), | |
| /***/ 336: | |
| /***/ (function(module, exports, __webpack_require__) { | |
| "use strict"; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.spec = 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 _bidderFactory = __webpack_require__(1); | |
| var _utils = __webpack_require__(0); | |
| var _utils2 = __webpack_require__(0); | |
| var utils = _interopRequireWildcard(_utils2); | |
| 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 _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 BIDDER_CODE = 'sonobi'; | |
| var STR_ENDPOINT = 'https://apex.go.sonobi.com/trinity.json'; | |
| var PAGEVIEW_ID = utils.generateUUID(); | |
| var spec = exports.spec = { | |
| code: BIDDER_CODE, | |
| /** | |
| * Determines whether or not the given bid request is valid. | |
| * | |
| * @param {BidRequest} bid - The bid params to validate. | |
| * @return {boolean} True if this is a valid bid, and false otherwise. | |
| */ | |
| isBidRequestValid: function isBidRequestValid(bid) { | |
| return !!(bid.params && |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment