diff --git a/build/dist/1ad4goodBidAdapter.js b/build/dist/1ad4goodBidAdapter.js new file mode 100644 index 00000000000..98fc9453d5a --- /dev/null +++ b/build/dist/1ad4goodBidAdapter.js @@ -0,0 +1,485 @@ +pbjsChunk([322],{ + +/***/ 94: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(95); + + +/***/ }), + +/***/ 95: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + +var BIDDER_CODE = '1ad4good'; +var URL = 'https://hb.1ad4good.org/prebid'; +var VIDEO_TARGETING = ['id', 'mimes', 'minduration', 'maxduration', 'startdelay', 'skippable', 'playback_method', 'frameworks']; +var USER_PARAMS = ['age', 'externalUid', 'segments', 'gender', 'dnt', 'language']; +var APP_DEVICE_PARAMS = ['geo', 'device_id']; // appid is collected separately + +var SOURCE = 'pbjs'; +var MAX_IMPS_PER_REQUEST = 15; +var spec = { + code: BIDDER_CODE, + aliases: ['adsforgood', 'ads4good', '1adsforgood'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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.placementId; + }, + + /** + * 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 = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasUserInfo); + var userObj; + + if (userObjBid) { + userObj = {}; + Object.keys(userObjBid.params.user).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(USER_PARAMS, param); + }).forEach(function (param) { + return userObj[param] = userObjBid.params.user[param]; + }); + } + + var appDeviceObjBid = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasAppDeviceInfo); + var appDeviceObj; + + if (appDeviceObjBid && appDeviceObjBid.params && appDeviceObjBid.params.app) { + appDeviceObj = {}; + Object.keys(appDeviceObjBid.params.app).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(APP_DEVICE_PARAMS, param); + }).forEach(function (param) { + return appDeviceObj[param] = appDeviceObjBid.params.app[param]; + }); + } + + var appIdObjBid = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasAppId); + var appIdObj; + + if (appIdObjBid && appIdObjBid.params && appDeviceObjBid.params.app && appDeviceObjBid.params.app.id) { + appIdObj = { + appid: appIdObjBid.params.app.id + }; + } + + var payload = { + tags: _toConsumableArray(tags), + user: userObj, + sdk: { + source: SOURCE, + version: "4.2.0" + } + }; + + if (appDeviceObjBid) { + payload.device = appDeviceObj; + } + + if (appIdObjBid) { + payload.app = appIdObj; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + // note - objects for impbus use underscore instead of camelCase + payload.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + + if (bidderRequest && bidderRequest.refererInfo) { + var refererinfo = { + rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + rd_top: bidderRequest.refererInfo.reachedTop, + rd_ifs: bidderRequest.refererInfo.numIframes, + rd_stk: bidderRequest.refererInfo.stack.map(function (url) { + return encodeURIComponent(url); + }).join(',') + }; + payload.referrer_detection = refererinfo; + } + + var request = formatRequest(payload, bidderRequest); + return 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, _ref) { + var _this = this; + + var bidderRequest = _ref.bidderRequest; + serverResponse = serverResponse.body; + var bids = []; + + if (!serverResponse || serverResponse.error) { + var errorMessage = "in response for ".concat(bidderRequest.bidderCode, " adapter"); + + if (serverResponse && serverResponse.error) { + errorMessage += ": ".concat(serverResponse.error); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bids; + } + + if (serverResponse.tags) { + serverResponse.tags.forEach(function (serverBid) { + var rtbBid = getRtbBid(serverBid); + + if (rtbBid) { + if (rtbBid.cpm !== 0 && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(_this.supportedMediaTypes, rtbBid.ad_type)) { + var bid = newBid(serverBid, rtbBid, bidderRequest); + bid.mediaType = parseMediaType(rtbBid); + bids.push(bid); + } + } + }); + } + + return bids; + }, + transformBidParams: function transformBidParams(params, isOpenRtb) { + params = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'placementId': 'number', + 'keywords': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"] + }, params); + + if (isOpenRtb) { + params.use_pmt_rule = typeof params.usePaymentRule === 'boolean' ? params.usePaymentRule : false; + + if (params.usePaymentRule) { + delete params.usePaymentRule; + } + + if (isPopulatedArray(params.keywords)) { + params.keywords.forEach(deleteValues); + } + + Object.keys(params).forEach(function (paramKey) { + var convertedKey = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertCamelToUnderscore"](paramKey); + + if (convertedKey !== paramKey) { + params[convertedKey] = params[paramKey]; + delete params[paramKey]; + } + }); + } + + return params; + }, + + /** + * Add element selector to javascript tracker to improve native viewability + * @param {Bid} bid + */ + onBidWon: function onBidWon(bid) {} +}; + +function isPopulatedArray(arr) { + return !!(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](arr) && arr.length > 0); +} + +function deleteValues(keyPairObj) { + if (isPopulatedArray(keyPairObj.value) && keyPairObj.value[0] === '') { + delete keyPairObj.value; + } +} + +function formatRequest(payload, bidderRequest) { + var request = []; + + if (payload.tags.length > MAX_IMPS_PER_REQUEST) { + var clonedPayload = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](payload); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["chunk"](payload.tags, MAX_IMPS_PER_REQUEST).forEach(function (tags) { + clonedPayload.tags = tags; + var payloadString = JSON.stringify(clonedPayload); + request.push({ + method: 'POST', + url: URL, + data: payloadString, + bidderRequest: bidderRequest + }); + }); + } else { + var payloadString = JSON.stringify(payload); + request = { + method: 'POST', + url: URL, + data: payloadString, + bidderRequest: bidderRequest + }; + } + + return request; +} +/** + * Unpack the Server's Bid into a Prebid-compatible one. + * @param serverBid + * @param rtbBid + * @param bidderRequest + * @return Bid + */ + + +function newBid(serverBid, rtbBid, bidderRequest) { + var bidRequest = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidRequest"](serverBid.uuid, [bidderRequest]); + var bid = { + requestId: serverBid.uuid, + cpm: rtbBid.cpm, + creativeId: rtbBid.creative_id, + dealId: rtbBid.deal_id, + currency: 'USD', + netRevenue: true, + ttl: 300, + adUnitCode: bidRequest.adUnitCode, + ads4good: { + buyerMemberId: rtbBid.buyer_member_id, + dealPriority: rtbBid.deal_priority, + dealCode: rtbBid.deal_code + } + }; + + if (rtbBid.advertiser_id) { + bid.meta = _extends({}, bid.meta, { + advertiserId: rtbBid.advertiser_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, + vastImpUrl: rtbBid.notify_url, + ttl: 3600 + }); + } 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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"](url); + bid.ad += tracker; + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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); + } + + if (bid.params.cpm) { + tag.cpm = bid.params.cpm; + } + + 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 (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.params.keywords)) { + var keywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"](bid.params.keywords); + + if (keywords.length > 0) { + keywords.forEach(deleteValues); + } + + tag.keywords = keywords; + } + + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */])); + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] || videoMediaType) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]); + } // instream gets vastUrl, outstream gets vastXml + + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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 __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).forEach(function (param) { + return tag.video[param] = bid.params.video[param]; + }); + } + + if (bid.renderer) { + tag.video = _extends({}, tag.video, { + custom_renderer_present: true + }); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.mediaType) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.mediaTypes) || bid.mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */] || bid.mediaTypes && bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]]) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]); + } + + return tag; +} +/* Turn bid request sizes into ut-compatible format */ + + +function transformSizes(requestSizes) { + var sizes = []; + var sizeObj = {}; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes) && requestSizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes[0])) { + sizeObj.width = parseInt(requestSizes[0], 10); + sizeObj.height = parseInt(requestSizes[1], 10); + sizes.push(sizeObj); + } else if (_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 hasAppDeviceInfo(bid) { + if (bid.params) { + return !!bid.params.app; + } +} + +function hasAppId(bid) { + if (bid.params && bid.params.app) { + return !!bid.params.app.id; + } + + return !!bid.params.app; +} + +function getRtbBid(tag) { + return tag && tag.ads && tag.ads.length && __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(tag.ads, function (ad) { + return ad.rtb; + }); +} + +function parseMediaType(rtbBid) { + var adType = rtbBid.ad_type; + + if (adType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]) { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + } else { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[94]); \ No newline at end of file diff --git a/build/dist/33acrossBidAdapter.js b/build/dist/33acrossBidAdapter.js new file mode 100644 index 00000000000..f9ba3487751 --- /dev/null +++ b/build/dist/33acrossBidAdapter.js @@ -0,0 +1,464 @@ +pbjsChunk([321],{ + +/***/ 162: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(163); + + +/***/ }), + +/***/ 163: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + +var BIDDER_CODE = '33across'; +var END_POINT = 'https://ssc.33across.com/api/v1/hb'; +var SYNC_ENDPOINT = 'https://ssc-cms.33across.com/ps/?m=xch&rt=html&ru=deb'; +var MEDIA_TYPE = 'banner'; +var CURRENCY = 'USD'; +var adapterState = { + uniqueSiteIds: [] +}; +var NON_MEASURABLE = 'nm'; // 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 + }; +} + +function _isViewabilityMeasurable(element) { + return !_isIframe() && element !== null; +} + +function _getViewability(element, topWin) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref.w, + h = _ref.h; + + return topWin.document.visibilityState === 'visible' ? _getPercentInView(element, topWin, { + w: w, + h: h + }) : 0; +} + +function _mapAdUnitPathToElementId(adUnitCode) { + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isGptPubadsDefined"]()) { + // eslint-disable-next-line no-undef + var adSlots = googletag.pubads().getSlots(); + var isMatchingAdSlot = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isSlotMatchingAdUnitCode"](adUnitCode); + + for (var i = 0; i < adSlots.length; i++) { + if (isMatchingAdSlot(adSlots[i])) { + var id = adSlots[i].getSlotElementId(); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"]("[33Across Adapter] Map ad unit path to HTML element id: '".concat(adUnitCode, "' -> ").concat(id)); + return id; + } + } + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]("[33Across Adapter] Unable to locate element for ad unit code: '".concat(adUnitCode, "'")); + return null; +} + +function _getAdSlotHTMLElement(adUnitCode) { + return document.getElementById(adUnitCode) || document.getElementById(_mapAdUnitPathToElementId(adUnitCode)); +} // Infer the necessary data from valid bid for a minimal ttxRequest and create HTTP request +// NOTE: At this point, TTX only accepts request for a single impression + + +function _createServerRequest(_ref2) { + var bidRequest = _ref2.bidRequest, + _ref2$gdprConsent = _ref2.gdprConsent, + gdprConsent = _ref2$gdprConsent === void 0 ? {} : _ref2$gdprConsent, + uspConsent = _ref2.uspConsent, + pageUrl = _ref2.pageUrl; + var ttxRequest = {}; + var params = bidRequest.params; + + var element = _getAdSlotHTMLElement(bidRequest.adUnitCode); + + var sizes = _transformSizes(bidRequest.sizes); + + var format; // We support size based bidfloors so obtain one if there's a rule associated + + if (typeof bidRequest.getFloor === 'function') { + var getFloor = bidRequest.getFloor.bind(bidRequest); + format = sizes.map(function (size) { + var formatExt = _getBidFloors(getFloor, size); + + return _extends({}, size, formatExt); + }); + } else { + format = sizes; + } + + var minSize = _getMinSize(sizes); + + var viewabilityAmount = _isViewabilityMeasurable(element) ? _getViewability(element, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getWindowTop"](), minSize) : NON_MEASURABLE; + var contributeViewability = ViewabilityContributor(viewabilityAmount); + /* + * Infer data for the request payload + */ + + ttxRequest.imp = []; + ttxRequest.imp[0] = { + banner: { + format: format + }, + ext: { + ttx: { + prod: params.productId + } + } + }; + ttxRequest.site = { + id: params.siteId + }; + + if (pageUrl) { + ttxRequest.site.page = pageUrl; + } // 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; // Set GDPR related fields + + ttxRequest.user = { + ext: { + consent: gdprConsent.consentString + } + }; + ttxRequest.regs = { + ext: { + gdpr: gdprConsent.gdprApplies === true ? 1 : 0, + us_privacy: uspConsent || null + } + }; + ttxRequest.ext = { + ttx: { + prebidStartedAt: Date.now(), + caller: [{ + 'name': 'prebidjs', + 'version': "4.2.0" + }] + } + }; + + if (bidRequest.schain) { + ttxRequest.source = { + ext: { + schain: bidRequest.schain + } + }; + } // Finally, set the openRTB 'test' param if this is to be a test bid + + + if (params.test === 1) { + ttxRequest.test = 1; + } + /* + * Now construct the full server request + */ + + + var options = { + contentType: 'text/plain', + withCredentials: true + }; // Allow the ability to configure the HB endpoint for testing purposes. + + var ttxSettings = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('ttxSettings'); + var url = ttxSettings && ttxSettings.url || END_POINT; // Return the server request + + return { + 'method': 'POST', + 'url': url, + 'data': JSON.stringify(contributeViewability(ttxRequest)), + 'options': options + }; +} // Sync object will always be of type iframe for TTX + + +function _createSync(_ref3) { + var _ref3$siteId = _ref3.siteId, + siteId = _ref3$siteId === void 0 ? 'zzz000000000003zzz' : _ref3$siteId, + _ref3$gdprConsent = _ref3.gdprConsent, + gdprConsent = _ref3$gdprConsent === void 0 ? {} : _ref3$gdprConsent, + uspConsent = _ref3.uspConsent; + var ttxSettings = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('ttxSettings'); + var syncUrl = ttxSettings && ttxSettings.syncUrl || SYNC_ENDPOINT; + var consentString = gdprConsent.consentString, + gdprApplies = gdprConsent.gdprApplies; + var sync = { + type: 'iframe', + url: "".concat(syncUrl, "&id=").concat(siteId, "&gdpr_consent=").concat(encodeURIComponent(consentString), "&us_privacy=").concat(encodeURIComponent(uspConsent)) + }; + + if (typeof gdprApplies === 'boolean') { + sync.url += "&gdpr=".concat(Number(gdprApplies)); + } + + return sync; +} + +function _getBidFloors(getFloor, size) { + var bidFloors = getFloor({ + currency: CURRENCY, + mediaType: MEDIA_TYPE, + size: [size.w, size.h] + }); + + if (!isNaN(bidFloors.floor) && bidFloors.currency === CURRENCY) { + return { + ext: { + ttx: { + bidfloors: [bidFloors.floor] + } + } + }; + } +} + +function _getSize(size) { + return { + w: parseInt(size[0], 10), + h: parseInt(size[1], 10) + }; +} + +function _getMinSize(sizes) { + return sizes.reduce(function (min, size) { + return size.h * size.w < min.h * min.w ? size : min; + }); +} + +function _getBoundingBox(element) { + var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + w = _ref4.w, + h = _ref4.h; + + var _element$getBoundingC = element.getBoundingClientRect(), + width = _element$getBoundingC.width, + height = _element$getBoundingC.height, + left = _element$getBoundingC.left, + top = _element$getBoundingC.top, + right = _element$getBoundingC.right, + bottom = _element$getBoundingC.bottom; + + if ((width === 0 || height === 0) && w && h) { + width = w; + height = h; + right = left + w; + bottom = top + h; + } + + return { + width: width, + height: height, + left: left, + top: top, + right: right, + bottom: bottom + }; +} + +function _transformSizes(sizes) { + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](sizes) && sizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](sizes[0])) { + return [_getSize(sizes)]; + } + + return sizes.map(_getSize); +} + +function _getIntersectionOfRects(rects) { + var bbox = { + left: rects[0].left, + right: rects[0].right, + top: rects[0].top, + bottom: rects[0].bottom + }; + + for (var i = 1; i < rects.length; ++i) { + bbox.left = Math.max(bbox.left, rects[i].left); + bbox.right = Math.min(bbox.right, rects[i].right); + + if (bbox.left >= bbox.right) { + return null; + } + + bbox.top = Math.max(bbox.top, rects[i].top); + bbox.bottom = Math.min(bbox.bottom, rects[i].bottom); + + if (bbox.top >= bbox.bottom) { + return null; + } + } + + bbox.width = bbox.right - bbox.left; + bbox.height = bbox.bottom - bbox.top; + return bbox; +} + +function _getPercentInView(element, topWin) { + var _ref5 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref5.w, + h = _ref5.h; + + var elementBoundingBox = _getBoundingBox(element, { + w: w, + h: h + }); // Obtain the intersection of the element and the viewport + + + var elementInViewBoundingBox = _getIntersectionOfRects([{ + left: 0, + top: 0, + right: topWin.innerWidth, + bottom: topWin.innerHeight + }, elementBoundingBox]); + + var elementInViewArea, elementTotalArea; + + if (elementInViewBoundingBox !== null) { + // Some or all of the element is in view + elementInViewArea = elementInViewBoundingBox.width * elementInViewBoundingBox.height; + elementTotalArea = elementBoundingBox.width * elementBoundingBox.height; + return elementInViewArea / elementTotalArea * 100; + } // No overlap between element and the viewport; therefore, the element + // lies completely out of view + + + return 0; +} +/** + * Viewability contribution to request.. + */ + + +function ViewabilityContributor(viewabilityAmount) { + function contributeViewability(ttxRequest) { + var req = _extends({}, ttxRequest); + + var imp = req.imp = req.imp.map(function (impItem) { + return _extends({}, impItem); + }); + + var banner = imp[0].banner = _extends({}, imp[0].banner); + + var ext = banner.ext = _extends({}, banner.ext); + + var ttx = ext.ttx = _extends({}, ext.ttx); + + ttx.viewability = { + amount: isNaN(viewabilityAmount) ? viewabilityAmount : Math.round(viewabilityAmount) + }; + return req; + } + + return contributeViewability; +} + +function _isIframe() { + try { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getWindowSelf"]() !== __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getWindowTop"](); + } catch (e) { + return true; + } +} + +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: With regards to gdrp consent data, +// - the server independently infers gdpr applicability therefore, setting the default value to false + + +function buildRequests(bidRequests, bidderRequest) { + var gdprConsent = _extends({ + consentString: undefined, + gdprApplies: false + }, bidderRequest && bidderRequest.gdprConsent); + + var uspConsent = bidderRequest && bidderRequest.uspConsent; + var pageUrl = bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : undefined; + adapterState.uniqueSiteIds = bidRequests.map(function (req) { + return req.params.siteId; + }).filter(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["uniques"]); + return bidRequests.map(function (bidRequest) { + return _createServerRequest({ + bidRequest: bidRequest, + gdprConsent: gdprConsent, + uspConsent: uspConsent, + pageUrl: pageUrl + }); + }); +} // NOTE: At this point, the response from 33exchange will only ever contain one bid i.e. the highest bid + + +function interpretResponse(serverResponse, bidRequest) { + 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; +} // Register one sync per unique guid so long as iframe is enable +// Else no syncs +// For logic on how we handle gdpr data see _createSyncs and module's unit tests +// '33acrossBidAdapter#getUserSyncs' + + +function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + var syncUrls = syncOptions.iframeEnabled ? adapterState.uniqueSiteIds.map(function (siteId) { + return _createSync({ + gdprConsent: gdprConsent, + uspConsent: uspConsent, + siteId: siteId + }); + }) : []; // Clear adapter state of siteID's since we don't need this info anymore. + + adapterState.uniqueSiteIds = []; + return syncUrls; +} + +var spec = { + NON_MEASURABLE: NON_MEASURABLE, + code: BIDDER_CODE, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[162]); \ No newline at end of file diff --git a/build/dist/7xbidBidAdapter.js b/build/dist/7xbidBidAdapter.js new file mode 100644 index 00000000000..0867471e4fc --- /dev/null +++ b/build/dist/7xbidBidAdapter.js @@ -0,0 +1,189 @@ +pbjsChunk([320],{ + +/***/ 164: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(165); + + +/***/ }), + +/***/ 165: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_getUrlVars", function() { return _getUrlVars; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = '7xbid'; +var BIDDER_ALIAS = '7xb'; +var ENDPOINT_BANNER = '//bidder.7xbid.com/api/v1/prebid/banner'; +var ENDPOINT_NATIVE = '//bidder.7xbid.com/api/v1/prebid/native'; +var COOKIE_SYNC_URL = '//bidder.7xbid.com/api/v1/cookie/gen'; +var SUPPORTED_MEDIA_TYPES = ['banner', 'native']; +var SUPPORTED_CURRENCIES = ['USD', 'JPY']; +var DEFAULT_CURRENCY = 'JPY'; +var NET_REVENUE = true; +/** + * updated to support prebid 3.0 - remove utils.getTopWindowUrl() + */ + +var _encodeURIComponent = function _encodeURIComponent(a) { + var b = window.encodeURIComponent(a); + b = b.replace(/'/g, '%27'); + return b; +}; + +var _getUrlVars = function _getUrlVars(url) { + var hash; + var myJson = {}; + var hashes = url.slice(url.indexOf('?') + 1).split('&'); + + for (var i = 0; i < hashes.length; i++) { + hash = hashes[i].split('='); + myJson[hash[0]] = hash[1]; + } + + return myJson; +}; +var spec = { + code: BIDDER_CODE, + aliases: [BIDDER_ALIAS], + // short code + supportedMediaTypes: SUPPORTED_MEDIA_TYPES, + isBidRequestValid: function isBidRequestValid(bid) { + if (!bid.params.placementId) { + return false; + } + + if (bid.params.hasOwnProperty('currency') && SUPPORTED_CURRENCIES.indexOf(bid.params.currency) === -1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Invalid currency type, we support only JPY and USD!'); + 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, bidderRequest) { + var serverRequests = []; + var refererInfo; + + if (bidderRequest && bidderRequest.refererInfo) { + refererInfo = bidderRequest.refererInfo; + } + + validBidRequests.forEach(function (bid, i) { + var endpoint = ENDPOINT_BANNER; + var data = { + 'placementid': bid.params.placementId, + 'cur': bid.params.hasOwnProperty('currency') ? bid.params.currency : DEFAULT_CURRENCY, + 'ua': navigator.userAgent, + 'loc': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.referer'), + 'topframe': window.parent === window.self ? 1 : 0, + 'sw': screen && screen.width, + 'sh': screen && screen.height, + 'cb': Math.floor(Math.random() * 99999999999), + 'tpaf': 1, + 'cks': 1, + 'requestid': bid.bidId + }; + + if (bid.hasOwnProperty('nativeParams')) { + endpoint = ENDPOINT_NATIVE; + data.tkf = 1; // return url tracker + + data.ad_track = '1'; + data.apiv = '1.1.0'; + } + + if (refererInfo && refererInfo.referer) { + data.referer = refererInfo.referer; + } else { + data.referer = ''; + } + + serverRequests.push({ + method: 'GET', + url: endpoint, + data: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](data) + }); + }); + return serverRequests; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var data = _getUrlVars(request.data); + + var successBid = serverResponse.body || {}; + var bidResponses = []; + + if (successBid.hasOwnProperty(data.placementid)) { + var bid = successBid[data.placementid]; + var bidResponse = { + requestId: bid.requestid, + cpm: bid.price, + creativeId: bid.creativeId, + currency: bid.cur, + netRevenue: NET_REVENUE, + ttl: 700 + }; + + if (bid.hasOwnProperty('title')) { + // it is native ad response + bidResponse.mediaType = 'native'; + bidResponse.native = { + title: bid.title, + body: bid.description, + cta: bid.cta, + sponsoredBy: bid.advertiser, + clickUrl: _encodeURIComponent(bid.landingURL), + impressionTrackers: bid.trackings + }; + + if (bid.screenshots) { + bidResponse.native.image = { + url: bid.screenshots.url, + height: bid.screenshots.height, + width: bid.screenshots.width + }; + } + + if (bid.icon) { + bidResponse.native.icon = { + url: bid.icon.url, + height: bid.icon.height, + width: bid.icon.width + }; + } + } else { + bidResponse.ad = bid.adm; + bidResponse.width = bid.width; + bidResponse.height = bid.height; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + return [{ + type: 'image', + url: COOKIE_SYNC_URL + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[164]); \ No newline at end of file diff --git a/build/dist/aardvarkBidAdapter.js b/build/dist/aardvarkBidAdapter.js new file mode 100644 index 00000000000..4e98308d965 --- /dev/null +++ b/build/dist/aardvarkBidAdapter.js @@ -0,0 +1,293 @@ +pbjsChunk([319],{ + +/***/ 166: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(167); + + +/***/ }), + +/***/ 167: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["hasValidSupplyChainParams"] = hasValidSupplyChainParams; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'aardvark'; +var DEFAULT_ENDPOINT = 'bidder.rtk.io'; +var SYNC_ENDPOINT = 'sync.rtk.io'; +var AARDVARK_TTL = 300; +var AARDVARK_CURRENCY = 'USD'; +var hasSynced = false; +function resetUserSync() { + hasSynced = false; +} +var spec = { + code: BIDDER_CODE, + gvlid: 52, + aliases: ['adsparc', 'safereach'], + isBidRequestValid: function isBidRequestValid(bid) { + return typeof bid.params.ai === 'string' && !!bid.params.ai.length && typeof bid.params.sc === 'string' && !!bid.params.sc.length; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var auctionCodes = []; + var requests = []; + var requestsMap = {}; + var referer = bidderRequest.refererInfo.referer; + var pageCategories = []; + var tdId = ''; + var width = window.innerWidth; + var height = window.innerHeight; + var schain = ''; // This reference to window.top can cause issues when loaded in an iframe if not protected with a try/catch. + + try { + var topWin = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](); + + if (topWin.rtkcategories && Array.isArray(topWin.rtkcategories)) { + pageCategories = topWin.rtkcategories; + } + + width = topWin.innerWidth; + height = topWin.innerHeight; + } catch (e) {} + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests, '0.userId.tdid'))) { + tdId = validBidRequests[0].userId.tdid; + } + + schain = spec.serializeSupplyChain(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests, '0.schain')); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (b) { + var rMap = requestsMap[b.params.ai]; + + if (!rMap) { + rMap = { + shortCodes: [], + payload: { + version: 1, + jsonp: false, + rtkreferer: referer, + w: width, + h: height + }, + endpoint: DEFAULT_ENDPOINT + }; + + if (tdId) { + rMap.payload.tdid = tdId; + } + + if (schain) { + rMap.payload.schain = schain; + } + + if (pageCategories && pageCategories.length) { + rMap.payload.categories = pageCategories.slice(0); + } + + if (b.params.categories && b.params.categories.length) { + rMap.payload.categories = rMap.payload.categories || []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](b.params.categories, function (cat) { + rMap.payload.categories.push(cat); + }); + } + + if (bidderRequest.gdprConsent) { + rMap.payload.gdpr = false; + + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + rMap.payload.gdpr = bidderRequest.gdprConsent.gdprApplies; + } + + if (rMap.payload.gdpr) { + rMap.payload.consent = bidderRequest.gdprConsent.consentString; + } + } + + requestsMap[b.params.ai] = rMap; + auctionCodes.push(b.params.ai); + } + + if (bidderRequest.uspConsent) { + rMap.payload.us_privacy = bidderRequest.uspConsent; + } + + rMap.shortCodes.push(b.params.sc); + rMap.payload[b.params.sc] = b.bidId; + + if (typeof b.params.host === 'string' && b.params.host.length && b.params.host !== rMap.endpoint) { + rMap.endpoint = b.params.host; + } + }); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](auctionCodes, function (auctionId) { + var req = requestsMap[auctionId]; + requests.push({ + method: 'GET', + url: "https://".concat(req.endpoint, "/").concat(auctionId, "/").concat(req.shortCodes.join('_'), "/aardvark"), + data: req.payload, + bidderRequest: bidderRequest + }); + }); + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + + if (!Array.isArray(serverResponse.body)) { + serverResponse.body = [serverResponse.body]; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body, function (rawBid) { + var cpm = +(rawBid.cpm || 0); + + if (!cpm) { + return; + } + + var bidResponse = { + requestId: rawBid.cid, + cpm: cpm, + width: rawBid.width || 0, + height: rawBid.height || 0, + currency: rawBid.currency ? rawBid.currency : AARDVARK_CURRENCY, + netRevenue: rawBid.netRevenue ? rawBid.netRevenue : true, + ttl: rawBid.ttl ? rawBid.ttl : AARDVARK_TTL, + creativeId: rawBid.creativeId || 0 + }; + + if (rawBid.hasOwnProperty('dealId')) { + bidResponse.dealId = rawBid.dealId; + } + + if (rawBid.hasOwnProperty('ex')) { + bidResponse.ex = rawBid.ex; + } + + switch (rawBid.media) { + case 'banner': + bidResponse.ad = rawBid.adm + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"](decodeURIComponent(rawBid.nurl)); + break; + + default: + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('bad Aardvark response (media)', rawBid); + } + + bidResponses.push(bidResponse); + }); + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + var syncs = []; + var params = []; + var gdprApplies = false; + + if (gdprConsent && typeof gdprConsent.gdprApplies === 'boolean') { + gdprApplies = gdprConsent.gdprApplies; + } + + if (!syncOptions.iframeEnabled) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Aardvark: Please enable iframe based user sync.'); + return syncs; + } + + if (hasSynced) { + return syncs; + } + + hasSynced = true; + + if (gdprApplies) { + params.push(['g', '1']); + params.push(['c', gdprConsent.consentString]); + } + + if (uspConsent) { + params.push(['us_privacy', uspConsent]); + } + + var queryStr = ''; + + if (params.length) { + queryStr = '?' + params.map(function (p) { + return p[0] + '=' + encodeURIComponent(p[1]); + }).join('&'); + } + + syncs.push({ + type: 'iframe', + url: "https://".concat(SYNC_ENDPOINT, "/cs").concat(queryStr) + }); + return syncs; + }, + + /** + * Serializes schain params according to OpenRTB requirements + * @param {Object} supplyChain + * @returns {String} + */ + serializeSupplyChain: function serializeSupplyChain(supplyChain) { + if (!hasValidSupplyChainParams(supplyChain)) { + return ''; + } + + return "".concat(supplyChain.ver, ",").concat(supplyChain.complete, "!").concat(spec.serializeSupplyChainNodes(supplyChain.nodes)); + }, + + /** + * Properly sorts schain object params + * @param {Array} nodes + * @returns {String} + */ + serializeSupplyChainNodes: function serializeSupplyChainNodes(nodes) { + var nodePropOrder = ['asi', 'sid', 'hp', 'rid', 'name', 'domain']; + return nodes.map(function (node) { + return nodePropOrder.map(function (prop) { + return encodeURIComponent(node[prop] || ''); + }).join(','); + }).join('!'); + } +}; +/** + * Make sure the required params are present + * @param {Object} schain + * @param {Bool} + */ + +function hasValidSupplyChainParams(schain) { + if (!schain || !schain.nodes) { + return false; + } + + var requiredFields = ['asi', 'sid', 'hp']; + var isValid = schain.nodes.reduce(function (status, node) { + if (!status) { + return status; + } + + return requiredFields.every(function (field) { + return node[field]; + }); + }, true); + + if (!isValid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Aardvark: required schain params missing'); + } + + return isValid; +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[166]); \ No newline at end of file diff --git a/build/dist/ablidaBidAdapter.js b/build/dist/ablidaBidAdapter.js new file mode 100644 index 00000000000..cc8bbf41b7e --- /dev/null +++ b/build/dist/ablidaBidAdapter.js @@ -0,0 +1,131 @@ +pbjsChunk([318],{ + +/***/ 168: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(169); + + +/***/ }), + +/***/ 169: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); + + + + +var BIDDER_CODE = 'ablida'; +var ENDPOINT_URL = 'https://bidder.ablida.net/prebid'; +var 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.placementId; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @return Array Info describing the request to the server. + * @param validBidRequests + * @param bidderRequest + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (validBidRequests.length === 0) { + return []; + } + + return validBidRequests.map(function (bidRequest) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.sizes)[0]; + var size = sizes.split('x'); + var jaySupported = 'atob' in window && 'currentScript' in document; + var device = getDevice(); + var payload = { + placementId: bidRequest.params.placementId, + width: size[0], + height: size[1], + bidId: bidRequest.bidId, + categories: bidRequest.params.categories, + referer: bidderRequest.refererInfo.referer, + jaySupported: jaySupported, + device: device, + adapterVersion: 2 + }; + return { + method: 'POST', + url: ENDPOINT_URL, + data: payload + }; + }); + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {ServerResponse} 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 = []; + var response = serverResponse.body; + response.forEach(function (bid) { + bid.ttl = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'); + bidResponses.push(bid); + }); + return bidResponses; + }, + onBidWon: function onBidWon(bid) { + if (!bid['nurl']) { + return false; + } + + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(bid['nurl'], null); + return true; + } +}; + +function getDevice() { + var ua = navigator.userAgent; + var topWindow = window.top; + + if (/(ipad|xoom|sch-i800|playbook|silk|tablet|kindle)|(android(?!.*mobi))/i.test(ua)) { + return 'tablet'; + } + + if (/(smart[-]?tv|hbbtv|appletv|googletv|hdmi|netcast\.tv|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b)/i.test(ua)) { + return 'connectedtv'; + } + + if (/Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Windows\sCE|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(ua)) { + return 'smartphone'; + } + + var width = topWindow.innerWidth || topWindow.document.documentElement.clientWidth || topWindow.document.body.clientWidth; + + if (width > 320) { + return 'desktop'; + } + + return 'other'; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[168]); \ No newline at end of file diff --git a/build/dist/adWMGAnalyticsAdapter.js b/build/dist/adWMGAnalyticsAdapter.js new file mode 100644 index 00000000000..fbb2720c7c9 --- /dev/null +++ b/build/dist/adWMGAnalyticsAdapter.js @@ -0,0 +1,705 @@ +pbjsChunk([47],{ + +/***/ 170: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(171); + + +/***/ }), + +/***/ 171: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var analyticsType = 'endpoint'; +var url = 'https://analytics.wmgroup.us/analytic/collection'; +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE; +var timestampInit = null; +var noBidArray = []; +var noBidObject = {}; +var isBidArray = []; +var isBidObject = {}; +var bidTimeOutArray = []; +var bidTimeOutObject = {}; +var bidWonArray = []; +var bidWonObject = {}; +var initOptions = {}; + +function postAjax(url, data) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(url, function () {}, data, { + contentType: 'application/json', + method: 'POST' + }); +} + +function handleInitSizes(adUnits) { + return adUnits.map(function (adUnit) { + return adUnit.sizes.toString() || ''; + }); +} + +function handleInitTypes(adUnits) { + return adUnits.map(function (adUnit) { + return Object.keys(adUnit.mediaTypes).toString(); + }); +} + +function detectDevice() { + if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase())) { + return 'tablet'; + } + + if (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase())) { + return 'mobile'; + } + + return 'desktop'; +} + +function detectOsAndBrowser() { + var module = { + options: [], + header: [navigator.platform, navigator.userAgent, navigator.appVersion, navigator.vendor, window.opera], + dataos: [{ + name: 'Windows Phone', + value: 'Windows Phone', + version: 'OS' + }, { + name: 'Windows', + value: 'Win', + version: 'NT' + }, { + name: 'iOS', + value: 'iPhone', + version: 'OS' + }, { + name: 'iOS', + value: 'iPad', + version: 'OS' + }, { + name: 'Kindle', + value: 'Silk', + version: 'Silk' + }, { + name: 'Android', + value: 'Android', + version: 'Android' + }, { + name: 'PlayBook', + value: 'PlayBook', + version: 'OS' + }, { + name: 'BlackBerry', + value: 'BlackBerry', + version: '/' + }, { + name: 'Macintosh', + value: 'Mac', + version: 'OS X' + }, { + name: 'Linux', + value: 'Linux', + version: 'rv' + }, { + name: 'Palm', + value: 'Palm', + version: 'PalmOS' + }], + databrowser: [{ + name: 'Yandex Browser', + value: 'YaBrowser', + version: 'YaBrowser' + }, { + name: 'Opera Mini', + value: 'Opera Mini', + version: 'Opera Mini' + }, { + name: 'Amigo', + value: 'Amigo', + version: 'Amigo' + }, { + name: 'Atom', + value: 'Atom', + version: 'Atom' + }, { + name: 'Opera', + value: 'OPR', + version: 'OPR' + }, { + name: 'Edge', + value: 'Edge', + version: 'Edge' + }, { + name: 'Internet Explorer', + value: 'Trident', + version: 'rv' + }, { + name: 'Chrome', + value: 'Chrome', + version: 'Chrome' + }, { + name: 'Firefox', + value: 'Firefox', + version: 'Firefox' + }, { + name: 'Safari', + value: 'Safari', + version: 'Version' + }, { + name: 'Internet Explorer', + value: 'MSIE', + version: 'MSIE' + }, { + name: 'Opera', + value: 'Opera', + version: 'Opera' + }, { + name: 'BlackBerry', + value: 'CLDC', + version: 'CLDC' + }, { + name: 'Mozilla', + value: 'Mozilla', + version: 'Mozilla' + }], + init: function init() { + var agent = this.header.join(' '); + var os = this.matchItem(agent, this.dataos); + var browser = this.matchItem(agent, this.databrowser); + return { + os: os, + browser: browser + }; + }, + getVersion: function getVersion(name, version) { + if (name === 'Windows') { + switch (parseFloat(version).toFixed(1)) { + case '5.0': + return '2000'; + + case '5.1': + return 'XP'; + + case '5.2': + return 'Server 2003'; + + case '6.0': + return 'Vista'; + + case '6.1': + return '7'; + + case '6.2': + return '8'; + + case '6.3': + return '8.1'; + + default: + return parseInt(version) || 'other'; + } + } else return parseInt(version) || 'other'; + }, + matchItem: function matchItem(string, data) { + var i = 0; + var j = 0; + var regex, regexv, match, matches, version; + + for (i = 0; i < data.length; i += 1) { + regex = new RegExp(data[i].value, 'i'); + match = regex.test(string); + + if (match) { + regexv = new RegExp(data[i].version + '[- /:;]([\\d._]+)', 'i'); + matches = string.match(regexv); + version = ''; + + if (matches) { + if (matches[1]) { + matches = matches[1]; + } + } + + if (matches) { + matches = matches.split(/[._]+/); + + for (j = 0; j < matches.length; j += 1) { + if (j === 0) { + version += matches[j] + '.'; + } else { + version += matches[j]; + } + } + } else { + version = 'other'; + } + + return { + name: data[i].name, + version: this.getVersion(data[i].name, version) + }; + } + } + + return { + name: 'unknown', + version: 'other' + }; + } + }; + var e = module.init(); + var result = {}; + result.os = e.os.name + ' ' + e.os.version; + result.browser = e.browser.name + ' ' + e.browser.version; + return result; +} + +function handleAuctionInit(eventType, args) { + initOptions.c_timeout = args.timeout; + initOptions.ad_unit_size = handleInitSizes(args.adUnits); + initOptions.ad_unit_type = handleInitTypes(args.adUnits); + initOptions.device = detectDevice(); + initOptions.os = detectOsAndBrowser().os; + initOptions.browser = detectOsAndBrowser().browser; + timestampInit = args.timestamp; +} + +function parseBidType(mediaTypes, mediaType) { + if (!mediaTypes) { + return [mediaType]; + } else { + return Object.keys(mediaTypes) || ['']; + } +} + +function parseSizes(sizes, width, height) { + if (sizes !== undefined) { + return sizes.map(function (s) { + return s.toString(); + }); + } else { + return ["".concat(width, ",").concat(height)]; + } +} + +function mapObject(_ref) { + var bidder = _ref.bidder, + adUnitCode = _ref.adUnitCode, + auctionId = _ref.auctionId, + transactionId = _ref.transactionId, + sizes = _ref.sizes, + size = _ref.size, + mediaTypes = _ref.mediaTypes, + mediaType = _ref.mediaType, + cpm = _ref.cpm, + currency = _ref.currency, + originalCpm = _ref.originalCpm, + originalCurrency = _ref.originalCurrency, + height = _ref.height, + width = _ref.width; + return { + bidder: bidder, + auction_id: auctionId, + ad_unit_code: adUnitCode, + transaction_id: transactionId || '', + bid_size: size || sizes || width && height !== undefined ? parseSizes(sizes, width, height) : [''], + bid_type: mediaType || mediaTypes ? parseBidType(mediaTypes, mediaType) : [''], + time_ms: Date.now() - timestampInit, + cur: originalCurrency !== undefined ? originalCurrency : currency || '', + price: cpm !== undefined ? cpm.toString().substring(0, 4) : '', + cur_native: originalCurrency || '', + price_native: originalCpm !== undefined ? originalCpm.toString().substring(0, 4) : '' + }; +} + +function mapUpLevelObject(object, eventType, array) { + _extends(object, { + status: eventType || '', + bids: array || [] + }); +} + +function handleEvent(array, object, eventType, args) { + array.push(mapObject(args)); + mapUpLevelObject(object, eventType, array); +} + +function handleNoBid(eventType, args) { + handleEvent(noBidArray, noBidObject, eventType, args); +} + +function handleBidResponse(eventType, args) { + handleEvent(isBidArray, isBidObject, eventType, args); +} + +function handleBidTimeout(eventType, args) { + args.forEach(function (bid) { + bidTimeOutArray.push(mapObject(bid)); + }); + mapUpLevelObject(bidTimeOutObject, eventType, bidTimeOutArray); +} + +function handleBidWon(eventType, args) { + handleEvent(bidWonArray, bidWonObject, eventType, args); + sendRequest(bidWonObject); +} + +function handleBidRequested(args) {} + +function sendRequest() { + for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) { + objects[_key] = arguments[_key]; + } + + var obj = { + publisher_id: initOptions.publisher_id.toString() || '', + site: initOptions.site || '', + ad_unit_size: initOptions.ad_unit_size || [''], + ad_unit_type: initOptions.ad_unit_type || [''], + device: initOptions.device || '', + os: initOptions.os || '', + browser: initOptions.browser || '', + c_timeout: initOptions.c_timeout || 0, + events: Object.keys(objects).length ? objects : [] + }; + postAjax(url, JSON.stringify(obj)); +} + +function handleAuctionEnd() { + sendRequest(noBidObject, isBidObject, bidTimeOutObject); +} + +var adWMGAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + url: url, + analyticsType: analyticsType +}), { + track: function track(_ref2) { + var eventType = _ref2.eventType, + args = _ref2.args; + + switch (eventType) { + case AUCTION_INIT: + handleAuctionInit(eventType, args); + break; + + case BID_REQUESTED: + handleBidRequested(args); + break; + + case BID_RESPONSE: + handleBidResponse(eventType, args); + break; + + case NO_BID: + handleNoBid(eventType, args); + break; + + case BID_TIMEOUT: + handleBidTimeout(eventType, args); + break; + + case BID_WON: + handleBidWon(eventType, args); + break; + + case AUCTION_END: + handleAuctionEnd(); + } + } +}); + +adWMGAnalyticsAdapter.originEnableAnalytics = adWMGAnalyticsAdapter.enableAnalytics; + +adWMGAnalyticsAdapter.enableAnalytics = function (config) { + initOptions = config.options; + adWMGAnalyticsAdapter.originEnableAnalytics(config); +}; + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: adWMGAnalyticsAdapter, + code: 'adWMG' +}); +/* harmony default export */ __webpack_exports__["default"] = (adWMGAnalyticsAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[170]); \ No newline at end of file diff --git a/build/dist/adagioAnalyticsAdapter.js b/build/dist/adagioAnalyticsAdapter.js new file mode 100644 index 00000000000..aab9f33264c --- /dev/null +++ b/build/dist/adagioAnalyticsAdapter.js @@ -0,0 +1,354 @@ +pbjsChunk([46],{ + +/***/ 172: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(173); + + +/***/ }), + +/***/ 173: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * Analytics Adapter for Adagio + */ + + + + +var emptyUrl = ''; +var analyticsType = 'endpoint'; +var events = Object.keys(__WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS).map(function (key) { + return __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS[key]; +}); +var VERSION = '2.0.0'; + +var adagioEnqueue = function adagioEnqueue(action, data) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["getWindowTop"]().ADAGIO.queue.push({ + action: action, + data: data, + ts: Date.now() + }); +}; + +function canAccessTopWindow() { + try { + if (__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["getWindowTop"]().location.href) { + return true; + } + } catch (error) { + return false; + } +} + +var adagioAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + emptyUrl: emptyUrl, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (typeof args !== 'undefined' && events.indexOf(eventType) !== -1) { + adagioEnqueue('pb-analytics-event', { + eventName: eventType, + args: args + }); + } + } +}); + +adagioAdapter.originEnableAnalytics = adagioAdapter.enableAnalytics; + +adagioAdapter.enableAnalytics = function (config) { + if (!canAccessTopWindow()) { + return; + } + + var w = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["getWindowTop"](); + w.ADAGIO = w.ADAGIO || {}; + w.ADAGIO.queue = w.ADAGIO.queue || []; + w.ADAGIO.versions = w.ADAGIO.versions || {}; + w.ADAGIO.versions.adagioAnalyticsAdapter = VERSION; + adagioAdapter.originEnableAnalytics(config); +}; + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: adagioAdapter, + code: 'adagio' +}); +/* harmony default export */ __webpack_exports__["default"] = (adagioAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[172]); \ No newline at end of file diff --git a/build/dist/adagioBidAdapter.js b/build/dist/adagioBidAdapter.js new file mode 100644 index 00000000000..4d71ea7ebca --- /dev/null +++ b/build/dist/adagioBidAdapter.js @@ -0,0 +1,6955 @@ +pbjsChunk([1],{ + +/***/ 174: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(175); + + +/***/ }), + +/***/ 175: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ADAGIO_PUBKEY", function() { return ADAGIO_PUBKEY; }); +/* harmony export (immutable) */ __webpack_exports__["adagioScriptFromLocalStorageCb"] = adagioScriptFromLocalStorageCb; +/* harmony export (immutable) */ __webpack_exports__["getAdagioScript"] = getAdagioScript; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_features", function() { return _features; }); +/* harmony export (immutable) */ __webpack_exports__["_autoDetectAdUnitElementId"] = _autoDetectAdUnitElementId; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adloader_js__ = __webpack_require__(39); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_jsencrypt_bin_jsencrypt_js__ = __webpack_require__(176); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_jsencrypt_bin_jsencrypt_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_jsencrypt_bin_jsencrypt_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_crypto_js_sha256_js__ = __webpack_require__(177); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_crypto_js_sha256_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_crypto_js_sha256_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_storageManager_js__ = __webpack_require__(9); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 = 'adagio'; +var VERSION = '2.2.2'; +var FEATURES_VERSION = '1'; +var ENDPOINT = 'https://mp.4dex.io/prebid'; +var SUPPORTED_MEDIA_TYPES = ['banner']; +var ADAGIO_TAG_URL = 'https://script.4dex.io/localstore.js'; +var ADAGIO_LOCALSTORAGE_KEY = 'adagioScript'; +var GVLID = 617; +var storage = Object(__WEBPACK_IMPORTED_MODULE_6__src_storageManager_js__["b" /* getStorageManager */])(GVLID, 'adagio'); +var ADAGIO_PUBKEY = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9el0+OEn6fvEh1RdVHQu4cnT0\njFSzIbGJJyg3cKqvtE6A0iaz9PkIdJIvSSSNrmJv+lRGKPEyRA/VnzJIieL39Ngl\nt0b0lsHN+W4n9kitS/DZ/xnxWK/9vxhv0ZtL1LL/rwR5Mup7rmJbNtDoNBw4TIGj\npV6EP3MTLosuUEpLaQIDAQAB\n-----END PUBLIC KEY-----"; +function adagioScriptFromLocalStorageCb(ls) { + try { + if (!ls) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"]('Adagio Script not found'); + return; + } + + var hashRgx = /^(\/\/ hash: (.+)\n)(.+\n)$/; + + if (!hashRgx.test(ls)) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"]('No hash found in Adagio script'); + storage.removeDataFromLocalStorage(ADAGIO_LOCALSTORAGE_KEY); + } else { + var r = ls.match(hashRgx); + var hash = r[2]; + var content = r[3]; + var jsEncrypt = new __WEBPACK_IMPORTED_MODULE_4_jsencrypt_bin_jsencrypt_js___default.a(); + jsEncrypt.setPublicKey(ADAGIO_PUBKEY); + + if (jsEncrypt.verify(content, hash, __WEBPACK_IMPORTED_MODULE_5_crypto_js_sha256_js___default.a)) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('Start Adagio script'); + Function(ls)(); // eslint-disable-line no-new-func + } else { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"]('Invalid Adagio script found'); + storage.removeDataFromLocalStorage(ADAGIO_LOCALSTORAGE_KEY); + } + } + } catch (err) {// + } +} +function getAdagioScript() { + storage.getDataFromLocalStorage(ADAGIO_LOCALSTORAGE_KEY, function (ls) { + adagioScriptFromLocalStorageCb(ls); + }); +} + +function canAccessTopWindow() { + try { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"]().location.href) { + return true; + } + } catch (error) { + return false; + } +} + +function initAdagio() { + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + w.ADAGIO = w.ADAGIO || {}; + w.ADAGIO.queue = w.ADAGIO.queue || []; + w.ADAGIO.versions = w.ADAGIO.versions || {}; + w.ADAGIO.versions.adagioBidderAdapter = VERSION; + getAdagioScript(); + Object(__WEBPACK_IMPORTED_MODULE_3__src_adloader_js__["a" /* loadExternalScript */])(ADAGIO_TAG_URL, BIDDER_CODE); +} + +if (canAccessTopWindow()) { + initAdagio(); +} + +var _features = { + getPrintNumber: function getPrintNumber(adUnitCode) { + var adagioAdUnit = _getOrAddAdagioAdUnit(adUnitCode); + + return adagioAdUnit.printNumber || 1; + }, + getPageDimensions: function getPageDimensions() { + var viewportDims = _features.getViewPortDimensions().split('x'); + + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + var body = w.document.body; + + if (!body) { + return ''; + } + + var html = w.document.documentElement; + var pageHeight = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight); + return viewportDims[0] + 'x' + pageHeight; + }, + getViewPortDimensions: function getViewPortDimensions() { + var viewPortWidth; + var viewPortHeight; + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + var d = w.document; + + if (w.innerWidth) { + viewPortWidth = w.innerWidth; + viewPortHeight = w.innerHeight; + } else { + viewPortWidth = d.getElementsByTagName('body')[0].clientWidth; + viewPortHeight = d.getElementsByTagName('body')[0].clientHeight; + } + + return viewPortWidth + 'x' + viewPortHeight; + }, + isDomLoading: function isDomLoading() { + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + var performance = w.performance || w.msPerformance || w.webkitPerformance || w.mozPerformance; + var domLoading = -1; + + if (performance && performance.timing && performance.timing.navigationStart > 0) { + var val = performance.timing.domLoading - performance.timing.navigationStart; + if (val > 0) domLoading = val; + } + + return domLoading; + }, + getSlotPosition: function getSlotPosition(element) { + if (!element) return ''; + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + var d = w.document; + var el = element; + var box = el.getBoundingClientRect(); + var docEl = d.documentElement; + var body = d.body; + var clientTop = d.clientTop || body.clientTop || 0; + var clientLeft = d.clientLeft || body.clientLeft || 0; + var scrollTop = w.pageYOffset || docEl.scrollTop || body.scrollTop; + var scrollLeft = w.pageXOffset || docEl.scrollLeft || body.scrollLeft; + var elComputedStyle = w.getComputedStyle(el, null); + var elComputedDisplay = elComputedStyle.display || 'block'; + var mustDisplayElement = elComputedDisplay === 'none'; + + if (mustDisplayElement) { + el.style = el.style || {}; + el.style.display = 'block'; + box = el.getBoundingClientRect(); + el.style.display = elComputedDisplay; + } + + var position = { + x: Math.round(box.left + scrollLeft - clientLeft), + y: Math.round(box.top + scrollTop - clientTop) + }; + return position.x + 'x' + position.y; + }, + getTimestamp: function getTimestamp() { + return Math.floor(new Date().getTime() / 1000) - new Date().getTimezoneOffset() * 60; + }, + getDevice: function getDevice() { + if (!canAccessTopWindow()) return false; + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + var ua = w.navigator.userAgent; + + if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) { + return 5; // "tablet" + } + + if (/Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/.test(ua)) { + return 4; // "phone" + } + + return 2; // personal computers + }, + getBrowser: function getBrowser() { + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + var ua = w.navigator.userAgent; + var uaLowerCase = ua.toLowerCase(); + return /Edge\/\d./i.test(ua) ? 'edge' : uaLowerCase.indexOf('chrome') > 0 ? 'chrome' : uaLowerCase.indexOf('firefox') > 0 ? 'firefox' : uaLowerCase.indexOf('safari') > 0 ? 'safari' : uaLowerCase.indexOf('opera') > 0 ? 'opera' : uaLowerCase.indexOf('msie') > 0 || w.MSStream ? 'ie' : 'unknow'; + }, + getOS: function getOS() { + var w = window.top; + var ua = w.navigator.userAgent; + var uaLowerCase = ua.toLowerCase(); + return uaLowerCase.indexOf('linux') > 0 ? 'linux' : uaLowerCase.indexOf('mac') > 0 ? 'mac' : uaLowerCase.indexOf('win') > 0 ? 'windows' : ''; + } +}; + +function _pushInAdagioQueue(ob) { + try { + if (!canAccessTopWindow()) return; + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + w.ADAGIO.queue.push(ob); + } catch (e) {} +} + +; + +function _getOrAddAdagioAdUnit(adUnitCode) { + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + + if (w.ADAGIO.adUnits[adUnitCode]) { + return w.ADAGIO.adUnits[adUnitCode]; + } + + return w.ADAGIO.adUnits[adUnitCode] = {}; +} + +function _computePrintNumber(adUnitCode) { + var printNumber = 1; + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + + if (w.ADAGIO && w.ADAGIO.adUnits && w.ADAGIO.adUnits[adUnitCode] && w.ADAGIO.adUnits[adUnitCode].pageviewId === _getPageviewId() && w.ADAGIO.adUnits[adUnitCode].printNumber) { + printNumber = parseInt(w.ADAGIO.adUnits[adUnitCode].printNumber, 10) + 1; + } + + return printNumber; +} + +function _getDevice() { + var language = navigator.language ? 'language' : 'userLanguage'; + return { + userAgent: navigator.userAgent, + language: navigator[language], + deviceType: _features.getDevice(), + dnt: __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getDNT"]() ? 1 : 0, + geo: {}, + js: 1 + }; +} + +; + +function _getSite() { + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + return { + domain: w.location.hostname, + page: w.location.href, + referrer: w.document.referrer || '' + }; +} + +; + +function _getPageviewId() { + if (!canAccessTopWindow()) return false; + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + w.ADAGIO.pageviewId = w.ADAGIO.pageviewId || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["generateUUID"](); + return w.ADAGIO.pageviewId; +} + +; + +function _getElementFromTopWindow(element, currentWindow) { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"]() === currentWindow) { + if (!element.getAttribute('id')) { + element.setAttribute('id', "adg-".concat(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getUniqueIdentifierStr"]())); + } + + return element; + } else { + var frame = currentWindow.frameElement; + return _getElementFromTopWindow(frame, currentWindow.parent); + } +} + +function _autoDetectAdUnitElementId(adUnitCode) { + var autoDetectedAdUnit = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getGptSlotInfoForAdUnitCode"](adUnitCode); + var adUnitElementId = null; + + if (autoDetectedAdUnit && autoDetectedAdUnit.divId) { + adUnitElementId = autoDetectedAdUnit.divId; + } + + return adUnitElementId; +} + +function _autoDetectEnvironment() { + var device = _features.getDevice(); + + var environment; + + switch (device) { + case 2: + environment = 'desktop'; + break; + + case 4: + environment = 'mobile'; + break; + + case 5: + environment = 'tablet'; + break; + } + + ; + return environment; +} +/** + * Returns all features for a specific adUnit element + * + * @param {Object} bidRequest + * @returns {Object} features for an element (see specs) + */ + + +function _getFeatures(bidRequest) { + if (!canAccessTopWindow()) return; + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + var adUnitCode = bidRequest.adUnitCode; + + var adUnitElementId = bidRequest.params.adUnitElementId || _autoDetectAdUnitElementId(adUnitCode); + + var element; + + if (!adUnitElementId) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"]('Unable to detect adUnitElementId. Adagio measures won\'t start'); + } else { + if (bidRequest.params.postBid === true) { + window.document.getElementById(adUnitElementId); + element = _getElementFromTopWindow(element, window); + w.ADAGIO.pbjsAdUnits.map(function (adUnit) { + if (adUnit.code === adUnitCode) { + var outerElementId = element.getAttribute('id'); + adUnit.outerAdUnitElementId = outerElementId; + bidRequest.params.outerAdUnitElementId = outerElementId; + } + }); + } else { + element = w.document.getElementById(adUnitElementId); + } + } + + var features = { + print_number: _features.getPrintNumber(bidRequest.adUnitCode).toString(), + page_dimensions: _features.getPageDimensions().toString(), + viewport_dimensions: _features.getViewPortDimensions().toString(), + dom_loading: _features.isDomLoading().toString(), + // layout: features.getLayout().toString(), + adunit_position: _features.getSlotPosition(element).toString(), + user_timestamp: _features.getTimestamp().toString(), + device: _features.getDevice().toString(), + url: w.location.origin + w.location.pathname, + browser: _features.getBrowser(), + os: _features.getOS() + }; + var adUnitFeature = {}; + adUnitFeature[adUnitElementId] = { + features: features, + version: FEATURES_VERSION + }; + + _pushInAdagioQueue({ + action: 'features', + ts: Date.now(), + data: adUnitFeature + }); + + return features; +} + +; + +function _getGdprConsent(bidderRequest) { + var consent = {}; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent')) { + if (bidderRequest.gdprConsent.consentString !== undefined) { + consent.consentString = bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest.gdprConsent.gdprApplies !== undefined) { + consent.consentRequired = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + + if (bidderRequest.gdprConsent.allowAuctionWithoutConsent !== undefined) { + consent.allowAuctionWithoutConsent = bidderRequest.gdprConsent.allowAuctionWithoutConsent ? 1 : 0; + } + + if (bidderRequest.gdprConsent.apiVersion !== undefined) { + consent.apiVersion = bidderRequest.gdprConsent.apiVersion; + } + } + + return consent; +} + +function _getSchain(bidRequest) { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequest, 'schain')) { + return bidRequest.schain; + } +} + +var spec = { + code: BIDDER_CODE, + gvlid: GVLID, + supportedMediaType: SUPPORTED_MEDIA_TYPES, + isBidRequestValid: function isBidRequestValid(bid) { + var adUnitCode = bid.adUnitCode, + auctionId = bid.auctionId, + sizes = bid.sizes, + bidder = bid.bidder, + params = bid.params, + mediaTypes = bid.mediaTypes; + var _bid$params = bid.params, + organizationId = _bid$params.organizationId, + site = _bid$params.site, + placement = _bid$params.placement; + + var adUnitElementId = bid.params.adUnitElementId || _autoDetectAdUnitElementId(adUnitCode); + + var environment = bid.params.environment || _autoDetectEnvironment(); + + var isValid = false; + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('adUnitElementId', adUnitElementId); + + try { + if (canAccessTopWindow()) { + var w = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](); + w.ADAGIO = w.ADAGIO || {}; + w.ADAGIO.adUnits = w.ADAGIO.adUnits || {}; + w.ADAGIO.pbjsAdUnits = w.ADAGIO.pbjsAdUnits || []; + isValid = !!(organizationId && site && placement); + var tempAdUnits = w.ADAGIO.pbjsAdUnits.filter(function (adUnit) { + return adUnit.code !== adUnitCode; + }); + bid.params = _objectSpread(_objectSpread({}, bid.params), {}, { + adUnitElementId: adUnitElementId, + environment: environment + }); + tempAdUnits.push({ + code: adUnitCode, + sizes: mediaTypes && mediaTypes.banner && Array.isArray(mediaTypes.banner.sizes) ? mediaTypes.banner.sizes : sizes, + bids: [{ + bidder: bidder, + params: params + }] + }); + w.ADAGIO.pbjsAdUnits = tempAdUnits; + + if (isValid === true) { + var printNumber = _computePrintNumber(adUnitCode); + + w.ADAGIO.adUnits[adUnitCode] = { + auctionId: auctionId, + pageviewId: _getPageviewId(), + printNumber: printNumber + }; + } + } + } catch (e) { + return isValid; + } + + return isValid; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + // AdagioBidAdapter works when window.top can be reached only + if (!bidderRequest.refererInfo.reachedTop) return []; + var secure = location.protocol === 'https:' ? 1 : 0; + + var device = _getDevice(); + + var site = _getSite(); + + var pageviewId = _getPageviewId(); + + var gdprConsent = _getGdprConsent(bidderRequest); + + var schain = _getSchain(validBidRequests[0]); + + var adUnits = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["_map"](validBidRequests, function (bidRequest) { + bidRequest.features = _getFeatures(bidRequest); + return bidRequest; + }); // Regroug ad units by siteId + + + var groupedAdUnits = adUnits.reduce(function (groupedAdUnits, adUnit) { + if (adUnit.params && adUnit.params.organizationId) { + adUnit.params.organizationId = adUnit.params.organizationId.toString(); + } + + (groupedAdUnits[adUnit.params.organizationId] = groupedAdUnits[adUnit.params.organizationId] || []).push(adUnit); + return groupedAdUnits; + }, {}); // Build one request per siteId + + var requests = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["_map"](Object.keys(groupedAdUnits), function (organizationId) { + return { + method: 'POST', + url: ENDPOINT, + data: { + id: __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["generateUUID"](), + organizationId: organizationId, + secure: secure, + device: device, + site: site, + pageviewId: pageviewId, + adUnits: groupedAdUnits[organizationId], + gdpr: gdprConsent, + schain: schain, + prebidVersion: "4.2.0", + adapterVersion: VERSION, + featuresVersion: FEATURES_VERSION + }, + options: { + contentType: 'text/plain' + } + }; + }); + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + + try { + var response = serverResponse.body; + + if (response) { + if (response.data) { + _pushInAdagioQueue({ + action: 'ssp-data', + ts: Date.now(), + data: response.data + }); + } + + if (response.bids) { + response.bids.forEach(function (bidObj) { + var bidReq = __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default()(bidRequest.data.adUnits, function (bid) { + return bid.bidId === bidObj.requestId; + }); + + if (bidReq) { + bidObj.site = bidReq.params.site; + bidObj.placement = bidReq.params.placement; + bidObj.pagetype = bidReq.params.pagetype; + bidObj.category = bidReq.params.category; + bidObj.subcategory = bidReq.params.subcategory; + bidObj.environment = bidReq.params.environment; + } + + bidResponses.push(bidObj); + }); + } + } + } catch (err) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"](err); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (!serverResponses.length || serverResponses[0].body === '' || !serverResponses[0].body.userSyncs) { + return false; + } + + var syncs = serverResponses[0].body.userSyncs.map(function (sync) { + return { + type: sync.t === 'p' ? 'image' : 'iframe', + url: sync.u + }; + }); + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }), + +/***/ 176: +/***/ (function(module, exports, __webpack_require__) { + +(function (global, factory) { + true ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.JSEncrypt = {}))); +}(this, (function (exports) { 'use strict'; + +var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; +function int2char(n) { + return BI_RM.charAt(n); +} +//#region BIT_OPERATIONS +// (public) this & a +function op_and(x, y) { + return x & y; +} +// (public) this | a +function op_or(x, y) { + return x | y; +} +// (public) this ^ a +function op_xor(x, y) { + return x ^ y; +} +// (public) this & ~a +function op_andnot(x, y) { + return x & ~y; +} +// return index of lowest 1-bit in x, x < 2^31 +function lbit(x) { + if (x == 0) { + return -1; + } + var r = 0; + if ((x & 0xffff) == 0) { + x >>= 16; + r += 16; + } + if ((x & 0xff) == 0) { + x >>= 8; + r += 8; + } + if ((x & 0xf) == 0) { + x >>= 4; + r += 4; + } + if ((x & 3) == 0) { + x >>= 2; + r += 2; + } + if ((x & 1) == 0) { + ++r; + } + return r; +} +// return number of 1 bits in x +function cbit(x) { + var r = 0; + while (x != 0) { + x &= x - 1; + ++r; + } + return r; +} +//#endregion BIT_OPERATIONS + +var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var b64pad = "="; +function hex2b64(h) { + var i; + var c; + var ret = ""; + for (i = 0; i + 3 <= h.length; i += 3) { + c = parseInt(h.substring(i, i + 3), 16); + ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63); + } + if (i + 1 == h.length) { + c = parseInt(h.substring(i, i + 1), 16); + ret += b64map.charAt(c << 2); + } + else if (i + 2 == h.length) { + c = parseInt(h.substring(i, i + 2), 16); + ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4); + } + while ((ret.length & 3) > 0) { + ret += b64pad; + } + return ret; +} +// convert a base64 string to hex +function b64tohex(s) { + var ret = ""; + var i; + var k = 0; // b64 state, 0-3 + var slop = 0; + for (i = 0; i < s.length; ++i) { + if (s.charAt(i) == b64pad) { + break; + } + var v = b64map.indexOf(s.charAt(i)); + if (v < 0) { + continue; + } + if (k == 0) { + ret += int2char(v >> 2); + slop = v & 3; + k = 1; + } + else if (k == 1) { + ret += int2char((slop << 2) | (v >> 4)); + slop = v & 0xf; + k = 2; + } + else if (k == 2) { + ret += int2char(slop); + ret += int2char(v >> 2); + slop = v & 3; + k = 3; + } + else { + ret += int2char((slop << 2) | (v >> 4)); + ret += int2char(v & 0xf); + k = 0; + } + } + if (k == 1) { + ret += int2char(slop << 2); + } + return ret; +} + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +// Hex JavaScript decoder +// Copyright (c) 2008-2013 Lapo Luchini +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ +var decoder; +var Hex = { + decode: function (a) { + var i; + if (decoder === undefined) { + var hex = "0123456789ABCDEF"; + var ignore = " \f\n\r\t\u00A0\u2028\u2029"; + decoder = {}; + for (i = 0; i < 16; ++i) { + decoder[hex.charAt(i)] = i; + } + hex = hex.toLowerCase(); + for (i = 10; i < 16; ++i) { + decoder[hex.charAt(i)] = i; + } + for (i = 0; i < ignore.length; ++i) { + decoder[ignore.charAt(i)] = -1; + } + } + var out = []; + var bits = 0; + var char_count = 0; + for (i = 0; i < a.length; ++i) { + var c = a.charAt(i); + if (c == "=") { + break; + } + c = decoder[c]; + if (c == -1) { + continue; + } + if (c === undefined) { + throw new Error("Illegal character at offset " + i); + } + bits |= c; + if (++char_count >= 2) { + out[out.length] = bits; + bits = 0; + char_count = 0; + } + else { + bits <<= 4; + } + } + if (char_count) { + throw new Error("Hex encoding incomplete: 4 bits missing"); + } + return out; + } +}; + +// Base64 JavaScript decoder +// Copyright (c) 2008-2013 Lapo Luchini +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ +var decoder$1; +var Base64 = { + decode: function (a) { + var i; + if (decoder$1 === undefined) { + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var ignore = "= \f\n\r\t\u00A0\u2028\u2029"; + decoder$1 = Object.create(null); + for (i = 0; i < 64; ++i) { + decoder$1[b64.charAt(i)] = i; + } + for (i = 0; i < ignore.length; ++i) { + decoder$1[ignore.charAt(i)] = -1; + } + } + var out = []; + var bits = 0; + var char_count = 0; + for (i = 0; i < a.length; ++i) { + var c = a.charAt(i); + if (c == "=") { + break; + } + c = decoder$1[c]; + if (c == -1) { + continue; + } + if (c === undefined) { + throw new Error("Illegal character at offset " + i); + } + bits |= c; + if (++char_count >= 4) { + out[out.length] = (bits >> 16); + out[out.length] = (bits >> 8) & 0xFF; + out[out.length] = bits & 0xFF; + bits = 0; + char_count = 0; + } + else { + bits <<= 6; + } + } + switch (char_count) { + case 1: + throw new Error("Base64 encoding incomplete: at least 2 bits missing"); + case 2: + out[out.length] = (bits >> 10); + break; + case 3: + out[out.length] = (bits >> 16); + out[out.length] = (bits >> 8) & 0xFF; + break; + } + return out; + }, + re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/, + unarmor: function (a) { + var m = Base64.re.exec(a); + if (m) { + if (m[1]) { + a = m[1]; + } + else if (m[2]) { + a = m[2]; + } + else { + throw new Error("RegExp out of sync"); + } + } + return Base64.decode(a); + } +}; + +// Big integer base-10 printing library +// Copyright (c) 2014 Lapo Luchini +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ +var max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256 +var Int10 = /** @class */ (function () { + function Int10(value) { + this.buf = [+value || 0]; + } + Int10.prototype.mulAdd = function (m, c) { + // assert(m <= 256) + var b = this.buf; + var l = b.length; + var i; + var t; + for (i = 0; i < l; ++i) { + t = b[i] * m + c; + if (t < max) { + c = 0; + } + else { + c = 0 | (t / max); + t -= c * max; + } + b[i] = t; + } + if (c > 0) { + b[i] = c; + } + }; + Int10.prototype.sub = function (c) { + // assert(m <= 256) + var b = this.buf; + var l = b.length; + var i; + var t; + for (i = 0; i < l; ++i) { + t = b[i] - c; + if (t < 0) { + t += max; + c = 1; + } + else { + c = 0; + } + b[i] = t; + } + while (b[b.length - 1] === 0) { + b.pop(); + } + }; + Int10.prototype.toString = function (base) { + if ((base || 10) != 10) { + throw new Error("only base 10 is supported"); + } + var b = this.buf; + var s = b[b.length - 1].toString(); + for (var i = b.length - 2; i >= 0; --i) { + s += (max + b[i]).toString().substring(1); + } + return s; + }; + Int10.prototype.valueOf = function () { + var b = this.buf; + var v = 0; + for (var i = b.length - 1; i >= 0; --i) { + v = v * max + b[i]; + } + return v; + }; + Int10.prototype.simplify = function () { + var b = this.buf; + return (b.length == 1) ? b[0] : this; + }; + return Int10; +}()); + +// ASN.1 JavaScript decoder +var ellipsis = "\u2026"; +var reTimeS = /^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; +var reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; +function stringCut(str, len) { + if (str.length > len) { + str = str.substring(0, len) + ellipsis; + } + return str; +} +var Stream = /** @class */ (function () { + function Stream(enc, pos) { + this.hexDigits = "0123456789ABCDEF"; + if (enc instanceof Stream) { + this.enc = enc.enc; + this.pos = enc.pos; + } + else { + // enc should be an array or a binary string + this.enc = enc; + this.pos = pos; + } + } + Stream.prototype.get = function (pos) { + if (pos === undefined) { + pos = this.pos++; + } + if (pos >= this.enc.length) { + throw new Error("Requesting byte offset " + pos + " on a stream of length " + this.enc.length); + } + return ("string" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos]; + }; + Stream.prototype.hexByte = function (b) { + return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF); + }; + Stream.prototype.hexDump = function (start, end, raw) { + var s = ""; + for (var i = start; i < end; ++i) { + s += this.hexByte(this.get(i)); + if (raw !== true) { + switch (i & 0xF) { + case 0x7: + s += " "; + break; + case 0xF: + s += "\n"; + break; + default: + s += " "; + } + } + } + return s; + }; + Stream.prototype.isASCII = function (start, end) { + for (var i = start; i < end; ++i) { + var c = this.get(i); + if (c < 32 || c > 176) { + return false; + } + } + return true; + }; + Stream.prototype.parseStringISO = function (start, end) { + var s = ""; + for (var i = start; i < end; ++i) { + s += String.fromCharCode(this.get(i)); + } + return s; + }; + Stream.prototype.parseStringUTF = function (start, end) { + var s = ""; + for (var i = start; i < end;) { + var c = this.get(i++); + if (c < 128) { + s += String.fromCharCode(c); + } + else if ((c > 191) && (c < 224)) { + s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F)); + } + else { + s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F)); + } + } + return s; + }; + Stream.prototype.parseStringBMP = function (start, end) { + var str = ""; + var hi; + var lo; + for (var i = start; i < end;) { + hi = this.get(i++); + lo = this.get(i++); + str += String.fromCharCode((hi << 8) | lo); + } + return str; + }; + Stream.prototype.parseTime = function (start, end, shortYear) { + var s = this.parseStringISO(start, end); + var m = (shortYear ? reTimeS : reTimeL).exec(s); + if (!m) { + return "Unrecognized time: " + s; + } + if (shortYear) { + // to avoid querying the timer, use the fixed range [1970, 2069] + // it will conform with ITU X.400 [-10, +40] sliding window until 2030 + m[1] = +m[1]; + m[1] += (+m[1] < 70) ? 2000 : 1900; + } + s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4]; + if (m[5]) { + s += ":" + m[5]; + if (m[6]) { + s += ":" + m[6]; + if (m[7]) { + s += "." + m[7]; + } + } + } + if (m[8]) { + s += " UTC"; + if (m[8] != "Z") { + s += m[8]; + if (m[9]) { + s += ":" + m[9]; + } + } + } + return s; + }; + Stream.prototype.parseInteger = function (start, end) { + var v = this.get(start); + var neg = (v > 127); + var pad = neg ? 255 : 0; + var len; + var s = ""; + // skip unuseful bits (not allowed in DER) + while (v == pad && ++start < end) { + v = this.get(start); + } + len = end - start; + if (len === 0) { + return neg ? -1 : 0; + } + // show bit length of huge integers + if (len > 4) { + s = v; + len <<= 3; + while (((+s ^ pad) & 0x80) == 0) { + s = +s << 1; + --len; + } + s = "(" + len + " bit)\n"; + } + // decode the integer + if (neg) { + v = v - 256; + } + var n = new Int10(v); + for (var i = start + 1; i < end; ++i) { + n.mulAdd(256, this.get(i)); + } + return s + n.toString(); + }; + Stream.prototype.parseBitString = function (start, end, maxLength) { + var unusedBit = this.get(start); + var lenBit = ((end - start - 1) << 3) - unusedBit; + var intro = "(" + lenBit + " bit)\n"; + var s = ""; + for (var i = start + 1; i < end; ++i) { + var b = this.get(i); + var skip = (i == end - 1) ? unusedBit : 0; + for (var j = 7; j >= skip; --j) { + s += (b >> j) & 1 ? "1" : "0"; + } + if (s.length > maxLength) { + return intro + stringCut(s, maxLength); + } + } + return intro + s; + }; + Stream.prototype.parseOctetString = function (start, end, maxLength) { + if (this.isASCII(start, end)) { + return stringCut(this.parseStringISO(start, end), maxLength); + } + var len = end - start; + var s = "(" + len + " byte)\n"; + maxLength /= 2; // we work in bytes + if (len > maxLength) { + end = start + maxLength; + } + for (var i = start; i < end; ++i) { + s += this.hexByte(this.get(i)); + } + if (len > maxLength) { + s += ellipsis; + } + return s; + }; + Stream.prototype.parseOID = function (start, end, maxLength) { + var s = ""; + var n = new Int10(); + var bits = 0; + for (var i = start; i < end; ++i) { + var v = this.get(i); + n.mulAdd(128, v & 0x7F); + bits += 7; + if (!(v & 0x80)) { // finished + if (s === "") { + n = n.simplify(); + if (n instanceof Int10) { + n.sub(80); + s = "2." + n.toString(); + } + else { + var m = n < 80 ? n < 40 ? 0 : 1 : 2; + s = m + "." + (n - m * 40); + } + } + else { + s += "." + n.toString(); + } + if (s.length > maxLength) { + return stringCut(s, maxLength); + } + n = new Int10(); + bits = 0; + } + } + if (bits > 0) { + s += ".incomplete"; + } + return s; + }; + return Stream; +}()); +var ASN1 = /** @class */ (function () { + function ASN1(stream, header, length, tag, sub) { + if (!(tag instanceof ASN1Tag)) { + throw new Error("Invalid tag value."); + } + this.stream = stream; + this.header = header; + this.length = length; + this.tag = tag; + this.sub = sub; + } + ASN1.prototype.typeName = function () { + switch (this.tag.tagClass) { + case 0: // universal + switch (this.tag.tagNumber) { + case 0x00: + return "EOC"; + case 0x01: + return "BOOLEAN"; + case 0x02: + return "INTEGER"; + case 0x03: + return "BIT_STRING"; + case 0x04: + return "OCTET_STRING"; + case 0x05: + return "NULL"; + case 0x06: + return "OBJECT_IDENTIFIER"; + case 0x07: + return "ObjectDescriptor"; + case 0x08: + return "EXTERNAL"; + case 0x09: + return "REAL"; + case 0x0A: + return "ENUMERATED"; + case 0x0B: + return "EMBEDDED_PDV"; + case 0x0C: + return "UTF8String"; + case 0x10: + return "SEQUENCE"; + case 0x11: + return "SET"; + case 0x12: + return "NumericString"; + case 0x13: + return "PrintableString"; // ASCII subset + case 0x14: + return "TeletexString"; // aka T61String + case 0x15: + return "VideotexString"; + case 0x16: + return "IA5String"; // ASCII + case 0x17: + return "UTCTime"; + case 0x18: + return "GeneralizedTime"; + case 0x19: + return "GraphicString"; + case 0x1A: + return "VisibleString"; // ASCII subset + case 0x1B: + return "GeneralString"; + case 0x1C: + return "UniversalString"; + case 0x1E: + return "BMPString"; + } + return "Universal_" + this.tag.tagNumber.toString(); + case 1: + return "Application_" + this.tag.tagNumber.toString(); + case 2: + return "[" + this.tag.tagNumber.toString() + "]"; // Context + case 3: + return "Private_" + this.tag.tagNumber.toString(); + } + }; + ASN1.prototype.content = function (maxLength) { + if (this.tag === undefined) { + return null; + } + if (maxLength === undefined) { + maxLength = Infinity; + } + var content = this.posContent(); + var len = Math.abs(this.length); + if (!this.tag.isUniversal()) { + if (this.sub !== null) { + return "(" + this.sub.length + " elem)"; + } + return this.stream.parseOctetString(content, content + len, maxLength); + } + switch (this.tag.tagNumber) { + case 0x01: // BOOLEAN + return (this.stream.get(content) === 0) ? "false" : "true"; + case 0x02: // INTEGER + return this.stream.parseInteger(content, content + len); + case 0x03: // BIT_STRING + return this.sub ? "(" + this.sub.length + " elem)" : + this.stream.parseBitString(content, content + len, maxLength); + case 0x04: // OCTET_STRING + return this.sub ? "(" + this.sub.length + " elem)" : + this.stream.parseOctetString(content, content + len, maxLength); + // case 0x05: // NULL + case 0x06: // OBJECT_IDENTIFIER + return this.stream.parseOID(content, content + len, maxLength); + // case 0x07: // ObjectDescriptor + // case 0x08: // EXTERNAL + // case 0x09: // REAL + // case 0x0A: // ENUMERATED + // case 0x0B: // EMBEDDED_PDV + case 0x10: // SEQUENCE + case 0x11: // SET + if (this.sub !== null) { + return "(" + this.sub.length + " elem)"; + } + else { + return "(no elem)"; + } + case 0x0C: // UTF8String + return stringCut(this.stream.parseStringUTF(content, content + len), maxLength); + case 0x12: // NumericString + case 0x13: // PrintableString + case 0x14: // TeletexString + case 0x15: // VideotexString + case 0x16: // IA5String + // case 0x19: // GraphicString + case 0x1A: // VisibleString + // case 0x1B: // GeneralString + // case 0x1C: // UniversalString + return stringCut(this.stream.parseStringISO(content, content + len), maxLength); + case 0x1E: // BMPString + return stringCut(this.stream.parseStringBMP(content, content + len), maxLength); + case 0x17: // UTCTime + case 0x18: // GeneralizedTime + return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17)); + } + return null; + }; + ASN1.prototype.toString = function () { + return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? "null" : this.sub.length) + "]"; + }; + ASN1.prototype.toPrettyString = function (indent) { + if (indent === undefined) { + indent = ""; + } + var s = indent + this.typeName() + " @" + this.stream.pos; + if (this.length >= 0) { + s += "+"; + } + s += this.length; + if (this.tag.tagConstructed) { + s += " (constructed)"; + } + else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) { + s += " (encapsulates)"; + } + s += "\n"; + if (this.sub !== null) { + indent += " "; + for (var i = 0, max = this.sub.length; i < max; ++i) { + s += this.sub[i].toPrettyString(indent); + } + } + return s; + }; + ASN1.prototype.posStart = function () { + return this.stream.pos; + }; + ASN1.prototype.posContent = function () { + return this.stream.pos + this.header; + }; + ASN1.prototype.posEnd = function () { + return this.stream.pos + this.header + Math.abs(this.length); + }; + ASN1.prototype.toHexString = function () { + return this.stream.hexDump(this.posStart(), this.posEnd(), true); + }; + ASN1.decodeLength = function (stream) { + var buf = stream.get(); + var len = buf & 0x7F; + if (len == buf) { + return len; + } + // no reason to use Int10, as it would be a huge buffer anyways + if (len > 6) { + throw new Error("Length over 48 bits not supported at position " + (stream.pos - 1)); + } + if (len === 0) { + return null; + } // undefined + buf = 0; + for (var i = 0; i < len; ++i) { + buf = (buf * 256) + stream.get(); + } + return buf; + }; + /** + * Retrieve the hexadecimal value (as a string) of the current ASN.1 element + * @returns {string} + * @public + */ + ASN1.prototype.getHexStringValue = function () { + var hexString = this.toHexString(); + var offset = this.header * 2; + var length = this.length * 2; + return hexString.substr(offset, length); + }; + ASN1.decode = function (str) { + var stream; + if (!(str instanceof Stream)) { + stream = new Stream(str, 0); + } + else { + stream = str; + } + var streamStart = new Stream(stream); + var tag = new ASN1Tag(stream); + var len = ASN1.decodeLength(stream); + var start = stream.pos; + var header = start - streamStart.pos; + var sub = null; + var getSub = function () { + var ret = []; + if (len !== null) { + // definite length + var end = start + len; + while (stream.pos < end) { + ret[ret.length] = ASN1.decode(stream); + } + if (stream.pos != end) { + throw new Error("Content size is not correct for container starting at offset " + start); + } + } + else { + // undefined length + try { + for (;;) { + var s = ASN1.decode(stream); + if (s.tag.isEOC()) { + break; + } + ret[ret.length] = s; + } + len = start - stream.pos; // undefined lengths are represented as negative values + } + catch (e) { + throw new Error("Exception while decoding undefined length content: " + e); + } + } + return ret; + }; + if (tag.tagConstructed) { + // must have valid content + sub = getSub(); + } + else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) { + // sometimes BitString and OctetString are used to encapsulate ASN.1 + try { + if (tag.tagNumber == 0x03) { + if (stream.get() != 0) { + throw new Error("BIT STRINGs with unused bits cannot encapsulate."); + } + } + sub = getSub(); + for (var i = 0; i < sub.length; ++i) { + if (sub[i].tag.isEOC()) { + throw new Error("EOC is not supposed to be actual content."); + } + } + } + catch (e) { + // but silently ignore when they don't + sub = null; + } + } + if (sub === null) { + if (len === null) { + throw new Error("We can't skip over an invalid tag with undefined length at offset " + start); + } + stream.pos = start + Math.abs(len); + } + return new ASN1(streamStart, header, len, tag, sub); + }; + return ASN1; +}()); +var ASN1Tag = /** @class */ (function () { + function ASN1Tag(stream) { + var buf = stream.get(); + this.tagClass = buf >> 6; + this.tagConstructed = ((buf & 0x20) !== 0); + this.tagNumber = buf & 0x1F; + if (this.tagNumber == 0x1F) { // long tag + var n = new Int10(); + do { + buf = stream.get(); + n.mulAdd(128, buf & 0x7F); + } while (buf & 0x80); + this.tagNumber = n.simplify(); + } + } + ASN1Tag.prototype.isUniversal = function () { + return this.tagClass === 0x00; + }; + ASN1Tag.prototype.isEOC = function () { + return this.tagClass === 0x00 && this.tagNumber === 0x00; + }; + return ASN1Tag; +}()); + +// Copyright (c) 2005 Tom Wu +// Bits per digit +var dbits; +// JavaScript engine analysis +var canary = 0xdeadbeefcafe; +var j_lm = ((canary & 0xffffff) == 0xefcafe); +//#region +var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; +var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; +//#endregion +// (public) Constructor +var BigInteger = /** @class */ (function () { + function BigInteger(a, b, c) { + if (a != null) { + if ("number" == typeof a) { + this.fromNumber(a, b, c); + } + else if (b == null && "string" != typeof a) { + this.fromString(a, 256); + } + else { + this.fromString(a, b); + } + } + } + //#region PUBLIC + // BigInteger.prototype.toString = bnToString; + // (public) return string representation in given radix + BigInteger.prototype.toString = function (b) { + if (this.s < 0) { + return "-" + this.negate().toString(b); + } + var k; + if (b == 16) { + k = 4; + } + else if (b == 8) { + k = 3; + } + else if (b == 2) { + k = 1; + } + else if (b == 32) { + k = 5; + } + else if (b == 4) { + k = 2; + } + else { + return this.toRadix(b); + } + var km = (1 << k) - 1; + var d; + var m = false; + var r = ""; + var i = this.t; + var p = this.DB - (i * this.DB) % k; + if (i-- > 0) { + if (p < this.DB && (d = this[i] >> p) > 0) { + m = true; + r = int2char(d); + } + while (i >= 0) { + if (p < k) { + d = (this[i] & ((1 << p) - 1)) << (k - p); + d |= this[--i] >> (p += this.DB - k); + } + else { + d = (this[i] >> (p -= k)) & km; + if (p <= 0) { + p += this.DB; + --i; + } + } + if (d > 0) { + m = true; + } + if (m) { + r += int2char(d); + } + } + } + return m ? r : "0"; + }; + // BigInteger.prototype.negate = bnNegate; + // (public) -this + BigInteger.prototype.negate = function () { + var r = nbi(); + BigInteger.ZERO.subTo(this, r); + return r; + }; + // BigInteger.prototype.abs = bnAbs; + // (public) |this| + BigInteger.prototype.abs = function () { + return (this.s < 0) ? this.negate() : this; + }; + // BigInteger.prototype.compareTo = bnCompareTo; + // (public) return + if this > a, - if this < a, 0 if equal + BigInteger.prototype.compareTo = function (a) { + var r = this.s - a.s; + if (r != 0) { + return r; + } + var i = this.t; + r = i - a.t; + if (r != 0) { + return (this.s < 0) ? -r : r; + } + while (--i >= 0) { + if ((r = this[i] - a[i]) != 0) { + return r; + } + } + return 0; + }; + // BigInteger.prototype.bitLength = bnBitLength; + // (public) return the number of bits in "this" + BigInteger.prototype.bitLength = function () { + if (this.t <= 0) { + return 0; + } + return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM)); + }; + // BigInteger.prototype.mod = bnMod; + // (public) this mod a + BigInteger.prototype.mod = function (a) { + var r = nbi(); + this.abs().divRemTo(a, null, r); + if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { + a.subTo(r, r); + } + return r; + }; + // BigInteger.prototype.modPowInt = bnModPowInt; + // (public) this^e % m, 0 <= e < 2^32 + BigInteger.prototype.modPowInt = function (e, m) { + var z; + if (e < 256 || m.isEven()) { + z = new Classic(m); + } + else { + z = new Montgomery(m); + } + return this.exp(e, z); + }; + // BigInteger.prototype.clone = bnClone; + // (public) + BigInteger.prototype.clone = function () { + var r = nbi(); + this.copyTo(r); + return r; + }; + // BigInteger.prototype.intValue = bnIntValue; + // (public) return value as integer + BigInteger.prototype.intValue = function () { + if (this.s < 0) { + if (this.t == 1) { + return this[0] - this.DV; + } + else if (this.t == 0) { + return -1; + } + } + else if (this.t == 1) { + return this[0]; + } + else if (this.t == 0) { + return 0; + } + // assumes 16 < DB < 32 + return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]; + }; + // BigInteger.prototype.byteValue = bnByteValue; + // (public) return value as byte + BigInteger.prototype.byteValue = function () { + return (this.t == 0) ? this.s : (this[0] << 24) >> 24; + }; + // BigInteger.prototype.shortValue = bnShortValue; + // (public) return value as short (assumes DB>=16) + BigInteger.prototype.shortValue = function () { + return (this.t == 0) ? this.s : (this[0] << 16) >> 16; + }; + // BigInteger.prototype.signum = bnSigNum; + // (public) 0 if this == 0, 1 if this > 0 + BigInteger.prototype.signum = function () { + if (this.s < 0) { + return -1; + } + else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) { + return 0; + } + else { + return 1; + } + }; + // BigInteger.prototype.toByteArray = bnToByteArray; + // (public) convert to bigendian byte array + BigInteger.prototype.toByteArray = function () { + var i = this.t; + var r = []; + r[0] = this.s; + var p = this.DB - (i * this.DB) % 8; + var d; + var k = 0; + if (i-- > 0) { + if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) { + r[k++] = d | (this.s << (this.DB - p)); + } + while (i >= 0) { + if (p < 8) { + d = (this[i] & ((1 << p) - 1)) << (8 - p); + d |= this[--i] >> (p += this.DB - 8); + } + else { + d = (this[i] >> (p -= 8)) & 0xff; + if (p <= 0) { + p += this.DB; + --i; + } + } + if ((d & 0x80) != 0) { + d |= -256; + } + if (k == 0 && (this.s & 0x80) != (d & 0x80)) { + ++k; + } + if (k > 0 || d != this.s) { + r[k++] = d; + } + } + } + return r; + }; + // BigInteger.prototype.equals = bnEquals; + BigInteger.prototype.equals = function (a) { + return (this.compareTo(a) == 0); + }; + // BigInteger.prototype.min = bnMin; + BigInteger.prototype.min = function (a) { + return (this.compareTo(a) < 0) ? this : a; + }; + // BigInteger.prototype.max = bnMax; + BigInteger.prototype.max = function (a) { + return (this.compareTo(a) > 0) ? this : a; + }; + // BigInteger.prototype.and = bnAnd; + BigInteger.prototype.and = function (a) { + var r = nbi(); + this.bitwiseTo(a, op_and, r); + return r; + }; + // BigInteger.prototype.or = bnOr; + BigInteger.prototype.or = function (a) { + var r = nbi(); + this.bitwiseTo(a, op_or, r); + return r; + }; + // BigInteger.prototype.xor = bnXor; + BigInteger.prototype.xor = function (a) { + var r = nbi(); + this.bitwiseTo(a, op_xor, r); + return r; + }; + // BigInteger.prototype.andNot = bnAndNot; + BigInteger.prototype.andNot = function (a) { + var r = nbi(); + this.bitwiseTo(a, op_andnot, r); + return r; + }; + // BigInteger.prototype.not = bnNot; + // (public) ~this + BigInteger.prototype.not = function () { + var r = nbi(); + for (var i = 0; i < this.t; ++i) { + r[i] = this.DM & ~this[i]; + } + r.t = this.t; + r.s = ~this.s; + return r; + }; + // BigInteger.prototype.shiftLeft = bnShiftLeft; + // (public) this << n + BigInteger.prototype.shiftLeft = function (n) { + var r = nbi(); + if (n < 0) { + this.rShiftTo(-n, r); + } + else { + this.lShiftTo(n, r); + } + return r; + }; + // BigInteger.prototype.shiftRight = bnShiftRight; + // (public) this >> n + BigInteger.prototype.shiftRight = function (n) { + var r = nbi(); + if (n < 0) { + this.lShiftTo(-n, r); + } + else { + this.rShiftTo(n, r); + } + return r; + }; + // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; + // (public) returns index of lowest 1-bit (or -1 if none) + BigInteger.prototype.getLowestSetBit = function () { + for (var i = 0; i < this.t; ++i) { + if (this[i] != 0) { + return i * this.DB + lbit(this[i]); + } + } + if (this.s < 0) { + return this.t * this.DB; + } + return -1; + }; + // BigInteger.prototype.bitCount = bnBitCount; + // (public) return number of set bits + BigInteger.prototype.bitCount = function () { + var r = 0; + var x = this.s & this.DM; + for (var i = 0; i < this.t; ++i) { + r += cbit(this[i] ^ x); + } + return r; + }; + // BigInteger.prototype.testBit = bnTestBit; + // (public) true iff nth bit is set + BigInteger.prototype.testBit = function (n) { + var j = Math.floor(n / this.DB); + if (j >= this.t) { + return (this.s != 0); + } + return ((this[j] & (1 << (n % this.DB))) != 0); + }; + // BigInteger.prototype.setBit = bnSetBit; + // (public) this | (1< 1) { + var g2 = nbi(); + z.sqrTo(g[1], g2); + while (n <= km) { + g[n] = nbi(); + z.mulTo(g2, g[n - 2], g[n]); + n += 2; + } + } + var j = e.t - 1; + var w; + var is1 = true; + var r2 = nbi(); + var t; + i = nbits(e[j]) - 1; + while (j >= 0) { + if (i >= k1) { + w = (e[j] >> (i - k1)) & km; + } + else { + w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i); + if (j > 0) { + w |= e[j - 1] >> (this.DB + i - k1); + } + } + n = k; + while ((w & 1) == 0) { + w >>= 1; + --n; + } + if ((i -= n) < 0) { + i += this.DB; + --j; + } + if (is1) { // ret == 1, don't bother squaring or multiplying it + g[w].copyTo(r); + is1 = false; + } + else { + while (n > 1) { + z.sqrTo(r, r2); + z.sqrTo(r2, r); + n -= 2; + } + if (n > 0) { + z.sqrTo(r, r2); + } + else { + t = r; + r = r2; + r2 = t; + } + z.mulTo(r2, g[w], r); + } + while (j >= 0 && (e[j] & (1 << i)) == 0) { + z.sqrTo(r, r2); + t = r; + r = r2; + r2 = t; + if (--i < 0) { + i = this.DB - 1; + --j; + } + } + } + return z.revert(r); + }; + // BigInteger.prototype.modInverse = bnModInverse; + // (public) 1/this % m (HAC 14.61) + BigInteger.prototype.modInverse = function (m) { + var ac = m.isEven(); + if ((this.isEven() && ac) || m.signum() == 0) { + return BigInteger.ZERO; + } + var u = m.clone(); + var v = this.clone(); + var a = nbv(1); + var b = nbv(0); + var c = nbv(0); + var d = nbv(1); + while (u.signum() != 0) { + while (u.isEven()) { + u.rShiftTo(1, u); + if (ac) { + if (!a.isEven() || !b.isEven()) { + a.addTo(this, a); + b.subTo(m, b); + } + a.rShiftTo(1, a); + } + else if (!b.isEven()) { + b.subTo(m, b); + } + b.rShiftTo(1, b); + } + while (v.isEven()) { + v.rShiftTo(1, v); + if (ac) { + if (!c.isEven() || !d.isEven()) { + c.addTo(this, c); + d.subTo(m, d); + } + c.rShiftTo(1, c); + } + else if (!d.isEven()) { + d.subTo(m, d); + } + d.rShiftTo(1, d); + } + if (u.compareTo(v) >= 0) { + u.subTo(v, u); + if (ac) { + a.subTo(c, a); + } + b.subTo(d, b); + } + else { + v.subTo(u, v); + if (ac) { + c.subTo(a, c); + } + d.subTo(b, d); + } + } + if (v.compareTo(BigInteger.ONE) != 0) { + return BigInteger.ZERO; + } + if (d.compareTo(m) >= 0) { + return d.subtract(m); + } + if (d.signum() < 0) { + d.addTo(m, d); + } + else { + return d; + } + if (d.signum() < 0) { + return d.add(m); + } + else { + return d; + } + }; + // BigInteger.prototype.pow = bnPow; + // (public) this^e + BigInteger.prototype.pow = function (e) { + return this.exp(e, new NullExp()); + }; + // BigInteger.prototype.gcd = bnGCD; + // (public) gcd(this,a) (HAC 14.54) + BigInteger.prototype.gcd = function (a) { + var x = (this.s < 0) ? this.negate() : this.clone(); + var y = (a.s < 0) ? a.negate() : a.clone(); + if (x.compareTo(y) < 0) { + var t = x; + x = y; + y = t; + } + var i = x.getLowestSetBit(); + var g = y.getLowestSetBit(); + if (g < 0) { + return x; + } + if (i < g) { + g = i; + } + if (g > 0) { + x.rShiftTo(g, x); + y.rShiftTo(g, y); + } + while (x.signum() > 0) { + if ((i = x.getLowestSetBit()) > 0) { + x.rShiftTo(i, x); + } + if ((i = y.getLowestSetBit()) > 0) { + y.rShiftTo(i, y); + } + if (x.compareTo(y) >= 0) { + x.subTo(y, x); + x.rShiftTo(1, x); + } + else { + y.subTo(x, y); + y.rShiftTo(1, y); + } + } + if (g > 0) { + y.lShiftTo(g, y); + } + return y; + }; + // BigInteger.prototype.isProbablePrime = bnIsProbablePrime; + // (public) test primality with certainty >= 1-.5^t + BigInteger.prototype.isProbablePrime = function (t) { + var i; + var x = this.abs(); + if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) { + for (i = 0; i < lowprimes.length; ++i) { + if (x[0] == lowprimes[i]) { + return true; + } + } + return false; + } + if (x.isEven()) { + return false; + } + i = 1; + while (i < lowprimes.length) { + var m = lowprimes[i]; + var j = i + 1; + while (j < lowprimes.length && m < lplim) { + m *= lowprimes[j++]; + } + m = x.modInt(m); + while (i < j) { + if (m % lowprimes[i++] == 0) { + return false; + } + } + } + return x.millerRabin(t); + }; + //#endregion PUBLIC + //#region PROTECTED + // BigInteger.prototype.copyTo = bnpCopyTo; + // (protected) copy this to r + BigInteger.prototype.copyTo = function (r) { + for (var i = this.t - 1; i >= 0; --i) { + r[i] = this[i]; + } + r.t = this.t; + r.s = this.s; + }; + // BigInteger.prototype.fromInt = bnpFromInt; + // (protected) set from integer value x, -DV <= x < DV + BigInteger.prototype.fromInt = function (x) { + this.t = 1; + this.s = (x < 0) ? -1 : 0; + if (x > 0) { + this[0] = x; + } + else if (x < -1) { + this[0] = x + this.DV; + } + else { + this.t = 0; + } + }; + // BigInteger.prototype.fromString = bnpFromString; + // (protected) set from string and radix + BigInteger.prototype.fromString = function (s, b) { + var k; + if (b == 16) { + k = 4; + } + else if (b == 8) { + k = 3; + } + else if (b == 256) { + k = 8; + /* byte array */ + } + else if (b == 2) { + k = 1; + } + else if (b == 32) { + k = 5; + } + else if (b == 4) { + k = 2; + } + else { + this.fromRadix(s, b); + return; + } + this.t = 0; + this.s = 0; + var i = s.length; + var mi = false; + var sh = 0; + while (--i >= 0) { + var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i); + if (x < 0) { + if (s.charAt(i) == "-") { + mi = true; + } + continue; + } + mi = false; + if (sh == 0) { + this[this.t++] = x; + } + else if (sh + k > this.DB) { + this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh; + this[this.t++] = (x >> (this.DB - sh)); + } + else { + this[this.t - 1] |= x << sh; + } + sh += k; + if (sh >= this.DB) { + sh -= this.DB; + } + } + if (k == 8 && ((+s[0]) & 0x80) != 0) { + this.s = -1; + if (sh > 0) { + this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh; + } + } + this.clamp(); + if (mi) { + BigInteger.ZERO.subTo(this, this); + } + }; + // BigInteger.prototype.clamp = bnpClamp; + // (protected) clamp off excess high words + BigInteger.prototype.clamp = function () { + var c = this.s & this.DM; + while (this.t > 0 && this[this.t - 1] == c) { + --this.t; + } + }; + // BigInteger.prototype.dlShiftTo = bnpDLShiftTo; + // (protected) r = this << n*DB + BigInteger.prototype.dlShiftTo = function (n, r) { + var i; + for (i = this.t - 1; i >= 0; --i) { + r[i + n] = this[i]; + } + for (i = n - 1; i >= 0; --i) { + r[i] = 0; + } + r.t = this.t + n; + r.s = this.s; + }; + // BigInteger.prototype.drShiftTo = bnpDRShiftTo; + // (protected) r = this >> n*DB + BigInteger.prototype.drShiftTo = function (n, r) { + for (var i = n; i < this.t; ++i) { + r[i - n] = this[i]; + } + r.t = Math.max(this.t - n, 0); + r.s = this.s; + }; + // BigInteger.prototype.lShiftTo = bnpLShiftTo; + // (protected) r = this << n + BigInteger.prototype.lShiftTo = function (n, r) { + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << cbs) - 1; + var ds = Math.floor(n / this.DB); + var c = (this.s << bs) & this.DM; + for (var i = this.t - 1; i >= 0; --i) { + r[i + ds + 1] = (this[i] >> cbs) | c; + c = (this[i] & bm) << bs; + } + for (var i = ds - 1; i >= 0; --i) { + r[i] = 0; + } + r[ds] = c; + r.t = this.t + ds + 1; + r.s = this.s; + r.clamp(); + }; + // BigInteger.prototype.rShiftTo = bnpRShiftTo; + // (protected) r = this >> n + BigInteger.prototype.rShiftTo = function (n, r) { + r.s = this.s; + var ds = Math.floor(n / this.DB); + if (ds >= this.t) { + r.t = 0; + return; + } + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << bs) - 1; + r[0] = this[ds] >> bs; + for (var i = ds + 1; i < this.t; ++i) { + r[i - ds - 1] |= (this[i] & bm) << cbs; + r[i - ds] = this[i] >> bs; + } + if (bs > 0) { + r[this.t - ds - 1] |= (this.s & bm) << cbs; + } + r.t = this.t - ds; + r.clamp(); + }; + // BigInteger.prototype.subTo = bnpSubTo; + // (protected) r = this - a + BigInteger.prototype.subTo = function (a, r) { + var i = 0; + var c = 0; + var m = Math.min(a.t, this.t); + while (i < m) { + c += this[i] - a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + if (a.t < this.t) { + c -= a.s; + while (i < this.t) { + c += this[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while (i < a.t) { + c -= a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = (c < 0) ? -1 : 0; + if (c < -1) { + r[i++] = this.DV + c; + } + else if (c > 0) { + r[i++] = c; + } + r.t = i; + r.clamp(); + }; + // BigInteger.prototype.multiplyTo = bnpMultiplyTo; + // (protected) r = this * a, r != this,a (HAC 14.12) + // "this" should be the larger one if appropriate. + BigInteger.prototype.multiplyTo = function (a, r) { + var x = this.abs(); + var y = a.abs(); + var i = x.t; + r.t = i + y.t; + while (--i >= 0) { + r[i] = 0; + } + for (i = 0; i < y.t; ++i) { + r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); + } + r.s = 0; + r.clamp(); + if (this.s != a.s) { + BigInteger.ZERO.subTo(r, r); + } + }; + // BigInteger.prototype.squareTo = bnpSquareTo; + // (protected) r = this^2, r != this (HAC 14.16) + BigInteger.prototype.squareTo = function (r) { + var x = this.abs(); + var i = r.t = 2 * x.t; + while (--i >= 0) { + r[i] = 0; + } + for (i = 0; i < x.t - 1; ++i) { + var c = x.am(i, x[i], r, 2 * i, 0, 1); + if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { + r[i + x.t] -= x.DV; + r[i + x.t + 1] = 1; + } + } + if (r.t > 0) { + r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); + } + r.s = 0; + r.clamp(); + }; + // BigInteger.prototype.divRemTo = bnpDivRemTo; + // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) + // r != q, this != m. q or r may be null. + BigInteger.prototype.divRemTo = function (m, q, r) { + var pm = m.abs(); + if (pm.t <= 0) { + return; + } + var pt = this.abs(); + if (pt.t < pm.t) { + if (q != null) { + q.fromInt(0); + } + if (r != null) { + this.copyTo(r); + } + return; + } + if (r == null) { + r = nbi(); + } + var y = nbi(); + var ts = this.s; + var ms = m.s; + var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus + if (nsh > 0) { + pm.lShiftTo(nsh, y); + pt.lShiftTo(nsh, r); + } + else { + pm.copyTo(y); + pt.copyTo(r); + } + var ys = y.t; + var y0 = y[ys - 1]; + if (y0 == 0) { + return; + } + var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0); + var d1 = this.FV / yt; + var d2 = (1 << this.F1) / yt; + var e = 1 << this.F2; + var i = r.t; + var j = i - ys; + var t = (q == null) ? nbi() : q; + y.dlShiftTo(j, t); + if (r.compareTo(t) >= 0) { + r[r.t++] = 1; + r.subTo(t, r); + } + BigInteger.ONE.dlShiftTo(ys, t); + t.subTo(y, y); // "negative" y so we can replace sub with am later + while (y.t < ys) { + y[y.t++] = 0; + } + while (--j >= 0) { + // Estimate quotient digit + var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); + if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out + y.dlShiftTo(j, t); + r.subTo(t, r); + while (r[i] < --qd) { + r.subTo(t, r); + } + } + } + if (q != null) { + r.drShiftTo(ys, q); + if (ts != ms) { + BigInteger.ZERO.subTo(q, q); + } + } + r.t = ys; + r.clamp(); + if (nsh > 0) { + r.rShiftTo(nsh, r); + } // Denormalize remainder + if (ts < 0) { + BigInteger.ZERO.subTo(r, r); + } + }; + // BigInteger.prototype.invDigit = bnpInvDigit; + // (protected) return "-1/this % 2^DB"; useful for Mont. reduction + // justification: + // xy == 1 (mod m) + // xy = 1+km + // xy(2-xy) = (1+km)(1-km) + // x[y(2-xy)] = 1-k^2m^2 + // x[y(2-xy)] == 1 (mod m^2) + // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 + // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. + // JS multiply "overflows" differently from C/C++, so care is needed here. + BigInteger.prototype.invDigit = function () { + if (this.t < 1) { + return 0; + } + var x = this[0]; + if ((x & 1) == 0) { + return 0; + } + var y = x & 3; // y == 1/x mod 2^2 + y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4 + y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8 + y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16 + // last step - calculate inverse mod DV directly; + // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints + y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits + // we really want the negative inverse, and -DV < y < DV + return (y > 0) ? this.DV - y : -y; + }; + // BigInteger.prototype.isEven = bnpIsEven; + // (protected) true iff this is even + BigInteger.prototype.isEven = function () { + return ((this.t > 0) ? (this[0] & 1) : this.s) == 0; + }; + // BigInteger.prototype.exp = bnpExp; + // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) + BigInteger.prototype.exp = function (e, z) { + if (e > 0xffffffff || e < 1) { + return BigInteger.ONE; + } + var r = nbi(); + var r2 = nbi(); + var g = z.convert(this); + var i = nbits(e) - 1; + g.copyTo(r); + while (--i >= 0) { + z.sqrTo(r, r2); + if ((e & (1 << i)) > 0) { + z.mulTo(r2, g, r); + } + else { + var t = r; + r = r2; + r2 = t; + } + } + return z.revert(r); + }; + // BigInteger.prototype.chunkSize = bnpChunkSize; + // (protected) return x s.t. r^x < DV + BigInteger.prototype.chunkSize = function (r) { + return Math.floor(Math.LN2 * this.DB / Math.log(r)); + }; + // BigInteger.prototype.toRadix = bnpToRadix; + // (protected) convert to radix string + BigInteger.prototype.toRadix = function (b) { + if (b == null) { + b = 10; + } + if (this.signum() == 0 || b < 2 || b > 36) { + return "0"; + } + var cs = this.chunkSize(b); + var a = Math.pow(b, cs); + var d = nbv(a); + var y = nbi(); + var z = nbi(); + var r = ""; + this.divRemTo(d, y, z); + while (y.signum() > 0) { + r = (a + z.intValue()).toString(b).substr(1) + r; + y.divRemTo(d, y, z); + } + return z.intValue().toString(b) + r; + }; + // BigInteger.prototype.fromRadix = bnpFromRadix; + // (protected) convert from radix string + BigInteger.prototype.fromRadix = function (s, b) { + this.fromInt(0); + if (b == null) { + b = 10; + } + var cs = this.chunkSize(b); + var d = Math.pow(b, cs); + var mi = false; + var j = 0; + var w = 0; + for (var i = 0; i < s.length; ++i) { + var x = intAt(s, i); + if (x < 0) { + if (s.charAt(i) == "-" && this.signum() == 0) { + mi = true; + } + continue; + } + w = b * w + x; + if (++j >= cs) { + this.dMultiply(d); + this.dAddOffset(w, 0); + j = 0; + w = 0; + } + } + if (j > 0) { + this.dMultiply(Math.pow(b, j)); + this.dAddOffset(w, 0); + } + if (mi) { + BigInteger.ZERO.subTo(this, this); + } + }; + // BigInteger.prototype.fromNumber = bnpFromNumber; + // (protected) alternate constructor + BigInteger.prototype.fromNumber = function (a, b, c) { + if ("number" == typeof b) { + // new BigInteger(int,int,RNG) + if (a < 2) { + this.fromInt(1); + } + else { + this.fromNumber(a, c); + if (!this.testBit(a - 1)) { + // force MSB set + this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); + } + if (this.isEven()) { + this.dAddOffset(1, 0); + } // force odd + while (!this.isProbablePrime(b)) { + this.dAddOffset(2, 0); + if (this.bitLength() > a) { + this.subTo(BigInteger.ONE.shiftLeft(a - 1), this); + } + } + } + } + else { + // new BigInteger(int,RNG) + var x = []; + var t = a & 7; + x.length = (a >> 3) + 1; + b.nextBytes(x); + if (t > 0) { + x[0] &= ((1 << t) - 1); + } + else { + x[0] = 0; + } + this.fromString(x, 256); + } + }; + // BigInteger.prototype.bitwiseTo = bnpBitwiseTo; + // (protected) r = this op a (bitwise) + BigInteger.prototype.bitwiseTo = function (a, op, r) { + var i; + var f; + var m = Math.min(a.t, this.t); + for (i = 0; i < m; ++i) { + r[i] = op(this[i], a[i]); + } + if (a.t < this.t) { + f = a.s & this.DM; + for (i = m; i < this.t; ++i) { + r[i] = op(this[i], f); + } + r.t = this.t; + } + else { + f = this.s & this.DM; + for (i = m; i < a.t; ++i) { + r[i] = op(f, a[i]); + } + r.t = a.t; + } + r.s = op(this.s, a.s); + r.clamp(); + }; + // BigInteger.prototype.changeBit = bnpChangeBit; + // (protected) this op (1<>= this.DB; + } + if (a.t < this.t) { + c += a.s; + while (i < this.t) { + c += this[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while (i < a.t) { + c += a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c += a.s; + } + r.s = (c < 0) ? -1 : 0; + if (c > 0) { + r[i++] = c; + } + else if (c < -1) { + r[i++] = this.DV + c; + } + r.t = i; + r.clamp(); + }; + // BigInteger.prototype.dMultiply = bnpDMultiply; + // (protected) this *= n, this >= 0, 1 < n < DV + BigInteger.prototype.dMultiply = function (n) { + this[this.t] = this.am(0, n - 1, this, 0, 0, this.t); + ++this.t; + this.clamp(); + }; + // BigInteger.prototype.dAddOffset = bnpDAddOffset; + // (protected) this += n << w words, this >= 0 + BigInteger.prototype.dAddOffset = function (n, w) { + if (n == 0) { + return; + } + while (this.t <= w) { + this[this.t++] = 0; + } + this[w] += n; + while (this[w] >= this.DV) { + this[w] -= this.DV; + if (++w >= this.t) { + this[this.t++] = 0; + } + ++this[w]; + } + }; + // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; + // (protected) r = lower n words of "this * a", a.t <= n + // "this" should be the larger one if appropriate. + BigInteger.prototype.multiplyLowerTo = function (a, n, r) { + var i = Math.min(this.t + a.t, n); + r.s = 0; // assumes a,this >= 0 + r.t = i; + while (i > 0) { + r[--i] = 0; + } + for (var j = r.t - this.t; i < j; ++i) { + r[i + this.t] = this.am(0, a[i], r, i, 0, this.t); + } + for (var j = Math.min(a.t, n); i < j; ++i) { + this.am(0, a[i], r, i, 0, n - i); + } + r.clamp(); + }; + // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; + // (protected) r = "this * a" without lower n words, n > 0 + // "this" should be the larger one if appropriate. + BigInteger.prototype.multiplyUpperTo = function (a, n, r) { + --n; + var i = r.t = this.t + a.t - n; + r.s = 0; // assumes a,this >= 0 + while (--i >= 0) { + r[i] = 0; + } + for (i = Math.max(n - this.t, 0); i < a.t; ++i) { + r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n); + } + r.clamp(); + r.drShiftTo(1, r); + }; + // BigInteger.prototype.modInt = bnpModInt; + // (protected) this % n, n < 2^26 + BigInteger.prototype.modInt = function (n) { + if (n <= 0) { + return 0; + } + var d = this.DV % n; + var r = (this.s < 0) ? n - 1 : 0; + if (this.t > 0) { + if (d == 0) { + r = this[0] % n; + } + else { + for (var i = this.t - 1; i >= 0; --i) { + r = (d * r + this[i]) % n; + } + } + } + return r; + }; + // BigInteger.prototype.millerRabin = bnpMillerRabin; + // (protected) true if probably prime (HAC 4.24, Miller-Rabin) + BigInteger.prototype.millerRabin = function (t) { + var n1 = this.subtract(BigInteger.ONE); + var k = n1.getLowestSetBit(); + if (k <= 0) { + return false; + } + var r = n1.shiftRight(k); + t = (t + 1) >> 1; + if (t > lowprimes.length) { + t = lowprimes.length; + } + var a = nbi(); + for (var i = 0; i < t; ++i) { + // Pick bases at random, instead of starting at 2 + a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); + var y = a.modPow(r, this); + if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { + var j = 1; + while (j++ < k && y.compareTo(n1) != 0) { + y = y.modPowInt(2, this); + if (y.compareTo(BigInteger.ONE) == 0) { + return false; + } + } + if (y.compareTo(n1) != 0) { + return false; + } + } + } + return true; + }; + // BigInteger.prototype.square = bnSquare; + // (public) this^2 + BigInteger.prototype.square = function () { + var r = nbi(); + this.squareTo(r); + return r; + }; + //#region ASYNC + // Public API method + BigInteger.prototype.gcda = function (a, callback) { + var x = (this.s < 0) ? this.negate() : this.clone(); + var y = (a.s < 0) ? a.negate() : a.clone(); + if (x.compareTo(y) < 0) { + var t = x; + x = y; + y = t; + } + var i = x.getLowestSetBit(); + var g = y.getLowestSetBit(); + if (g < 0) { + callback(x); + return; + } + if (i < g) { + g = i; + } + if (g > 0) { + x.rShiftTo(g, x); + y.rShiftTo(g, y); + } + // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen. + var gcda1 = function () { + if ((i = x.getLowestSetBit()) > 0) { + x.rShiftTo(i, x); + } + if ((i = y.getLowestSetBit()) > 0) { + y.rShiftTo(i, y); + } + if (x.compareTo(y) >= 0) { + x.subTo(y, x); + x.rShiftTo(1, x); + } + else { + y.subTo(x, y); + y.rShiftTo(1, y); + } + if (!(x.signum() > 0)) { + if (g > 0) { + y.lShiftTo(g, y); + } + setTimeout(function () { callback(y); }, 0); // escape + } + else { + setTimeout(gcda1, 0); + } + }; + setTimeout(gcda1, 10); + }; + // (protected) alternate constructor + BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) { + if ("number" == typeof b) { + if (a < 2) { + this.fromInt(1); + } + else { + this.fromNumber(a, c); + if (!this.testBit(a - 1)) { + this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); + } + if (this.isEven()) { + this.dAddOffset(1, 0); + } + var bnp_1 = this; + var bnpfn1_1 = function () { + bnp_1.dAddOffset(2, 0); + if (bnp_1.bitLength() > a) { + bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1); + } + if (bnp_1.isProbablePrime(b)) { + setTimeout(function () { callback(); }, 0); // escape + } + else { + setTimeout(bnpfn1_1, 0); + } + }; + setTimeout(bnpfn1_1, 0); + } + } + else { + var x = []; + var t = a & 7; + x.length = (a >> 3) + 1; + b.nextBytes(x); + if (t > 0) { + x[0] &= ((1 << t) - 1); + } + else { + x[0] = 0; + } + this.fromString(x, 256); + } + }; + return BigInteger; +}()); +//#region REDUCERS +//#region NullExp +var NullExp = /** @class */ (function () { + function NullExp() { + } + // NullExp.prototype.convert = nNop; + NullExp.prototype.convert = function (x) { + return x; + }; + // NullExp.prototype.revert = nNop; + NullExp.prototype.revert = function (x) { + return x; + }; + // NullExp.prototype.mulTo = nMulTo; + NullExp.prototype.mulTo = function (x, y, r) { + x.multiplyTo(y, r); + }; + // NullExp.prototype.sqrTo = nSqrTo; + NullExp.prototype.sqrTo = function (x, r) { + x.squareTo(r); + }; + return NullExp; +}()); +// Modular reduction using "classic" algorithm +var Classic = /** @class */ (function () { + function Classic(m) { + this.m = m; + } + // Classic.prototype.convert = cConvert; + Classic.prototype.convert = function (x) { + if (x.s < 0 || x.compareTo(this.m) >= 0) { + return x.mod(this.m); + } + else { + return x; + } + }; + // Classic.prototype.revert = cRevert; + Classic.prototype.revert = function (x) { + return x; + }; + // Classic.prototype.reduce = cReduce; + Classic.prototype.reduce = function (x) { + x.divRemTo(this.m, null, x); + }; + // Classic.prototype.mulTo = cMulTo; + Classic.prototype.mulTo = function (x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + }; + // Classic.prototype.sqrTo = cSqrTo; + Classic.prototype.sqrTo = function (x, r) { + x.squareTo(r); + this.reduce(r); + }; + return Classic; +}()); +//#endregion +//#region Montgomery +// Montgomery reduction +var Montgomery = /** @class */ (function () { + function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp & 0x7fff; + this.mph = this.mp >> 15; + this.um = (1 << (m.DB - 15)) - 1; + this.mt2 = 2 * m.t; + } + // Montgomery.prototype.convert = montConvert; + // xR mod m + Montgomery.prototype.convert = function (x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t, r); + r.divRemTo(this.m, null, r); + if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { + this.m.subTo(r, r); + } + return r; + }; + // Montgomery.prototype.revert = montRevert; + // x/R mod m + Montgomery.prototype.revert = function (x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; + }; + // Montgomery.prototype.reduce = montReduce; + // x = x/R mod m (HAC 14.32) + Montgomery.prototype.reduce = function (x) { + while (x.t <= this.mt2) { + // pad x so am has enough room later + x[x.t++] = 0; + } + for (var i = 0; i < this.m.t; ++i) { + // faster way of calculating u0 = x[i]*mp mod DV + var j = x[i] & 0x7fff; + var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM; + // use am to combine the multiply-shift-add into one call + j = i + this.m.t; + x[j] += this.m.am(0, u0, x, i, 0, this.m.t); + // propagate carry + while (x[j] >= x.DV) { + x[j] -= x.DV; + x[++j]++; + } + } + x.clamp(); + x.drShiftTo(this.m.t, x); + if (x.compareTo(this.m) >= 0) { + x.subTo(this.m, x); + } + }; + // Montgomery.prototype.mulTo = montMulTo; + // r = "xy/R mod m"; x,y != r + Montgomery.prototype.mulTo = function (x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + }; + // Montgomery.prototype.sqrTo = montSqrTo; + // r = "x^2/R mod m"; x != r + Montgomery.prototype.sqrTo = function (x, r) { + x.squareTo(r); + this.reduce(r); + }; + return Montgomery; +}()); +//#endregion Montgomery +//#region Barrett +// Barrett modular reduction +var Barrett = /** @class */ (function () { + function Barrett(m) { + this.m = m; + // setup Barrett + this.r2 = nbi(); + this.q3 = nbi(); + BigInteger.ONE.dlShiftTo(2 * m.t, this.r2); + this.mu = this.r2.divide(m); + } + // Barrett.prototype.convert = barrettConvert; + Barrett.prototype.convert = function (x) { + if (x.s < 0 || x.t > 2 * this.m.t) { + return x.mod(this.m); + } + else if (x.compareTo(this.m) < 0) { + return x; + } + else { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; + } + }; + // Barrett.prototype.revert = barrettRevert; + Barrett.prototype.revert = function (x) { + return x; + }; + // Barrett.prototype.reduce = barrettReduce; + // x = x mod m (HAC 14.42) + Barrett.prototype.reduce = function (x) { + x.drShiftTo(this.m.t - 1, this.r2); + if (x.t > this.m.t + 1) { + x.t = this.m.t + 1; + x.clamp(); + } + this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); + this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); + while (x.compareTo(this.r2) < 0) { + x.dAddOffset(1, this.m.t + 1); + } + x.subTo(this.r2, x); + while (x.compareTo(this.m) >= 0) { + x.subTo(this.m, x); + } + }; + // Barrett.prototype.mulTo = barrettMulTo; + // r = x*y mod m; x,y != r + Barrett.prototype.mulTo = function (x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + }; + // Barrett.prototype.sqrTo = barrettSqrTo; + // r = x^2 mod m; x != r + Barrett.prototype.sqrTo = function (x, r) { + x.squareTo(r); + this.reduce(r); + }; + return Barrett; +}()); +//#endregion +//#endregion REDUCERS +// return new, unset BigInteger +function nbi() { return new BigInteger(null); } +function parseBigInt(str, r) { + return new BigInteger(str, r); +} +// am: Compute w_j += (x*this_i), propagate carries, +// c is initial carry, returns final carry. +// c < 3*dvalue, x < 2*dvalue, this_i < dvalue +// We need to select the fastest one that works in this environment. +// am1: use a single mult and divide to get the high bits, +// max digit bits should be 26 because +// max internal value = 2*dvalue^2-2*dvalue (< 2^53) +function am1(i, x, w, j, c, n) { + while (--n >= 0) { + var v = x * this[i++] + w[j] + c; + c = Math.floor(v / 0x4000000); + w[j++] = v & 0x3ffffff; + } + return c; +} +// am2 avoids a big mult-and-extract completely. +// Max digit bits should be <= 30 because we do bitwise ops +// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) +function am2(i, x, w, j, c, n) { + var xl = x & 0x7fff; + var xh = x >> 15; + while (--n >= 0) { + var l = this[i] & 0x7fff; + var h = this[i++] >> 15; + var m = xh * l + h * xl; + l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff); + c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); + w[j++] = l & 0x3fffffff; + } + return c; +} +// Alternately, set max digit bits to 28 since some +// browsers slow down when dealing with 32-bit numbers. +function am3(i, x, w, j, c, n) { + var xl = x & 0x3fff; + var xh = x >> 14; + while (--n >= 0) { + var l = this[i] & 0x3fff; + var h = this[i++] >> 14; + var m = xh * l + h * xl; + l = xl * l + ((m & 0x3fff) << 14) + w[j] + c; + c = (l >> 28) + (m >> 14) + xh * h; + w[j++] = l & 0xfffffff; + } + return c; +} +if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = am2; + dbits = 30; +} +else if (j_lm && (navigator.appName != "Netscape")) { + BigInteger.prototype.am = am1; + dbits = 26; +} +else { // Mozilla/Netscape seems to prefer am3 + BigInteger.prototype.am = am3; + dbits = 28; +} +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1 << dbits) - 1); +BigInteger.prototype.DV = (1 << dbits); +var BI_FP = 52; +BigInteger.prototype.FV = Math.pow(2, BI_FP); +BigInteger.prototype.F1 = BI_FP - dbits; +BigInteger.prototype.F2 = 2 * dbits - BI_FP; +// Digit conversions +var BI_RC = []; +var rr; +var vv; +rr = "0".charCodeAt(0); +for (vv = 0; vv <= 9; ++vv) { + BI_RC[rr++] = vv; +} +rr = "a".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) { + BI_RC[rr++] = vv; +} +rr = "A".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) { + BI_RC[rr++] = vv; +} +function intAt(s, i) { + var c = BI_RC[s.charCodeAt(i)]; + return (c == null) ? -1 : c; +} +// return bigint initialized to value +function nbv(i) { + var r = nbi(); + r.fromInt(i); + return r; +} +// returns bit length of the integer x +function nbits(x) { + var r = 1; + var t; + if ((t = x >>> 16) != 0) { + x = t; + r += 16; + } + if ((t = x >> 8) != 0) { + x = t; + r += 8; + } + if ((t = x >> 4) != 0) { + x = t; + r += 4; + } + if ((t = x >> 2) != 0) { + x = t; + r += 2; + } + if ((t = x >> 1) != 0) { + x = t; + r += 1; + } + return r; +} +// "constants" +BigInteger.ZERO = nbv(0); +BigInteger.ONE = nbv(1); + +// prng4.js - uses Arcfour as a PRNG +var Arcfour = /** @class */ (function () { + function Arcfour() { + this.i = 0; + this.j = 0; + this.S = []; + } + // Arcfour.prototype.init = ARC4init; + // Initialize arcfour context from key, an array of ints, each from [0..255] + Arcfour.prototype.init = function (key) { + var i; + var j; + var t; + for (i = 0; i < 256; ++i) { + this.S[i] = i; + } + j = 0; + for (i = 0; i < 256; ++i) { + j = (j + this.S[i] + key[i % key.length]) & 255; + t = this.S[i]; + this.S[i] = this.S[j]; + this.S[j] = t; + } + this.i = 0; + this.j = 0; + }; + // Arcfour.prototype.next = ARC4next; + Arcfour.prototype.next = function () { + var t; + this.i = (this.i + 1) & 255; + this.j = (this.j + this.S[this.i]) & 255; + t = this.S[this.i]; + this.S[this.i] = this.S[this.j]; + this.S[this.j] = t; + return this.S[(t + this.S[this.i]) & 255]; + }; + return Arcfour; +}()); +// Plug in your RNG constructor here +function prng_newstate() { + return new Arcfour(); +} +// Pool size must be a multiple of 4 and greater than 32. +// An array of bytes the size of the pool will be passed to init() +var rng_psize = 256; + +// Random number generator - requires a PRNG backend, e.g. prng4.js +var rng_state; +var rng_pool = null; +var rng_pptr; +// Initialize the pool with junk if needed. +if (rng_pool == null) { + rng_pool = []; + rng_pptr = 0; + var t = void 0; + if (window.crypto && window.crypto.getRandomValues) { + // Extract entropy (2048 bits) from RNG if available + var z = new Uint32Array(256); + window.crypto.getRandomValues(z); + for (t = 0; t < z.length; ++t) { + rng_pool[rng_pptr++] = z[t] & 255; + } + } + // Use mouse events for entropy, if we do not have enough entropy by the time + // we need it, entropy will be generated by Math.random. + var onMouseMoveListener_1 = function (ev) { + this.count = this.count || 0; + if (this.count >= 256 || rng_pptr >= rng_psize) { + if (window.removeEventListener) { + window.removeEventListener("mousemove", onMouseMoveListener_1, false); + } + else if (window.detachEvent) { + window.detachEvent("onmousemove", onMouseMoveListener_1); + } + return; + } + try { + var mouseCoordinates = ev.x + ev.y; + rng_pool[rng_pptr++] = mouseCoordinates & 255; + this.count += 1; + } + catch (e) { + // Sometimes Firefox will deny permission to access event properties for some reason. Ignore. + } + }; + if (window.addEventListener) { + window.addEventListener("mousemove", onMouseMoveListener_1, false); + } + else if (window.attachEvent) { + window.attachEvent("onmousemove", onMouseMoveListener_1); + } +} +function rng_get_byte() { + if (rng_state == null) { + rng_state = prng_newstate(); + // At this point, we may not have collected enough entropy. If not, fall back to Math.random + while (rng_pptr < rng_psize) { + var random = Math.floor(65536 * Math.random()); + rng_pool[rng_pptr++] = random & 255; + } + rng_state.init(rng_pool); + for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) { + rng_pool[rng_pptr] = 0; + } + rng_pptr = 0; + } + // TODO: allow reseeding after first request + return rng_state.next(); +} +var SecureRandom = /** @class */ (function () { + function SecureRandom() { + } + SecureRandom.prototype.nextBytes = function (ba) { + for (var i = 0; i < ba.length; ++i) { + ba[i] = rng_get_byte(); + } + }; + return SecureRandom; +}()); + +// Depends on jsbn.js and rng.js +// function linebrk(s,n) { +// var ret = ""; +// var i = 0; +// while(i + n < s.length) { +// ret += s.substring(i,i+n) + "\n"; +// i += n; +// } +// return ret + s.substring(i,s.length); +// } +// function byte2Hex(b) { +// if(b < 0x10) +// return "0" + b.toString(16); +// else +// return b.toString(16); +// } +function pkcs1pad1(s, n) { + if (n < s.length + 22) { + console.error("Message too long for RSA"); + return null; + } + var len = n - s.length - 6; + var filler = ""; + for (var f = 0; f < len; f += 2) { + filler += "ff"; + } + var m = "0001" + filler + "00" + s; + return parseBigInt(m, 16); +} +// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint +function pkcs1pad2(s, n) { + if (n < s.length + 11) { // TODO: fix for utf-8 + console.error("Message too long for RSA"); + return null; + } + var ba = []; + var i = s.length - 1; + while (i >= 0 && n > 0) { + var c = s.charCodeAt(i--); + if (c < 128) { // encode using utf-8 + ba[--n] = c; + } + else if ((c > 127) && (c < 2048)) { + ba[--n] = (c & 63) | 128; + ba[--n] = (c >> 6) | 192; + } + else { + ba[--n] = (c & 63) | 128; + ba[--n] = ((c >> 6) & 63) | 128; + ba[--n] = (c >> 12) | 224; + } + } + ba[--n] = 0; + var rng = new SecureRandom(); + var x = []; + while (n > 2) { // random non-zero pad + x[0] = 0; + while (x[0] == 0) { + rng.nextBytes(x); + } + ba[--n] = x[0]; + } + ba[--n] = 2; + ba[--n] = 0; + return new BigInteger(ba); +} +// "empty" RSA key constructor +var RSAKey = /** @class */ (function () { + function RSAKey() { + this.n = null; + this.e = 0; + this.d = null; + this.p = null; + this.q = null; + this.dmp1 = null; + this.dmq1 = null; + this.coeff = null; + } + //#region PROTECTED + // protected + // RSAKey.prototype.doPublic = RSADoPublic; + // Perform raw public operation on "x": return x^e (mod n) + RSAKey.prototype.doPublic = function (x) { + return x.modPowInt(this.e, this.n); + }; + // RSAKey.prototype.doPrivate = RSADoPrivate; + // Perform raw private operation on "x": return x^d (mod n) + RSAKey.prototype.doPrivate = function (x) { + if (this.p == null || this.q == null) { + return x.modPow(this.d, this.n); + } + // TODO: re-calculate any missing CRT params + var xp = x.mod(this.p).modPow(this.dmp1, this.p); + var xq = x.mod(this.q).modPow(this.dmq1, this.q); + while (xp.compareTo(xq) < 0) { + xp = xp.add(this.p); + } + return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq); + }; + //#endregion PROTECTED + //#region PUBLIC + // RSAKey.prototype.setPublic = RSASetPublic; + // Set the public key fields N and e from hex strings + RSAKey.prototype.setPublic = function (N, E) { + if (N != null && E != null && N.length > 0 && E.length > 0) { + this.n = parseBigInt(N, 16); + this.e = parseInt(E, 16); + } + else { + console.error("Invalid RSA public key"); + } + }; + // RSAKey.prototype.encrypt = RSAEncrypt; + // Return the PKCS#1 RSA encryption of "text" as an even-length hex string + RSAKey.prototype.encrypt = function (text) { + var m = pkcs1pad2(text, (this.n.bitLength() + 7) >> 3); + if (m == null) { + return null; + } + var c = this.doPublic(m); + if (c == null) { + return null; + } + var h = c.toString(16); + if ((h.length & 1) == 0) { + return h; + } + else { + return "0" + h; + } + }; + // RSAKey.prototype.setPrivate = RSASetPrivate; + // Set the private key fields N, e, and d from hex strings + RSAKey.prototype.setPrivate = function (N, E, D) { + if (N != null && E != null && N.length > 0 && E.length > 0) { + this.n = parseBigInt(N, 16); + this.e = parseInt(E, 16); + this.d = parseBigInt(D, 16); + } + else { + console.error("Invalid RSA private key"); + } + }; + // RSAKey.prototype.setPrivateEx = RSASetPrivateEx; + // Set the private key fields N, e, d and CRT params from hex strings + RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) { + if (N != null && E != null && N.length > 0 && E.length > 0) { + this.n = parseBigInt(N, 16); + this.e = parseInt(E, 16); + this.d = parseBigInt(D, 16); + this.p = parseBigInt(P, 16); + this.q = parseBigInt(Q, 16); + this.dmp1 = parseBigInt(DP, 16); + this.dmq1 = parseBigInt(DQ, 16); + this.coeff = parseBigInt(C, 16); + } + else { + console.error("Invalid RSA private key"); + } + }; + // RSAKey.prototype.generate = RSAGenerate; + // Generate a new random private key B bits long, using public expt E + RSAKey.prototype.generate = function (B, E) { + var rng = new SecureRandom(); + var qs = B >> 1; + this.e = parseInt(E, 16); + var ee = new BigInteger(E, 16); + for (;;) { + for (;;) { + this.p = new BigInteger(B - qs, 1, rng); + if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) { + break; + } + } + for (;;) { + this.q = new BigInteger(qs, 1, rng); + if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) { + break; + } + } + if (this.p.compareTo(this.q) <= 0) { + var t = this.p; + this.p = this.q; + this.q = t; + } + var p1 = this.p.subtract(BigInteger.ONE); + var q1 = this.q.subtract(BigInteger.ONE); + var phi = p1.multiply(q1); + if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { + this.n = this.p.multiply(this.q); + this.d = ee.modInverse(phi); + this.dmp1 = this.d.mod(p1); + this.dmq1 = this.d.mod(q1); + this.coeff = this.q.modInverse(this.p); + break; + } + } + }; + // RSAKey.prototype.decrypt = RSADecrypt; + // Return the PKCS#1 RSA decryption of "ctext". + // "ctext" is an even-length hex string and the output is a plain string. + RSAKey.prototype.decrypt = function (ctext) { + var c = parseBigInt(ctext, 16); + var m = this.doPrivate(c); + if (m == null) { + return null; + } + return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3); + }; + // Generate a new random private key B bits long, using public expt E + RSAKey.prototype.generateAsync = function (B, E, callback) { + var rng = new SecureRandom(); + var qs = B >> 1; + this.e = parseInt(E, 16); + var ee = new BigInteger(E, 16); + var rsa = this; + // These functions have non-descript names because they were originally for(;;) loops. + // I don't know about cryptography to give them better names than loop1-4. + var loop1 = function () { + var loop4 = function () { + if (rsa.p.compareTo(rsa.q) <= 0) { + var t = rsa.p; + rsa.p = rsa.q; + rsa.q = t; + } + var p1 = rsa.p.subtract(BigInteger.ONE); + var q1 = rsa.q.subtract(BigInteger.ONE); + var phi = p1.multiply(q1); + if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { + rsa.n = rsa.p.multiply(rsa.q); + rsa.d = ee.modInverse(phi); + rsa.dmp1 = rsa.d.mod(p1); + rsa.dmq1 = rsa.d.mod(q1); + rsa.coeff = rsa.q.modInverse(rsa.p); + setTimeout(function () { callback(); }, 0); // escape + } + else { + setTimeout(loop1, 0); + } + }; + var loop3 = function () { + rsa.q = nbi(); + rsa.q.fromNumberAsync(qs, 1, rng, function () { + rsa.q.subtract(BigInteger.ONE).gcda(ee, function (r) { + if (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) { + setTimeout(loop4, 0); + } + else { + setTimeout(loop3, 0); + } + }); + }); + }; + var loop2 = function () { + rsa.p = nbi(); + rsa.p.fromNumberAsync(B - qs, 1, rng, function () { + rsa.p.subtract(BigInteger.ONE).gcda(ee, function (r) { + if (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) { + setTimeout(loop3, 0); + } + else { + setTimeout(loop2, 0); + } + }); + }); + }; + setTimeout(loop2, 0); + }; + setTimeout(loop1, 0); + }; + RSAKey.prototype.sign = function (text, digestMethod, digestName) { + var header = getDigestHeader(digestName); + var digest = header + digestMethod(text).toString(); + var m = pkcs1pad1(digest, this.n.bitLength() / 4); + if (m == null) { + return null; + } + var c = this.doPrivate(m); + if (c == null) { + return null; + } + var h = c.toString(16); + if ((h.length & 1) == 0) { + return h; + } + else { + return "0" + h; + } + }; + RSAKey.prototype.verify = function (text, signature, digestMethod) { + var c = parseBigInt(signature, 16); + var m = this.doPublic(c); + if (m == null) { + return null; + } + var unpadded = m.toString(16).replace(/^1f+00/, ""); + var digest = removeDigestHeader(unpadded); + return digest == digestMethod(text).toString(); + }; + return RSAKey; +}()); +// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext +function pkcs1unpad2(d, n) { + var b = d.toByteArray(); + var i = 0; + while (i < b.length && b[i] == 0) { + ++i; + } + if (b.length - i != n - 1 || b[i] != 2) { + return null; + } + ++i; + while (b[i] != 0) { + if (++i >= b.length) { + return null; + } + } + var ret = ""; + while (++i < b.length) { + var c = b[i] & 255; + if (c < 128) { // utf-8 decode + ret += String.fromCharCode(c); + } + else if ((c > 191) && (c < 224)) { + ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63)); + ++i; + } + else { + ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63)); + i += 2; + } + } + return ret; +} +// https://tools.ietf.org/html/rfc3447#page-43 +var DIGEST_HEADERS = { + md2: "3020300c06082a864886f70d020205000410", + md5: "3020300c06082a864886f70d020505000410", + sha1: "3021300906052b0e03021a05000414", + sha224: "302d300d06096086480165030402040500041c", + sha256: "3031300d060960864801650304020105000420", + sha384: "3041300d060960864801650304020205000430", + sha512: "3051300d060960864801650304020305000440", + ripemd160: "3021300906052b2403020105000414", +}; +function getDigestHeader(name) { + return DIGEST_HEADERS[name] || ""; +} +function removeDigestHeader(str) { + for (var name_1 in DIGEST_HEADERS) { + if (DIGEST_HEADERS.hasOwnProperty(name_1)) { + var header = DIGEST_HEADERS[name_1]; + var len = header.length; + if (str.substr(0, len) == header) { + return str.substr(len); + } + } + } + return str; +} +// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string +// function RSAEncryptB64(text) { +// var h = this.encrypt(text); +// if(h) return hex2b64(h); else return null; +// } +// public +// RSAKey.prototype.encrypt_b64 = RSAEncryptB64; + +/*! +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +var YAHOO = {}; +YAHOO.lang = { + /** + * Utility to set up the prototype, constructor and superclass properties to + * support an inheritance strategy that can chain constructors and methods. + * Static members will not be inherited. + * + * @method extend + * @static + * @param {Function} subc the object to modify + * @param {Function} superc the object to inherit + * @param {Object} overrides additional properties/methods to add to the + * subclass prototype. These will override the + * matching items obtained from the superclass + * if present. + */ + extend: function(subc, superc, overrides) { + if (! superc || ! subc) { + throw new Error("YAHOO.lang.extend failed, please check that " + + "all dependencies are included."); + } + + var F = function() {}; + F.prototype = superc.prototype; + subc.prototype = new F(); + subc.prototype.constructor = subc; + subc.superclass = superc.prototype; + + if (superc.prototype.constructor == Object.prototype.constructor) { + superc.prototype.constructor = superc; + } + + if (overrides) { + var i; + for (i in overrides) { + subc.prototype[i] = overrides[i]; + } + + /* + * IE will not enumerate native functions in a derived object even if the + * function was overridden. This is a workaround for specific functions + * we care about on the Object prototype. + * @property _IEEnumFix + * @param {Function} r the object to receive the augmentation + * @param {Function} s the object that supplies the properties to augment + * @static + * @private + */ + var _IEEnumFix = function() {}, + ADD = ["toString", "valueOf"]; + try { + if (/MSIE/.test(navigator.userAgent)) { + _IEEnumFix = function(r, s) { + for (i = 0; i < ADD.length; i = i + 1) { + var fname = ADD[i], f = s[fname]; + if (typeof f === 'function' && f != Object.prototype[fname]) { + r[fname] = f; + } + } + }; + } + } catch (ex) {} _IEEnumFix(subc.prototype, overrides); + } + } +}; + +/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ + +/** + * @fileOverview + * @name asn1-1.0.js + * @author Kenji Urushima kenji.urushima@gmail.com + * @version asn1 1.0.13 (2017-Jun-02) + * @since jsrsasign 2.1 + * @license MIT License + */ + +/** + * kjur's class library name space + *

+ * This name space provides following name spaces: + *

    + *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • + *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • + *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature + * class and utilities
  • + *
+ *

+ * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2. + * @name KJUR + * @namespace kjur's class library name space + */ +var KJUR = {}; + +/** + * kjur's ASN.1 class library name space + *

+ * This is ITU-T X.690 ASN.1 DER encoder class library and + * class structure and methods is very similar to + * org.bouncycastle.asn1 package of + * well known BouncyCaslte Cryptography Library. + *

PROVIDING ASN.1 PRIMITIVES

+ * Here are ASN.1 DER primitive classes. + *
    + *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • + *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • + *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • + *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • + *
  • 0x05 {@link KJUR.asn1.DERNull}
  • + *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • + *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • + *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • + *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • + *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • + *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • + *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • + *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • + *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • + *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • + *
  • 0x31 {@link KJUR.asn1.DERSet}
  • + *
+ *

OTHER ASN.1 CLASSES

+ *
    + *
  • {@link KJUR.asn1.ASN1Object}
  • + *
  • {@link KJUR.asn1.DERAbstractString}
  • + *
  • {@link KJUR.asn1.DERAbstractTime}
  • + *
  • {@link KJUR.asn1.DERAbstractStructured}
  • + *
  • {@link KJUR.asn1.DERTaggedObject}
  • + *
+ *

SUB NAME SPACES

+ *
    + *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • + *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • + *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • + *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • + *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • + *
+ *

+ * NOTE: Please ignore method summary and document of this namespace. + * This caused by a bug of jsdoc2. + * @name KJUR.asn1 + * @namespace + */ +if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) KJUR.asn1 = {}; + +/** + * ASN1 utilities class + * @name KJUR.asn1.ASN1Util + * @class ASN1 utilities class + * @since asn1 1.0.2 + */ +KJUR.asn1.ASN1Util = new function() { + this.integerToByteHex = function(i) { + var h = i.toString(16); + if ((h.length % 2) == 1) h = '0' + h; + return h; + }; + this.bigIntToMinTwosComplementsHex = function(bigIntegerValue) { + var h = bigIntegerValue.toString(16); + if (h.substr(0, 1) != '-') { + if (h.length % 2 == 1) { + h = '0' + h; + } else { + if (! h.match(/^[0-7]/)) { + h = '00' + h; + } + } + } else { + var hPos = h.substr(1); + var xorLen = hPos.length; + if (xorLen % 2 == 1) { + xorLen += 1; + } else { + if (! h.match(/^[0-7]/)) { + xorLen += 2; + } + } + var hMask = ''; + for (var i = 0; i < xorLen; i++) { + hMask += 'f'; + } + var biMask = new BigInteger(hMask, 16); + var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE); + h = biNeg.toString(16).replace(/^-/, ''); + } + return h; + }; + /** + * get PEM string from hexadecimal data and header string + * @name getPEMStringFromHex + * @memberOf KJUR.asn1.ASN1Util + * @function + * @param {String} dataHex hexadecimal string of PEM body + * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY') + * @return {String} PEM formatted string of input data + * @description + * This method converts a hexadecimal string to a PEM string with + * a specified header. Its line break will be CRLF("\r\n"). + * @example + * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY'); + * // value of pem will be: + * -----BEGIN PRIVATE KEY----- + * YWFh + * -----END PRIVATE KEY----- + */ + this.getPEMStringFromHex = function(dataHex, pemHeader) { + return hextopem(dataHex, pemHeader); + }; + + /** + * generate ASN1Object specifed by JSON parameters + * @name newObject + * @memberOf KJUR.asn1.ASN1Util + * @function + * @param {Array} param JSON parameter to generate ASN1Object + * @return {KJUR.asn1.ASN1Object} generated object + * @since asn1 1.0.3 + * @description + * generate any ASN1Object specified by JSON param + * including ASN.1 primitive or structured. + * Generally 'param' can be described as follows: + *
+ * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER} + *
+ * 'TYPE-OF-ASN1OBJ' can be one of following symbols: + *
    + *
  • 'bool' - DERBoolean
  • + *
  • 'int' - DERInteger
  • + *
  • 'bitstr' - DERBitString
  • + *
  • 'octstr' - DEROctetString
  • + *
  • 'null' - DERNull
  • + *
  • 'oid' - DERObjectIdentifier
  • + *
  • 'enum' - DEREnumerated
  • + *
  • 'utf8str' - DERUTF8String
  • + *
  • 'numstr' - DERNumericString
  • + *
  • 'prnstr' - DERPrintableString
  • + *
  • 'telstr' - DERTeletexString
  • + *
  • 'ia5str' - DERIA5String
  • + *
  • 'utctime' - DERUTCTime
  • + *
  • 'gentime' - DERGeneralizedTime
  • + *
  • 'seq' - DERSequence
  • + *
  • 'set' - DERSet
  • + *
  • 'tag' - DERTaggedObject
  • + *
+ * @example + * newObject({'prnstr': 'aaa'}); + * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]}) + * // ASN.1 Tagged Object + * newObject({'tag': {'tag': 'a1', + * 'explicit': true, + * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}}); + * // more simple representation of ASN.1 Tagged Object + * newObject({'tag': ['a1', + * true, + * {'seq': [ + * {'int': 3}, + * {'prnstr': 'aaa'}]} + * ]}); + */ + this.newObject = function(param) { + var _KJUR = KJUR, + _KJUR_asn1 = _KJUR.asn1, + _DERBoolean = _KJUR_asn1.DERBoolean, + _DERInteger = _KJUR_asn1.DERInteger, + _DERBitString = _KJUR_asn1.DERBitString, + _DEROctetString = _KJUR_asn1.DEROctetString, + _DERNull = _KJUR_asn1.DERNull, + _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, + _DEREnumerated = _KJUR_asn1.DEREnumerated, + _DERUTF8String = _KJUR_asn1.DERUTF8String, + _DERNumericString = _KJUR_asn1.DERNumericString, + _DERPrintableString = _KJUR_asn1.DERPrintableString, + _DERTeletexString = _KJUR_asn1.DERTeletexString, + _DERIA5String = _KJUR_asn1.DERIA5String, + _DERUTCTime = _KJUR_asn1.DERUTCTime, + _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, + _DERSequence = _KJUR_asn1.DERSequence, + _DERSet = _KJUR_asn1.DERSet, + _DERTaggedObject = _KJUR_asn1.DERTaggedObject, + _newObject = _KJUR_asn1.ASN1Util.newObject; + + var keys = Object.keys(param); + if (keys.length != 1) + throw "key of param shall be only one."; + var key = keys[0]; + + if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + key + ":") == -1) + throw "undefined key: " + key; + + if (key == "bool") return new _DERBoolean(param[key]); + if (key == "int") return new _DERInteger(param[key]); + if (key == "bitstr") return new _DERBitString(param[key]); + if (key == "octstr") return new _DEROctetString(param[key]); + if (key == "null") return new _DERNull(param[key]); + if (key == "oid") return new _DERObjectIdentifier(param[key]); + if (key == "enum") return new _DEREnumerated(param[key]); + if (key == "utf8str") return new _DERUTF8String(param[key]); + if (key == "numstr") return new _DERNumericString(param[key]); + if (key == "prnstr") return new _DERPrintableString(param[key]); + if (key == "telstr") return new _DERTeletexString(param[key]); + if (key == "ia5str") return new _DERIA5String(param[key]); + if (key == "utctime") return new _DERUTCTime(param[key]); + if (key == "gentime") return new _DERGeneralizedTime(param[key]); + + if (key == "seq") { + var paramList = param[key]; + var a = []; + for (var i = 0; i < paramList.length; i++) { + var asn1Obj = _newObject(paramList[i]); + a.push(asn1Obj); + } + return new _DERSequence({'array': a}); + } + + if (key == "set") { + var paramList = param[key]; + var a = []; + for (var i = 0; i < paramList.length; i++) { + var asn1Obj = _newObject(paramList[i]); + a.push(asn1Obj); + } + return new _DERSet({'array': a}); + } + + if (key == "tag") { + var tagParam = param[key]; + if (Object.prototype.toString.call(tagParam) === '[object Array]' && + tagParam.length == 3) { + var obj = _newObject(tagParam[2]); + return new _DERTaggedObject({tag: tagParam[0], + explicit: tagParam[1], + obj: obj}); + } else { + var newParam = {}; + if (tagParam.explicit !== undefined) + newParam.explicit = tagParam.explicit; + if (tagParam.tag !== undefined) + newParam.tag = tagParam.tag; + if (tagParam.obj === undefined) + throw "obj shall be specified for 'tag'."; + newParam.obj = _newObject(tagParam.obj); + return new _DERTaggedObject(newParam); + } + } + }; + + /** + * get encoded hexadecimal string of ASN1Object specifed by JSON parameters + * @name jsonToASN1HEX + * @memberOf KJUR.asn1.ASN1Util + * @function + * @param {Array} param JSON parameter to generate ASN1Object + * @return hexadecimal string of ASN1Object + * @since asn1 1.0.4 + * @description + * As for ASN.1 object representation of JSON object, + * please see {@link newObject}. + * @example + * jsonToASN1HEX({'prnstr': 'aaa'}); + */ + this.jsonToASN1HEX = function(param) { + var asn1Obj = this.newObject(param); + return asn1Obj.getEncodedHex(); + }; +}; + +/** + * get dot noted oid number string from hexadecimal value of OID + * @name oidHexToInt + * @memberOf KJUR.asn1.ASN1Util + * @function + * @param {String} hex hexadecimal value of object identifier + * @return {String} dot noted string of object identifier + * @since jsrsasign 4.8.3 asn1 1.0.7 + * @description + * This static method converts from hexadecimal string representation of + * ASN.1 value of object identifier to oid number string. + * @example + * KJUR.asn1.ASN1Util.oidHexToInt('550406') → "2.5.4.6" + */ +KJUR.asn1.ASN1Util.oidHexToInt = function(hex) { + var s = ""; + var i01 = parseInt(hex.substr(0, 2), 16); + var i0 = Math.floor(i01 / 40); + var i1 = i01 % 40; + var s = i0 + "." + i1; + + var binbuf = ""; + for (var i = 2; i < hex.length; i += 2) { + var value = parseInt(hex.substr(i, 2), 16); + var bin = ("00000000" + value.toString(2)).slice(- 8); + binbuf = binbuf + bin.substr(1, 7); + if (bin.substr(0, 1) == "0") { + var bi = new BigInteger(binbuf, 2); + s = s + "." + bi.toString(10); + binbuf = ""; + } + } + return s; +}; + +/** + * get hexadecimal value of object identifier from dot noted oid value + * @name oidIntToHex + * @memberOf KJUR.asn1.ASN1Util + * @function + * @param {String} oidString dot noted string of object identifier + * @return {String} hexadecimal value of object identifier + * @since jsrsasign 4.8.3 asn1 1.0.7 + * @description + * This static method converts from object identifier value string. + * to hexadecimal string representation of it. + * @example + * KJUR.asn1.ASN1Util.oidIntToHex("2.5.4.6") → "550406" + */ +KJUR.asn1.ASN1Util.oidIntToHex = function(oidString) { + var itox = function(i) { + var h = i.toString(16); + if (h.length == 1) h = '0' + h; + return h; + }; + + var roidtox = function(roid) { + var h = ''; + var bi = new BigInteger(roid, 10); + var b = bi.toString(2); + var padLen = 7 - b.length % 7; + if (padLen == 7) padLen = 0; + var bPad = ''; + for (var i = 0; i < padLen; i++) bPad += '0'; + b = bPad + b; + for (var i = 0; i < b.length - 1; i += 7) { + var b8 = b.substr(i, 7); + if (i != b.length - 7) b8 = '1' + b8; + h += itox(parseInt(b8, 2)); + } + return h; + }; + + if (! oidString.match(/^[0-9.]+$/)) { + throw "malformed oid string: " + oidString; + } + var h = ''; + var a = oidString.split('.'); + var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); + h += itox(i0); + a.splice(0, 2); + for (var i = 0; i < a.length; i++) { + h += roidtox(a[i]); + } + return h; +}; + + +// ******************************************************************** +// Abstract ASN.1 Classes +// ******************************************************************** + +// ******************************************************************** + +/** + * base class for ASN.1 DER encoder object + * @name KJUR.asn1.ASN1Object + * @class base class for ASN.1 DER encoder object + * @property {Boolean} isModified flag whether internal data was changed + * @property {String} hTLV hexadecimal string of ASN.1 TLV + * @property {String} hT hexadecimal string of ASN.1 TLV tag(T) + * @property {String} hL hexadecimal string of ASN.1 TLV length(L) + * @property {String} hV hexadecimal string of ASN.1 TLV value(V) + * @description + */ +KJUR.asn1.ASN1Object = function() { + var hV = ''; + + /** + * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V) + * @name getLengthHexFromValue + * @memberOf KJUR.asn1.ASN1Object# + * @function + * @return {String} hexadecimal string of ASN.1 TLV length(L) + */ + this.getLengthHexFromValue = function() { + if (typeof this.hV == "undefined" || this.hV == null) { + throw "this.hV is null or undefined."; + } + if (this.hV.length % 2 == 1) { + throw "value hex must be even length: n=" + hV.length + ",v=" + this.hV; + } + var n = this.hV.length / 2; + var hN = n.toString(16); + if (hN.length % 2 == 1) { + hN = "0" + hN; + } + if (n < 128) { + return hN; + } else { + var hNlen = hN.length / 2; + if (hNlen > 15) { + throw "ASN.1 length too long to represent by 8x: n = " + n.toString(16); + } + var head = 128 + hNlen; + return head.toString(16) + hN; + } + }; + + /** + * get hexadecimal string of ASN.1 TLV bytes + * @name getEncodedHex + * @memberOf KJUR.asn1.ASN1Object# + * @function + * @return {String} hexadecimal string of ASN.1 TLV + */ + this.getEncodedHex = function() { + if (this.hTLV == null || this.isModified) { + this.hV = this.getFreshValueHex(); + this.hL = this.getLengthHexFromValue(); + this.hTLV = this.hT + this.hL + this.hV; + this.isModified = false; + //alert("first time: " + this.hTLV); + } + return this.hTLV; + }; + + /** + * get hexadecimal string of ASN.1 TLV value(V) bytes + * @name getValueHex + * @memberOf KJUR.asn1.ASN1Object# + * @function + * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes + */ + this.getValueHex = function() { + this.getEncodedHex(); + return this.hV; + }; + + this.getFreshValueHex = function() { + return ''; + }; +}; + +// == BEGIN DERAbstractString ================================================ +/** + * base class for ASN.1 DER string classes + * @name KJUR.asn1.DERAbstractString + * @class base class for ASN.1 DER string classes + * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) + * @property {String} s internal string of value + * @extends KJUR.asn1.ASN1Object + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • str - specify initial ASN.1 value(V) by a string
  • + *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • + *
+ * NOTE: 'params' can be omitted. + */ +KJUR.asn1.DERAbstractString = function(params) { + KJUR.asn1.DERAbstractString.superclass.constructor.call(this); + + /** + * get string value of this string object + * @name getString + * @memberOf KJUR.asn1.DERAbstractString# + * @function + * @return {String} string value of this string object + */ + this.getString = function() { + return this.s; + }; + + /** + * set value by a string + * @name setString + * @memberOf KJUR.asn1.DERAbstractString# + * @function + * @param {String} newS value by a string to set + */ + this.setString = function(newS) { + this.hTLV = null; + this.isModified = true; + this.s = newS; + this.hV = stohex(this.s); + }; + + /** + * set value by a hexadecimal string + * @name setStringHex + * @memberOf KJUR.asn1.DERAbstractString# + * @function + * @param {String} newHexString value by a hexadecimal string to set + */ + this.setStringHex = function(newHexString) { + this.hTLV = null; + this.isModified = true; + this.s = null; + this.hV = newHexString; + }; + + this.getFreshValueHex = function() { + return this.hV; + }; + + if (typeof params != "undefined") { + if (typeof params == "string") { + this.setString(params); + } else if (typeof params['str'] != "undefined") { + this.setString(params['str']); + } else if (typeof params['hex'] != "undefined") { + this.setStringHex(params['hex']); + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object); +// == END DERAbstractString ================================================ + +// == BEGIN DERAbstractTime ================================================== +/** + * base class for ASN.1 DER Generalized/UTCTime class + * @name KJUR.asn1.DERAbstractTime + * @class base class for ASN.1 DER Generalized/UTCTime class + * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'}) + * @extends KJUR.asn1.ASN1Object + * @description + * @see KJUR.asn1.ASN1Object - superclass + */ +KJUR.asn1.DERAbstractTime = function(params) { + KJUR.asn1.DERAbstractTime.superclass.constructor.call(this); + + // --- PRIVATE METHODS -------------------- + this.localDateToUTC = function(d) { + utc = d.getTime() + (d.getTimezoneOffset() * 60000); + var utcDate = new Date(utc); + return utcDate; + }; + + /* + * format date string by Data object + * @name formatDate + * @memberOf KJUR.asn1.AbstractTime; + * @param {Date} dateObject + * @param {string} type 'utc' or 'gen' + * @param {boolean} withMillis flag for with millisections or not + * @description + * 'withMillis' flag is supported from asn1 1.0.6. + */ + this.formatDate = function(dateObject, type, withMillis) { + var pad = this.zeroPadding; + var d = this.localDateToUTC(dateObject); + var year = String(d.getFullYear()); + if (type == 'utc') year = year.substr(2, 2); + var month = pad(String(d.getMonth() + 1), 2); + var day = pad(String(d.getDate()), 2); + var hour = pad(String(d.getHours()), 2); + var min = pad(String(d.getMinutes()), 2); + var sec = pad(String(d.getSeconds()), 2); + var s = year + month + day + hour + min + sec; + if (withMillis === true) { + var millis = d.getMilliseconds(); + if (millis != 0) { + var sMillis = pad(String(millis), 3); + sMillis = sMillis.replace(/[0]+$/, ""); + s = s + "." + sMillis; + } + } + return s + "Z"; + }; + + this.zeroPadding = function(s, len) { + if (s.length >= len) return s; + return new Array(len - s.length + 1).join('0') + s; + }; + + // --- PUBLIC METHODS -------------------- + /** + * get string value of this string object + * @name getString + * @memberOf KJUR.asn1.DERAbstractTime# + * @function + * @return {String} string value of this time object + */ + this.getString = function() { + return this.s; + }; + + /** + * set value by a string + * @name setString + * @memberOf KJUR.asn1.DERAbstractTime# + * @function + * @param {String} newS value by a string to set such like "130430235959Z" + */ + this.setString = function(newS) { + this.hTLV = null; + this.isModified = true; + this.s = newS; + this.hV = stohex(newS); + }; + + /** + * set value by a Date object + * @name setByDateValue + * @memberOf KJUR.asn1.DERAbstractTime# + * @function + * @param {Integer} year year of date (ex. 2013) + * @param {Integer} month month of date between 1 and 12 (ex. 12) + * @param {Integer} day day of month + * @param {Integer} hour hours of date + * @param {Integer} min minutes of date + * @param {Integer} sec seconds of date + */ + this.setByDateValue = function(year, month, day, hour, min, sec) { + var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0)); + this.setByDate(dateObject); + }; + + this.getFreshValueHex = function() { + return this.hV; + }; +}; +YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object); +// == END DERAbstractTime ================================================== + +// == BEGIN DERAbstractStructured ============================================ +/** + * base class for ASN.1 DER structured class + * @name KJUR.asn1.DERAbstractStructured + * @class base class for ASN.1 DER structured class + * @property {Array} asn1Array internal array of ASN1Object + * @extends KJUR.asn1.ASN1Object + * @description + * @see KJUR.asn1.ASN1Object - superclass + */ +KJUR.asn1.DERAbstractStructured = function(params) { + KJUR.asn1.DERAbstractString.superclass.constructor.call(this); + + /** + * set value by array of ASN1Object + * @name setByASN1ObjectArray + * @memberOf KJUR.asn1.DERAbstractStructured# + * @function + * @param {array} asn1ObjectArray array of ASN1Object to set + */ + this.setByASN1ObjectArray = function(asn1ObjectArray) { + this.hTLV = null; + this.isModified = true; + this.asn1Array = asn1ObjectArray; + }; + + /** + * append an ASN1Object to internal array + * @name appendASN1Object + * @memberOf KJUR.asn1.DERAbstractStructured# + * @function + * @param {ASN1Object} asn1Object to add + */ + this.appendASN1Object = function(asn1Object) { + this.hTLV = null; + this.isModified = true; + this.asn1Array.push(asn1Object); + }; + + this.asn1Array = new Array(); + if (typeof params != "undefined") { + if (typeof params['array'] != "undefined") { + this.asn1Array = params['array']; + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object); + + +// ******************************************************************** +// ASN.1 Object Classes +// ******************************************************************** + +// ******************************************************************** +/** + * class for ASN.1 DER Boolean + * @name KJUR.asn1.DERBoolean + * @class class for ASN.1 DER Boolean + * @extends KJUR.asn1.ASN1Object + * @description + * @see KJUR.asn1.ASN1Object - superclass + */ +KJUR.asn1.DERBoolean = function() { + KJUR.asn1.DERBoolean.superclass.constructor.call(this); + this.hT = "01"; + this.hTLV = "0101ff"; +}; +YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object); + +// ******************************************************************** +/** + * class for ASN.1 DER Integer + * @name KJUR.asn1.DERInteger + * @class class for ASN.1 DER Integer + * @extends KJUR.asn1.ASN1Object + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • int - specify initial ASN.1 value(V) by integer value
  • + *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • + *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • + *
+ * NOTE: 'params' can be omitted. + */ +KJUR.asn1.DERInteger = function(params) { + KJUR.asn1.DERInteger.superclass.constructor.call(this); + this.hT = "02"; + + /** + * set value by Tom Wu's BigInteger object + * @name setByBigInteger + * @memberOf KJUR.asn1.DERInteger# + * @function + * @param {BigInteger} bigIntegerValue to set + */ + this.setByBigInteger = function(bigIntegerValue) { + this.hTLV = null; + this.isModified = true; + this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); + }; + + /** + * set value by integer value + * @name setByInteger + * @memberOf KJUR.asn1.DERInteger + * @function + * @param {Integer} integer value to set + */ + this.setByInteger = function(intValue) { + var bi = new BigInteger(String(intValue), 10); + this.setByBigInteger(bi); + }; + + /** + * set value by integer value + * @name setValueHex + * @memberOf KJUR.asn1.DERInteger# + * @function + * @param {String} hexadecimal string of integer value + * @description + *
+ * NOTE: Value shall be represented by minimum octet length of + * two's complement representation. + * @example + * new KJUR.asn1.DERInteger(123); + * new KJUR.asn1.DERInteger({'int': 123}); + * new KJUR.asn1.DERInteger({'hex': '1fad'}); + */ + this.setValueHex = function(newHexString) { + this.hV = newHexString; + }; + + this.getFreshValueHex = function() { + return this.hV; + }; + + if (typeof params != "undefined") { + if (typeof params['bigint'] != "undefined") { + this.setByBigInteger(params['bigint']); + } else if (typeof params['int'] != "undefined") { + this.setByInteger(params['int']); + } else if (typeof params == "number") { + this.setByInteger(params); + } else if (typeof params['hex'] != "undefined") { + this.setValueHex(params['hex']); + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object); + +// ******************************************************************** +/** + * class for ASN.1 DER encoded BitString primitive + * @name KJUR.asn1.DERBitString + * @class class for ASN.1 DER encoded BitString primitive + * @extends KJUR.asn1.ASN1Object + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • bin - specify binary string (ex. '10111')
  • + *
  • array - specify array of boolean (ex. [true,false,true,true])
  • + *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • + *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject} + * argument for "BitString encapsulates" structure.
  • + *
+ * NOTE1: 'params' can be omitted.
+ * NOTE2: 'obj' parameter have been supported since + * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
+ * @example + * // default constructor + * o = new KJUR.asn1.DERBitString(); + * // initialize with binary string + * o = new KJUR.asn1.DERBitString({bin: "1011"}); + * // initialize with boolean array + * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]}); + * // initialize with hexadecimal string (04 is unused bits) + * o = new KJUR.asn1.DEROctetString({hex: "04bac0"}); + * // initialize with ASN1Util.newObject argument for encapsulated + * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}}); + * // above generates a ASN.1 data like this: + * // BIT STRING, encapsulates { + * // SEQUENCE { + * // INTEGER 3 + * // PrintableString 'aaa' + * // } + * // } + */ +KJUR.asn1.DERBitString = function(params) { + if (params !== undefined && typeof params.obj !== "undefined") { + var o = KJUR.asn1.ASN1Util.newObject(params.obj); + params.hex = "00" + o.getEncodedHex(); + } + KJUR.asn1.DERBitString.superclass.constructor.call(this); + this.hT = "03"; + + /** + * set ASN.1 value(V) by a hexadecimal string including unused bits + * @name setHexValueIncludingUnusedBits + * @memberOf KJUR.asn1.DERBitString# + * @function + * @param {String} newHexStringIncludingUnusedBits + */ + this.setHexValueIncludingUnusedBits = function(newHexStringIncludingUnusedBits) { + this.hTLV = null; + this.isModified = true; + this.hV = newHexStringIncludingUnusedBits; + }; + + /** + * set ASN.1 value(V) by unused bit and hexadecimal string of value + * @name setUnusedBitsAndHexValue + * @memberOf KJUR.asn1.DERBitString# + * @function + * @param {Integer} unusedBits + * @param {String} hValue + */ + this.setUnusedBitsAndHexValue = function(unusedBits, hValue) { + if (unusedBits < 0 || 7 < unusedBits) { + throw "unused bits shall be from 0 to 7: u = " + unusedBits; + } + var hUnusedBits = "0" + unusedBits; + this.hTLV = null; + this.isModified = true; + this.hV = hUnusedBits + hValue; + }; + + /** + * set ASN.1 DER BitString by binary string
+ * @name setByBinaryString + * @memberOf KJUR.asn1.DERBitString# + * @function + * @param {String} binaryString binary value string (i.e. '10111') + * @description + * Its unused bits will be calculated automatically by length of + * 'binaryValue'.
+ * NOTE: Trailing zeros '0' will be ignored. + * @example + * o = new KJUR.asn1.DERBitString(); + * o.setByBooleanArray("01011"); + */ + this.setByBinaryString = function(binaryString) { + binaryString = binaryString.replace(/0+$/, ''); + var unusedBits = 8 - binaryString.length % 8; + if (unusedBits == 8) unusedBits = 0; + for (var i = 0; i <= unusedBits; i++) { + binaryString += '0'; + } + var h = ''; + for (var i = 0; i < binaryString.length - 1; i += 8) { + var b = binaryString.substr(i, 8); + var x = parseInt(b, 2).toString(16); + if (x.length == 1) x = '0' + x; + h += x; + } + this.hTLV = null; + this.isModified = true; + this.hV = '0' + unusedBits + h; + }; + + /** + * set ASN.1 TLV value(V) by an array of boolean
+ * @name setByBooleanArray + * @memberOf KJUR.asn1.DERBitString# + * @function + * @param {array} booleanArray array of boolean (ex. [true, false, true]) + * @description + * NOTE: Trailing falses will be ignored in the ASN.1 DER Object. + * @example + * o = new KJUR.asn1.DERBitString(); + * o.setByBooleanArray([false, true, false, true, true]); + */ + this.setByBooleanArray = function(booleanArray) { + var s = ''; + for (var i = 0; i < booleanArray.length; i++) { + if (booleanArray[i] == true) { + s += '1'; + } else { + s += '0'; + } + } + this.setByBinaryString(s); + }; + + /** + * generate an array of falses with specified length
+ * @name newFalseArray + * @memberOf KJUR.asn1.DERBitString + * @function + * @param {Integer} nLength length of array to generate + * @return {array} array of boolean falses + * @description + * This static method may be useful to initialize boolean array. + * @example + * o = new KJUR.asn1.DERBitString(); + * o.newFalseArray(3) → [false, false, false] + */ + this.newFalseArray = function(nLength) { + var a = new Array(nLength); + for (var i = 0; i < nLength; i++) { + a[i] = false; + } + return a; + }; + + this.getFreshValueHex = function() { + return this.hV; + }; + + if (typeof params != "undefined") { + if (typeof params == "string" && params.toLowerCase().match(/^[0-9a-f]+$/)) { + this.setHexValueIncludingUnusedBits(params); + } else if (typeof params['hex'] != "undefined") { + this.setHexValueIncludingUnusedBits(params['hex']); + } else if (typeof params['bin'] != "undefined") { + this.setByBinaryString(params['bin']); + } else if (typeof params['array'] != "undefined") { + this.setByBooleanArray(params['array']); + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object); + +// ******************************************************************** +/** + * class for ASN.1 DER OctetString
+ * @name KJUR.asn1.DEROctetString + * @class class for ASN.1 DER OctetString + * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) + * @extends KJUR.asn1.DERAbstractString + * @description + * This class provides ASN.1 OctetString simple type.
+ * Supported "params" attributes are: + *
    + *
  • str - to set a string as a value
  • + *
  • hex - to set a hexadecimal string as a value
  • + *
  • obj - to set a encapsulated ASN.1 value by JSON object + * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • + *
+ * NOTE: A parameter 'obj' have been supported + * for "OCTET STRING, encapsulates" structure. + * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25). + * @see KJUR.asn1.DERAbstractString - superclass + * @example + * // default constructor + * o = new KJUR.asn1.DEROctetString(); + * // initialize with string + * o = new KJUR.asn1.DEROctetString({str: "aaa"}); + * // initialize with hexadecimal string + * o = new KJUR.asn1.DEROctetString({hex: "616161"}); + * // initialize with ASN1Util.newObject argument + * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}}); + * // above generates a ASN.1 data like this: + * // OCTET STRING, encapsulates { + * // SEQUENCE { + * // INTEGER 3 + * // PrintableString 'aaa' + * // } + * // } + */ +KJUR.asn1.DEROctetString = function(params) { + if (params !== undefined && typeof params.obj !== "undefined") { + var o = KJUR.asn1.ASN1Util.newObject(params.obj); + params.hex = o.getEncodedHex(); + } + KJUR.asn1.DEROctetString.superclass.constructor.call(this, params); + this.hT = "04"; +}; +YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString); + +// ******************************************************************** +/** + * class for ASN.1 DER Null + * @name KJUR.asn1.DERNull + * @class class for ASN.1 DER Null + * @extends KJUR.asn1.ASN1Object + * @description + * @see KJUR.asn1.ASN1Object - superclass + */ +KJUR.asn1.DERNull = function() { + KJUR.asn1.DERNull.superclass.constructor.call(this); + this.hT = "05"; + this.hTLV = "0500"; +}; +YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object); + +// ******************************************************************** +/** + * class for ASN.1 DER ObjectIdentifier + * @name KJUR.asn1.DERObjectIdentifier + * @class class for ASN.1 DER ObjectIdentifier + * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'}) + * @extends KJUR.asn1.ASN1Object + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • + *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • + *
+ * NOTE: 'params' can be omitted. + */ +KJUR.asn1.DERObjectIdentifier = function(params) { + var itox = function(i) { + var h = i.toString(16); + if (h.length == 1) h = '0' + h; + return h; + }; + var roidtox = function(roid) { + var h = ''; + var bi = new BigInteger(roid, 10); + var b = bi.toString(2); + var padLen = 7 - b.length % 7; + if (padLen == 7) padLen = 0; + var bPad = ''; + for (var i = 0; i < padLen; i++) bPad += '0'; + b = bPad + b; + for (var i = 0; i < b.length - 1; i += 7) { + var b8 = b.substr(i, 7); + if (i != b.length - 7) b8 = '1' + b8; + h += itox(parseInt(b8, 2)); + } + return h; + }; + + KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this); + this.hT = "06"; + + /** + * set value by a hexadecimal string + * @name setValueHex + * @memberOf KJUR.asn1.DERObjectIdentifier# + * @function + * @param {String} newHexString hexadecimal value of OID bytes + */ + this.setValueHex = function(newHexString) { + this.hTLV = null; + this.isModified = true; + this.s = null; + this.hV = newHexString; + }; + + /** + * set value by a OID string
+ * @name setValueOidString + * @memberOf KJUR.asn1.DERObjectIdentifier# + * @function + * @param {String} oidString OID string (ex. 2.5.4.13) + * @example + * o = new KJUR.asn1.DERObjectIdentifier(); + * o.setValueOidString("2.5.4.13"); + */ + this.setValueOidString = function(oidString) { + if (! oidString.match(/^[0-9.]+$/)) { + throw "malformed oid string: " + oidString; + } + var h = ''; + var a = oidString.split('.'); + var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); + h += itox(i0); + a.splice(0, 2); + for (var i = 0; i < a.length; i++) { + h += roidtox(a[i]); + } + this.hTLV = null; + this.isModified = true; + this.s = null; + this.hV = h; + }; + + /** + * set value by a OID name + * @name setValueName + * @memberOf KJUR.asn1.DERObjectIdentifier# + * @function + * @param {String} oidName OID name (ex. 'serverAuth') + * @since 1.0.1 + * @description + * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'. + * Otherwise raise error. + * @example + * o = new KJUR.asn1.DERObjectIdentifier(); + * o.setValueName("serverAuth"); + */ + this.setValueName = function(oidName) { + var oid = KJUR.asn1.x509.OID.name2oid(oidName); + if (oid !== '') { + this.setValueOidString(oid); + } else { + throw "DERObjectIdentifier oidName undefined: " + oidName; + } + }; + + this.getFreshValueHex = function() { + return this.hV; + }; + + if (params !== undefined) { + if (typeof params === "string") { + if (params.match(/^[0-2].[0-9.]+$/)) { + this.setValueOidString(params); + } else { + this.setValueName(params); + } + } else if (params.oid !== undefined) { + this.setValueOidString(params.oid); + } else if (params.hex !== undefined) { + this.setValueHex(params.hex); + } else if (params.name !== undefined) { + this.setValueName(params.name); + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object); + +// ******************************************************************** +/** + * class for ASN.1 DER Enumerated + * @name KJUR.asn1.DEREnumerated + * @class class for ASN.1 DER Enumerated + * @extends KJUR.asn1.ASN1Object + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • int - specify initial ASN.1 value(V) by integer value
  • + *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • + *
+ * NOTE: 'params' can be omitted. + * @example + * new KJUR.asn1.DEREnumerated(123); + * new KJUR.asn1.DEREnumerated({int: 123}); + * new KJUR.asn1.DEREnumerated({hex: '1fad'}); + */ +KJUR.asn1.DEREnumerated = function(params) { + KJUR.asn1.DEREnumerated.superclass.constructor.call(this); + this.hT = "0a"; + + /** + * set value by Tom Wu's BigInteger object + * @name setByBigInteger + * @memberOf KJUR.asn1.DEREnumerated# + * @function + * @param {BigInteger} bigIntegerValue to set + */ + this.setByBigInteger = function(bigIntegerValue) { + this.hTLV = null; + this.isModified = true; + this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); + }; + + /** + * set value by integer value + * @name setByInteger + * @memberOf KJUR.asn1.DEREnumerated# + * @function + * @param {Integer} integer value to set + */ + this.setByInteger = function(intValue) { + var bi = new BigInteger(String(intValue), 10); + this.setByBigInteger(bi); + }; + + /** + * set value by integer value + * @name setValueHex + * @memberOf KJUR.asn1.DEREnumerated# + * @function + * @param {String} hexadecimal string of integer value + * @description + *
+ * NOTE: Value shall be represented by minimum octet length of + * two's complement representation. + */ + this.setValueHex = function(newHexString) { + this.hV = newHexString; + }; + + this.getFreshValueHex = function() { + return this.hV; + }; + + if (typeof params != "undefined") { + if (typeof params['int'] != "undefined") { + this.setByInteger(params['int']); + } else if (typeof params == "number") { + this.setByInteger(params); + } else if (typeof params['hex'] != "undefined") { + this.setValueHex(params['hex']); + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object); + +// ******************************************************************** +/** + * class for ASN.1 DER UTF8String + * @name KJUR.asn1.DERUTF8String + * @class class for ASN.1 DER UTF8String + * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) + * @extends KJUR.asn1.DERAbstractString + * @description + * @see KJUR.asn1.DERAbstractString - superclass + */ +KJUR.asn1.DERUTF8String = function(params) { + KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params); + this.hT = "0c"; +}; +YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString); + +// ******************************************************************** +/** + * class for ASN.1 DER NumericString + * @name KJUR.asn1.DERNumericString + * @class class for ASN.1 DER NumericString + * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) + * @extends KJUR.asn1.DERAbstractString + * @description + * @see KJUR.asn1.DERAbstractString - superclass + */ +KJUR.asn1.DERNumericString = function(params) { + KJUR.asn1.DERNumericString.superclass.constructor.call(this, params); + this.hT = "12"; +}; +YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString); + +// ******************************************************************** +/** + * class for ASN.1 DER PrintableString + * @name KJUR.asn1.DERPrintableString + * @class class for ASN.1 DER PrintableString + * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) + * @extends KJUR.asn1.DERAbstractString + * @description + * @see KJUR.asn1.DERAbstractString - superclass + */ +KJUR.asn1.DERPrintableString = function(params) { + KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params); + this.hT = "13"; +}; +YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString); + +// ******************************************************************** +/** + * class for ASN.1 DER TeletexString + * @name KJUR.asn1.DERTeletexString + * @class class for ASN.1 DER TeletexString + * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) + * @extends KJUR.asn1.DERAbstractString + * @description + * @see KJUR.asn1.DERAbstractString - superclass + */ +KJUR.asn1.DERTeletexString = function(params) { + KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params); + this.hT = "14"; +}; +YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString); + +// ******************************************************************** +/** + * class for ASN.1 DER IA5String + * @name KJUR.asn1.DERIA5String + * @class class for ASN.1 DER IA5String + * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) + * @extends KJUR.asn1.DERAbstractString + * @description + * @see KJUR.asn1.DERAbstractString - superclass + */ +KJUR.asn1.DERIA5String = function(params) { + KJUR.asn1.DERIA5String.superclass.constructor.call(this, params); + this.hT = "16"; +}; +YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString); + +// ******************************************************************** +/** + * class for ASN.1 DER UTCTime + * @name KJUR.asn1.DERUTCTime + * @class class for ASN.1 DER UTCTime + * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'}) + * @extends KJUR.asn1.DERAbstractTime + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • + *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • + *
  • date - specify Date object.
  • + *
+ * NOTE: 'params' can be omitted. + *

EXAMPLES

+ * @example + * d1 = new KJUR.asn1.DERUTCTime(); + * d1.setString('130430125959Z'); + * + * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'}); + * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))}); + * d4 = new KJUR.asn1.DERUTCTime('130430125959Z'); + */ +KJUR.asn1.DERUTCTime = function(params) { + KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params); + this.hT = "17"; + + /** + * set value by a Date object
+ * @name setByDate + * @memberOf KJUR.asn1.DERUTCTime# + * @function + * @param {Date} dateObject Date object to set ASN.1 value(V) + * @example + * o = new KJUR.asn1.DERUTCTime(); + * o.setByDate(new Date("2016/12/31")); + */ + this.setByDate = function(dateObject) { + this.hTLV = null; + this.isModified = true; + this.date = dateObject; + this.s = this.formatDate(this.date, 'utc'); + this.hV = stohex(this.s); + }; + + this.getFreshValueHex = function() { + if (typeof this.date == "undefined" && typeof this.s == "undefined") { + this.date = new Date(); + this.s = this.formatDate(this.date, 'utc'); + this.hV = stohex(this.s); + } + return this.hV; + }; + + if (params !== undefined) { + if (params.str !== undefined) { + this.setString(params.str); + } else if (typeof params == "string" && params.match(/^[0-9]{12}Z$/)) { + this.setString(params); + } else if (params.hex !== undefined) { + this.setStringHex(params.hex); + } else if (params.date !== undefined) { + this.setByDate(params.date); + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime); + +// ******************************************************************** +/** + * class for ASN.1 DER GeneralizedTime + * @name KJUR.asn1.DERGeneralizedTime + * @class class for ASN.1 DER GeneralizedTime + * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'}) + * @property {Boolean} withMillis flag to show milliseconds or not + * @extends KJUR.asn1.DERAbstractTime + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • + *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • + *
  • date - specify Date object.
  • + *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • + *
+ * NOTE1: 'params' can be omitted. + * NOTE2: 'withMillis' property is supported from asn1 1.0.6. + */ +KJUR.asn1.DERGeneralizedTime = function(params) { + KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params); + this.hT = "18"; + this.withMillis = false; + + /** + * set value by a Date object + * @name setByDate + * @memberOf KJUR.asn1.DERGeneralizedTime# + * @function + * @param {Date} dateObject Date object to set ASN.1 value(V) + * @example + * When you specify UTC time, use 'Date.UTC' method like this:
+ * o1 = new DERUTCTime(); + * o1.setByDate(date); + * + * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59 + */ + this.setByDate = function(dateObject) { + this.hTLV = null; + this.isModified = true; + this.date = dateObject; + this.s = this.formatDate(this.date, 'gen', this.withMillis); + this.hV = stohex(this.s); + }; + + this.getFreshValueHex = function() { + if (this.date === undefined && this.s === undefined) { + this.date = new Date(); + this.s = this.formatDate(this.date, 'gen', this.withMillis); + this.hV = stohex(this.s); + } + return this.hV; + }; + + if (params !== undefined) { + if (params.str !== undefined) { + this.setString(params.str); + } else if (typeof params == "string" && params.match(/^[0-9]{14}Z$/)) { + this.setString(params); + } else if (params.hex !== undefined) { + this.setStringHex(params.hex); + } else if (params.date !== undefined) { + this.setByDate(params.date); + } + if (params.millis === true) { + this.withMillis = true; + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime); + +// ******************************************************************** +/** + * class for ASN.1 DER Sequence + * @name KJUR.asn1.DERSequence + * @class class for ASN.1 DER Sequence + * @extends KJUR.asn1.DERAbstractStructured + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • array - specify array of ASN1Object to set elements of content
  • + *
+ * NOTE: 'params' can be omitted. + */ +KJUR.asn1.DERSequence = function(params) { + KJUR.asn1.DERSequence.superclass.constructor.call(this, params); + this.hT = "30"; + this.getFreshValueHex = function() { + var h = ''; + for (var i = 0; i < this.asn1Array.length; i++) { + var asn1Obj = this.asn1Array[i]; + h += asn1Obj.getEncodedHex(); + } + this.hV = h; + return this.hV; + }; +}; +YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured); + +// ******************************************************************** +/** + * class for ASN.1 DER Set + * @name KJUR.asn1.DERSet + * @class class for ASN.1 DER Set + * @extends KJUR.asn1.DERAbstractStructured + * @description + *
+ * As for argument 'params' for constructor, you can specify one of + * following properties: + *
    + *
  • array - specify array of ASN1Object to set elements of content
  • + *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
  • + *
+ * NOTE1: 'params' can be omitted.
+ * NOTE2: sortflag is supported since 1.0.5. + */ +KJUR.asn1.DERSet = function(params) { + KJUR.asn1.DERSet.superclass.constructor.call(this, params); + this.hT = "31"; + this.sortFlag = true; // item shall be sorted only in ASN.1 DER + this.getFreshValueHex = function() { + var a = new Array(); + for (var i = 0; i < this.asn1Array.length; i++) { + var asn1Obj = this.asn1Array[i]; + a.push(asn1Obj.getEncodedHex()); + } + if (this.sortFlag == true) a.sort(); + this.hV = a.join(''); + return this.hV; + }; + + if (typeof params != "undefined") { + if (typeof params.sortflag != "undefined" && + params.sortflag == false) + this.sortFlag = false; + } +}; +YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured); + +// ******************************************************************** +/** + * class for ASN.1 DER TaggedObject + * @name KJUR.asn1.DERTaggedObject + * @class class for ASN.1 DER TaggedObject + * @extends KJUR.asn1.ASN1Object + * @description + *
+ * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object. + * For example, if you find '[1]' tag in a ASN.1 dump, + * 'tagNoHex' will be 'a1'. + *
+ * As for optional argument 'params' for constructor, you can specify *ANY* of + * following properties: + *
    + *
  • explicit - specify true if this is explicit tag otherwise false + * (default is 'true').
  • + *
  • tag - specify tag (default is 'a0' which means [0])
  • + *
  • obj - specify ASN1Object which is tagged
  • + *
+ * @example + * d1 = new KJUR.asn1.DERUTF8String({'str':'a'}); + * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1}); + * hex = d2.getEncodedHex(); + */ +KJUR.asn1.DERTaggedObject = function(params) { + KJUR.asn1.DERTaggedObject.superclass.constructor.call(this); + this.hT = "a0"; + this.hV = ''; + this.isExplicit = true; + this.asn1Object = null; + + /** + * set value by an ASN1Object + * @name setString + * @memberOf KJUR.asn1.DERTaggedObject# + * @function + * @param {Boolean} isExplicitFlag flag for explicit/implicit tag + * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag + * @param {ASN1Object} asn1Object ASN.1 to encapsulate + */ + this.setASN1Object = function(isExplicitFlag, tagNoHex, asn1Object) { + this.hT = tagNoHex; + this.isExplicit = isExplicitFlag; + this.asn1Object = asn1Object; + if (this.isExplicit) { + this.hV = this.asn1Object.getEncodedHex(); + this.hTLV = null; + this.isModified = true; + } else { + this.hV = null; + this.hTLV = asn1Object.getEncodedHex(); + this.hTLV = this.hTLV.replace(/^../, tagNoHex); + this.isModified = false; + } + }; + + this.getFreshValueHex = function() { + return this.hV; + }; + + if (typeof params != "undefined") { + if (typeof params['tag'] != "undefined") { + this.hT = params['tag']; + } + if (typeof params['explicit'] != "undefined") { + this.isExplicit = params['explicit']; + } + if (typeof params['obj'] != "undefined") { + this.asn1Object = params['obj']; + this.setASN1Object(this.isExplicit, this.hT, this.asn1Object); + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object); + +/** + * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object. + * This object is just a decorator for parsing the key parameter + * @param {string|Object} key - The key in string format, or an object containing + * the parameters needed to build a RSAKey object. + * @constructor + */ +var JSEncryptRSAKey = /** @class */ (function (_super) { + __extends(JSEncryptRSAKey, _super); + function JSEncryptRSAKey(key) { + var _this = _super.call(this) || this; + // Call the super constructor. + // RSAKey.call(this); + // If a key key was provided. + if (key) { + // If this is a string... + if (typeof key === "string") { + _this.parseKey(key); + } + else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) || + JSEncryptRSAKey.hasPublicKeyProperty(key)) { + // Set the values for the key. + _this.parsePropertiesFrom(key); + } + } + return _this; + } + /** + * Method to parse a pem encoded string containing both a public or private key. + * The method will translate the pem encoded string in a der encoded string and + * will parse private key and public key parameters. This method accepts public key + * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1). + * + * @todo Check how many rsa formats use the same format of pkcs #1. + * + * The format is defined as: + * PublicKeyInfo ::= SEQUENCE { + * algorithm AlgorithmIdentifier, + * PublicKey BIT STRING + * } + * Where AlgorithmIdentifier is: + * AlgorithmIdentifier ::= SEQUENCE { + * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm + * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1) + * } + * and PublicKey is a SEQUENCE encapsulated in a BIT STRING + * RSAPublicKey ::= SEQUENCE { + * modulus INTEGER, -- n + * publicExponent INTEGER -- e + * } + * it's possible to examine the structure of the keys obtained from openssl using + * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/ + * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer + * @private + */ + JSEncryptRSAKey.prototype.parseKey = function (pem) { + try { + var modulus = 0; + var public_exponent = 0; + var reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/; + var der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem); + var asn1 = ASN1.decode(der); + // Fixes a bug with OpenSSL 1.0+ private keys + if (asn1.sub.length === 3) { + asn1 = asn1.sub[2].sub[0]; + } + if (asn1.sub.length === 9) { + // Parse the private key. + modulus = asn1.sub[1].getHexStringValue(); // bigint + this.n = parseBigInt(modulus, 16); + public_exponent = asn1.sub[2].getHexStringValue(); // int + this.e = parseInt(public_exponent, 16); + var private_exponent = asn1.sub[3].getHexStringValue(); // bigint + this.d = parseBigInt(private_exponent, 16); + var prime1 = asn1.sub[4].getHexStringValue(); // bigint + this.p = parseBigInt(prime1, 16); + var prime2 = asn1.sub[5].getHexStringValue(); // bigint + this.q = parseBigInt(prime2, 16); + var exponent1 = asn1.sub[6].getHexStringValue(); // bigint + this.dmp1 = parseBigInt(exponent1, 16); + var exponent2 = asn1.sub[7].getHexStringValue(); // bigint + this.dmq1 = parseBigInt(exponent2, 16); + var coefficient = asn1.sub[8].getHexStringValue(); // bigint + this.coeff = parseBigInt(coefficient, 16); + } + else if (asn1.sub.length === 2) { + // Parse the public key. + var bit_string = asn1.sub[1]; + var sequence = bit_string.sub[0]; + modulus = sequence.sub[0].getHexStringValue(); + this.n = parseBigInt(modulus, 16); + public_exponent = sequence.sub[1].getHexStringValue(); + this.e = parseInt(public_exponent, 16); + } + else { + return false; + } + return true; + } + catch (ex) { + return false; + } + }; + /** + * Translate rsa parameters in a hex encoded string representing the rsa key. + * + * The translation follow the ASN.1 notation : + * RSAPrivateKey ::= SEQUENCE { + * version Version, + * modulus INTEGER, -- n + * publicExponent INTEGER, -- e + * privateExponent INTEGER, -- d + * prime1 INTEGER, -- p + * prime2 INTEGER, -- q + * exponent1 INTEGER, -- d mod (p1) + * exponent2 INTEGER, -- d mod (q-1) + * coefficient INTEGER, -- (inverse of q) mod p + * } + * @returns {string} DER Encoded String representing the rsa private key + * @private + */ + JSEncryptRSAKey.prototype.getPrivateBaseKey = function () { + var options = { + array: [ + new KJUR.asn1.DERInteger({ int: 0 }), + new KJUR.asn1.DERInteger({ bigint: this.n }), + new KJUR.asn1.DERInteger({ int: this.e }), + new KJUR.asn1.DERInteger({ bigint: this.d }), + new KJUR.asn1.DERInteger({ bigint: this.p }), + new KJUR.asn1.DERInteger({ bigint: this.q }), + new KJUR.asn1.DERInteger({ bigint: this.dmp1 }), + new KJUR.asn1.DERInteger({ bigint: this.dmq1 }), + new KJUR.asn1.DERInteger({ bigint: this.coeff }) + ] + }; + var seq = new KJUR.asn1.DERSequence(options); + return seq.getEncodedHex(); + }; + /** + * base64 (pem) encoded version of the DER encoded representation + * @returns {string} pem encoded representation without header and footer + * @public + */ + JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () { + return hex2b64(this.getPrivateBaseKey()); + }; + /** + * Translate rsa parameters in a hex encoded string representing the rsa public key. + * The representation follow the ASN.1 notation : + * PublicKeyInfo ::= SEQUENCE { + * algorithm AlgorithmIdentifier, + * PublicKey BIT STRING + * } + * Where AlgorithmIdentifier is: + * AlgorithmIdentifier ::= SEQUENCE { + * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm + * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1) + * } + * and PublicKey is a SEQUENCE encapsulated in a BIT STRING + * RSAPublicKey ::= SEQUENCE { + * modulus INTEGER, -- n + * publicExponent INTEGER -- e + * } + * @returns {string} DER Encoded String representing the rsa public key + * @private + */ + JSEncryptRSAKey.prototype.getPublicBaseKey = function () { + var first_sequence = new KJUR.asn1.DERSequence({ + array: [ + new KJUR.asn1.DERObjectIdentifier({ oid: "1.2.840.113549.1.1.1" }), + new KJUR.asn1.DERNull() + ] + }); + var second_sequence = new KJUR.asn1.DERSequence({ + array: [ + new KJUR.asn1.DERInteger({ bigint: this.n }), + new KJUR.asn1.DERInteger({ int: this.e }) + ] + }); + var bit_string = new KJUR.asn1.DERBitString({ + hex: "00" + second_sequence.getEncodedHex() + }); + var seq = new KJUR.asn1.DERSequence({ + array: [ + first_sequence, + bit_string + ] + }); + return seq.getEncodedHex(); + }; + /** + * base64 (pem) encoded version of the DER encoded representation + * @returns {string} pem encoded representation without header and footer + * @public + */ + JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () { + return hex2b64(this.getPublicBaseKey()); + }; + /** + * wrap the string in block of width chars. The default value for rsa keys is 64 + * characters. + * @param {string} str the pem encoded string without header and footer + * @param {Number} [width=64] - the length the string has to be wrapped at + * @returns {string} + * @private + */ + JSEncryptRSAKey.wordwrap = function (str, width) { + width = width || 64; + if (!str) { + return str; + } + var regex = "(.{1," + width + "})( +|$\n?)|(.{1," + width + "})"; + return str.match(RegExp(regex, "g")).join("\n"); + }; + /** + * Retrieve the pem encoded private key + * @returns {string} the pem encoded private key with header/footer + * @public + */ + JSEncryptRSAKey.prototype.getPrivateKey = function () { + var key = "-----BEGIN RSA PRIVATE KEY-----\n"; + key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + "\n"; + key += "-----END RSA PRIVATE KEY-----"; + return key; + }; + /** + * Retrieve the pem encoded public key + * @returns {string} the pem encoded public key with header/footer + * @public + */ + JSEncryptRSAKey.prototype.getPublicKey = function () { + var key = "-----BEGIN PUBLIC KEY-----\n"; + key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + "\n"; + key += "-----END PUBLIC KEY-----"; + return key; + }; + /** + * Check if the object contains the necessary parameters to populate the rsa modulus + * and public exponent parameters. + * @param {Object} [obj={}] - An object that may contain the two public key + * parameters + * @returns {boolean} true if the object contains both the modulus and the public exponent + * properties (n and e) + * @todo check for types of n and e. N should be a parseable bigInt object, E should + * be a parseable integer number + * @private + */ + JSEncryptRSAKey.hasPublicKeyProperty = function (obj) { + obj = obj || {}; + return (obj.hasOwnProperty("n") && + obj.hasOwnProperty("e")); + }; + /** + * Check if the object contains ALL the parameters of an RSA key. + * @param {Object} [obj={}] - An object that may contain nine rsa key + * parameters + * @returns {boolean} true if the object contains all the parameters needed + * @todo check for types of the parameters all the parameters but the public exponent + * should be parseable bigint objects, the public exponent should be a parseable integer number + * @private + */ + JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) { + obj = obj || {}; + return (obj.hasOwnProperty("n") && + obj.hasOwnProperty("e") && + obj.hasOwnProperty("d") && + obj.hasOwnProperty("p") && + obj.hasOwnProperty("q") && + obj.hasOwnProperty("dmp1") && + obj.hasOwnProperty("dmq1") && + obj.hasOwnProperty("coeff")); + }; + /** + * Parse the properties of obj in the current rsa object. Obj should AT LEAST + * include the modulus and public exponent (n, e) parameters. + * @param {Object} obj - the object containing rsa parameters + * @private + */ + JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) { + this.n = obj.n; + this.e = obj.e; + if (obj.hasOwnProperty("d")) { + this.d = obj.d; + this.p = obj.p; + this.q = obj.q; + this.dmp1 = obj.dmp1; + this.dmq1 = obj.dmq1; + this.coeff = obj.coeff; + } + }; + return JSEncryptRSAKey; +}(RSAKey)); + +/** + * + * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour + * possible parameters are: + * - default_key_size {number} default: 1024 the key size in bit + * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent + * - log {boolean} default: false whether log warn/error or not + * @constructor + */ +var JSEncrypt = /** @class */ (function () { + function JSEncrypt(options) { + options = options || {}; + this.default_key_size = parseInt(options.default_key_size, 10) || 1024; + this.default_public_exponent = options.default_public_exponent || "010001"; // 65537 default openssl public exponent for rsa key type + this.log = options.log || false; + // The private and public key. + this.key = null; + } + /** + * Method to set the rsa key parameter (one method is enough to set both the public + * and the private key, since the private key contains the public key paramenters) + * Log a warning if logs are enabled + * @param {Object|string} key the pem encoded string or an object (with or without header/footer) + * @public + */ + JSEncrypt.prototype.setKey = function (key) { + if (this.log && this.key) { + console.warn("A key was already set, overriding existing."); + } + this.key = new JSEncryptRSAKey(key); + }; + /** + * Proxy method for setKey, for api compatibility + * @see setKey + * @public + */ + JSEncrypt.prototype.setPrivateKey = function (privkey) { + // Create the key. + this.setKey(privkey); + }; + /** + * Proxy method for setKey, for api compatibility + * @see setKey + * @public + */ + JSEncrypt.prototype.setPublicKey = function (pubkey) { + // Sets the public key. + this.setKey(pubkey); + }; + /** + * Proxy method for RSAKey object's decrypt, decrypt the string using the private + * components of the rsa key object. Note that if the object was not set will be created + * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor + * @param {string} str base64 encoded crypted string to decrypt + * @return {string} the decrypted string + * @public + */ + JSEncrypt.prototype.decrypt = function (str) { + // Return the decrypted string. + try { + return this.getKey().decrypt(b64tohex(str)); + } + catch (ex) { + return false; + } + }; + /** + * Proxy method for RSAKey object's encrypt, encrypt the string using the public + * components of the rsa key object. Note that if the object was not set will be created + * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor + * @param {string} str the string to encrypt + * @return {string} the encrypted string encoded in base64 + * @public + */ + JSEncrypt.prototype.encrypt = function (str) { + // Return the encrypted string. + try { + return hex2b64(this.getKey().encrypt(str)); + } + catch (ex) { + return false; + } + }; + /** + * Proxy method for RSAKey object's sign. + * @param {string} str the string to sign + * @param {function} digestMethod hash method + * @param {string} digestName the name of the hash algorithm + * @return {string} the signature encoded in base64 + * @public + */ + JSEncrypt.prototype.sign = function (str, digestMethod, digestName) { + // return the RSA signature of 'str' in 'hex' format. + try { + return hex2b64(this.getKey().sign(str, digestMethod, digestName)); + } + catch (ex) { + return false; + } + }; + /** + * Proxy method for RSAKey object's verify. + * @param {string} str the string to verify + * @param {string} signature the signature encoded in base64 to compare the string to + * @param {function} digestMethod hash method + * @return {boolean} whether the data and signature match + * @public + */ + JSEncrypt.prototype.verify = function (str, signature, digestMethod) { + // Return the decrypted 'digest' of the signature. + try { + return this.getKey().verify(str, b64tohex(signature), digestMethod); + } + catch (ex) { + return false; + } + }; + /** + * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object + * will be created and returned + * @param {callback} [cb] the callback to be called if we want the key to be generated + * in an async fashion + * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object + * @public + */ + JSEncrypt.prototype.getKey = function (cb) { + // Only create new if it does not exist. + if (!this.key) { + // Get a new private key. + this.key = new JSEncryptRSAKey(); + if (cb && {}.toString.call(cb) === "[object Function]") { + this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb); + return; + } + // Generate the key. + this.key.generate(this.default_key_size, this.default_public_exponent); + } + return this.key; + }; + /** + * Returns the pem encoded representation of the private key + * If the key doesn't exists a new key will be created + * @returns {string} pem encoded representation of the private key WITH header and footer + * @public + */ + JSEncrypt.prototype.getPrivateKey = function () { + // Return the private representation of this key. + return this.getKey().getPrivateKey(); + }; + /** + * Returns the pem encoded representation of the private key + * If the key doesn't exists a new key will be created + * @returns {string} pem encoded representation of the private key WITHOUT header and footer + * @public + */ + JSEncrypt.prototype.getPrivateKeyB64 = function () { + // Return the private representation of this key. + return this.getKey().getPrivateBaseKeyB64(); + }; + /** + * Returns the pem encoded representation of the public key + * If the key doesn't exists a new key will be created + * @returns {string} pem encoded representation of the public key WITH header and footer + * @public + */ + JSEncrypt.prototype.getPublicKey = function () { + // Return the private representation of this key. + return this.getKey().getPublicKey(); + }; + /** + * Returns the pem encoded representation of the public key + * If the key doesn't exists a new key will be created + * @returns {string} pem encoded representation of the public key WITHOUT header and footer + * @public + */ + JSEncrypt.prototype.getPublicKeyB64 = function () { + // Return the private representation of this key. + return this.getKey().getPublicBaseKeyB64(); + }; + JSEncrypt.version = "3.0.0-rc.1"; + return JSEncrypt; +}()); + +window.JSEncrypt = JSEncrypt; + +exports.JSEncrypt = JSEncrypt; +exports.default = JSEncrypt; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + + +/***/ }), + +/***/ 177: +/***/ (function(module, exports, __webpack_require__) { + +;(function (root, factory) { + if (true) { + // CommonJS + module.exports = exports = factory(__webpack_require__(178)); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + return CryptoJS.SHA256; + +})); + +/***/ }), + +/***/ 178: +/***/ (function(module, exports, __webpack_require__) { + +;(function (root, factory) { + if (true) { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); + } +}(this, function () { + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create + */ + var create = Object.create || (function () { + function F() {}; + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); + + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); + + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + return CryptoJS; + +})); + +/***/ }) + +},[174]); \ No newline at end of file diff --git a/build/dist/adbutlerBidAdapter.js b/build/dist/adbutlerBidAdapter.js new file mode 100644 index 00000000000..c16c0f89f40 --- /dev/null +++ b/build/dist/adbutlerBidAdapter.js @@ -0,0 +1,160 @@ +pbjsChunk([317],{ + +/***/ 179: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(180); + + +/***/ }), + +/***/ 180: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + + + +var BIDDER_CODE = 'adbutler'; +var spec = { + code: BIDDER_CODE, + pageID: Math.floor(Math.random() * 10e6), + aliases: ['divreach'], + 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 = {}; + var extraParams = {}; + + for (i = 0; i < validBidRequests.length; i++) { + bidRequest = validBidRequests[i]; + zoneID = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('zoneID', bidRequest.params); + accountID = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('accountID', bidRequest.params); + keyword = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('keyword', bidRequest.params); + domain = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('domain', bidRequest.params); + extraParams = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('extra', bidRequest.params); + + if (!(zoneID in zoneCounters)) { + zoneCounters[zoneID] = 0; + } + + if (typeof domain === 'undefined' || domain.length === 0) { + domain = 'servedbyadbutler.com'; + } + + requestURI = 'https://' + 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) + ';'; + } + + for (var key in extraParams) { + if (extraParams.hasOwnProperty(key)) { + var val = encodeURIComponent(extraParams[key]); + requestURI += "".concat(key, "=").concat(val, ";"); + } + } + + 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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('minCPM', bidObj.params); + maxCPM = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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. + + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidObj, 'mediaTypes.banner.sizes', []), function (size) { + if (width === size[0] && height === size[1]) { + isCorrectSize = true; + } + }); + + if (isCorrectCPM && isCorrectSize) { + bidResponse.requestId = bidObj.bidId; + bidResponse.bidderCode = bidObj.bidder; + 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 = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'); + bidResponse.referrer = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidObj, 'refererInfo.referer'); + bidResponses.push(bidResponse); + } + } + + return bidResponses; + }, + addTrackingPixels: function addTrackingPixels(trackingPixels) { + var trackingPixelMarkup = ''; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](trackingPixels, function (pixelURL) { + var trackingPixel = ''; + trackingPixelMarkup += trackingPixel; + }); + + return trackingPixelMarkup; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[179]); \ No newline at end of file diff --git a/build/dist/adfinityBidAdapter.js b/build/dist/adfinityBidAdapter.js new file mode 100644 index 00000000000..d4de1ea35c1 --- /dev/null +++ b/build/dist/adfinityBidAdapter.js @@ -0,0 +1,160 @@ +pbjsChunk([316],{ + +/***/ 181: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(182); + + +/***/ }), + +/***/ 182: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'adfinity'; +var AD_URL = 'https://stat.adfinity.pro/?c=o&m=multi'; +var SYNC_URL = 'https://stat.adfinity.pro/?c=o&m=cookie'; + +function isBidResponseValid(bid) { + if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { + return false; + } + + switch (bid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + var n = bid.native; + return Boolean(n) && Boolean(n.title) && Boolean(n.body) && Boolean(n.image) && Boolean(n.impression_trackers); + + default: + return false; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* 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 Boolean(bid.bidId && bid.params && !isNaN(bid.params.placement_id)); + }, + + /** + * 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, bidderRequest) { + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + var placements = []; + var request = { + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'language': navigator && navigator.language ? navigator.language : '', + 'secure': 1, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + + if (bidderRequest) { + if (bidderRequest.gdprConsent) { + request.gdpr_consent = bidderRequest.gdprConsent.consentString || 'ALL'; + request.gdpr_require = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + } + + for (var i = 0; i < validBidRequests.length; i++) { + var bid = validBidRequests[i]; + var traff = bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + var placement = { + placementId: bid.params.placement_id, + bidId: bid.bidId, + sizes: bid.mediaTypes[traff].sizes, + traffic: traff + }; + + if (bid.schain) { + placement.schain = bid.schain; + } + + placements.push(placement); + } + + return { + method: 'POST', + url: AD_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 (isBidResponseValid(resItem)) { + response.push(resItem); + } + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + return response; + }, + getUserSyncs: function getUserSyncs() { + return [{ + type: 'image', + url: SYNC_URL + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[181]); \ No newline at end of file diff --git a/build/dist/adformBidAdapter.js b/build/dist/adformBidAdapter.js new file mode 100644 index 00000000000..767084a2786 --- /dev/null +++ b/build/dist/adformBidAdapter.js @@ -0,0 +1,222 @@ +pbjsChunk([315],{ + +/***/ 183: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(184); + + +/***/ }), + +/***/ 184: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); + + + + + + + +var OUTSTREAM_RENDERER_URL = 'https://s2.adform.net/banners/scripts/video/outstream/render.js'; +var BIDDER_CODE = 'adform'; +var GVLID = 50; +var spec = { + code: BIDDER_CODE, + gvlid: GVLID, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.mid; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var i, l, j, k, bid, _key, _value, reqParams, netRevenue, gdprObject; + + var currency = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); + var eids = getEncodedEIDs(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](validBidRequests, '0.userIdAsEids')); + var request = []; + var globalParams = [['adxDomain', 'adx.adform.net'], ['fd', 1], ['url', null], ['tid', null]]; + var bids = JSON.parse(JSON.stringify(validBidRequests)); + var bidder = bids[0] && bids[0].bidder || BIDDER_CODE; + + for (i = 0, l = bids.length; i < l; i++) { + bid = bids[i]; + + if (bid.params.priceType === 'net' || bid.params.pt === 'net') { + netRevenue = 'net'; + } + + 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; + reqParams.rcur = reqParams.rcur || currency; + request.push(formRequestUrl(reqParams)); + } + + request.unshift('https://' + globalParams[0][1] + '/adx/?rp=4'); + netRevenue = netRevenue || 'gross'; + request.push('pt=' + netRevenue); + request.push('stid=' + validBidRequests[0].auctionId); + var gdprApplies = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies'); + var consentString = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.consentString'); + + if (gdprApplies !== undefined) { + gdprObject = { + gdpr: gdprApplies, + gdpr_consent: consentString + }; + request.push('gdpr=' + (gdprApplies & 1)); + request.push('gdpr_consent=' + consentString); + } + + if (bidderRequest && bidderRequest.uspConsent) { + request.push('us_privacy=' + bidderRequest.uspConsent); + } + + if (eids) { + request.push('eids=' + eids); + } + + 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: bidder, + gdpr: gdprObject + }; + + 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))); + } + + function getEncodedEIDs(eids) { + if (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isArray"](eids) && eids.length > 0) { + var parsed = parseEIDs(eids); + return encodeURIComponent(btoa(JSON.stringify(parsed))); + } + } + + function parseEIDs(eids) { + return eids.reduce(function (result, eid) { + var source = eid.source; + result[source] = result[source] || {}; + eid.uids.forEach(function (value) { + var id = value.id + ''; + result[source][id] = result[source][id] || []; + result[source][id].push(value.atype); + }); + return result; + }, {}); + } + }, + 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' ? __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */] : __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + bid = bids[i]; + + if (VALID_RESPONSES[response.response] && (verifySize(response, __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["getAdUnitSizes"](bid)) || type === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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 + }; + + if (!bid.renderer && type === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] && __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context') === 'outstream') { + bidObject.renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: bid.bidId, + url: OUTSTREAM_RENDERER_URL + }); + bidObject.renderer.setRender(renderer); + } + + if (bidRequest.gdpr) { + bidObject.gdpr = bidRequest.gdpr.gdpr; + bidObject.gdpr_consent = bidRequest.gdpr.gdpr_consent; + } + + bidRespones.push(bidObject); + } + } + + return bidRespones; + + function renderer(bid) { + bid.renderer.push(function () { + window.Adform.renderOutstream(bid); + }); + } + + 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; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[183]); \ No newline at end of file diff --git a/build/dist/adformOpenRTBBidAdapter.js b/build/dist/adformOpenRTBBidAdapter.js new file mode 100644 index 00000000000..8254cc14b87 --- /dev/null +++ b/build/dist/adformOpenRTBBidAdapter.js @@ -0,0 +1,288 @@ +pbjsChunk([314],{ + +/***/ 185: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(186); + + +/***/ }), + +/***/ 186: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +// jshint esversion: 6, es3: false, node: true + + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + +var BIDDER_CODE = 'adformOpenRTB'; +var GVLID = 50; +var NATIVE_ASSET_IDS = { + 0: 'title', + 2: 'icon', + 3: 'image', + 5: 'sponsoredBy', + 4: 'body', + 1: 'cta' +}; +var NATIVE_PARAMS = { + title: { + id: 0, + name: 'title' + }, + icon: { + id: 2, + type: 1, + name: 'img' + }, + image: { + id: 3, + type: 3, + name: 'img' + }, + sponsoredBy: { + id: 5, + name: 'data', + type: 1 + }, + body: { + id: 4, + name: 'data', + type: 2 + }, + cta: { + id: 1, + type: 12, + name: 'data' + } +}; +var spec = { + code: BIDDER_CODE, + gvlid: GVLID, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.mid; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var page = bidderRequest.refererInfo.referer; + var adxDomain = setOnAny(validBidRequests, 'params.adxDomain') || 'adx.adform.net'; + var ua = navigator.userAgent; + var pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net'; + var tid = validBidRequests[0].transactionId; // ??? check with ssp + + var test = setOnAny(validBidRequests, 'params.test'); + var publisher = setOnAny(validBidRequests, 'params.publisher'); + var siteId = setOnAny(validBidRequests, 'params.siteId'); + var currency = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); + var cur = currency && [currency]; + var eids = setOnAny(validBidRequests, 'userIdAsEids'); + var imp = validBidRequests.map(function (bid, id) { + bid.netRevenue = pt; + + var assets = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_map"](bid.nativeParams, function (bidParams, key) { + var props = NATIVE_PARAMS[key]; + var asset = { + required: bidParams.required & 1 + }; + + if (props) { + asset.id = props.id; + var wmin, hmin, w, h; + var aRatios = bidParams.aspect_ratios; + + if (aRatios && aRatios[0]) { + aRatios = aRatios[0]; + wmin = aRatios.min_width || 0; + hmin = aRatios.ratio_height * wmin / aRatios.ratio_width | 0; + } + + if (bidParams.sizes) { + var sizes = flatten(bidParams.sizes); + w = sizes[0]; + h = sizes[1]; + } + + asset[props.name] = { + len: bidParams.len, + type: props.type, + wmin: wmin, + hmin: hmin, + w: w, + h: h + }; + return asset; + } + }).filter(Boolean); + + return { + id: id + 1, + tagid: bid.params.mid, + native: { + request: { + assets: assets + } + } + }; + }); + var request = { + id: bidderRequest.auctionId, + site: { + id: siteId, + page: page, + publisher: publisher + }, + device: { + ua: ua + }, + source: { + tid: tid, + fd: 1 + }, + ext: { + pt: pt + }, + cur: cur, + imp: imp + }; + + if (test) { + request.is_debug = !!test; + request.test = 1; + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') !== undefined) { + request.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + request.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies & 1 + } + }; + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (eids) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.eids', eids); + } + + return { + method: 'POST', + url: 'https://' + adxDomain + '/adx/openrtb', + data: JSON.stringify(request), + options: { + contentType: 'application/json' + }, + bids: validBidRequests + }; + }, + interpretResponse: function interpretResponse(serverResponse, _ref) { + var bids = _ref.bids; + + if (!serverResponse.body) { + return; + } + + var _serverResponse$body = serverResponse.body, + seatbid = _serverResponse$body.seatbid, + cur = _serverResponse$body.cur; + var bidResponses = flatten(seatbid.map(function (seat) { + return seat.bid; + })).reduce(function (result, bid) { + result[bid.impid - 1] = bid; + return result; + }, []); + return bids.map(function (bid, id) { + var bidResponse = bidResponses[id]; + + if (bidResponse) { + return { + requestId: bid.bidId, + cpm: bidResponse.price, + creativeId: bidResponse.crid, + ttl: 360, + netRevenue: bid.netRevenue === 'net', + currency: cur, + mediaType: __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */], + bidderCode: BIDDER_CODE, + native: parseNative(bidResponse) + }; + } + }).filter(Boolean); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function parseNative(bid) { + var _bid$native = bid.native, + assets = _bid$native.assets, + link = _bid$native.link, + imptrackers = _bid$native.imptrackers, + jstracker = _bid$native.jstracker; + var result = { + clickUrl: link.url, + clickTrackers: link.clicktrackers || undefined, + impressionTrackers: imptrackers || undefined, + javascriptTrackers: jstracker ? [jstracker] : undefined + }; + assets.forEach(function (asset) { + var kind = NATIVE_ASSET_IDS[asset.id]; + var content = kind && asset[NATIVE_PARAMS[kind].name]; + + if (content) { + result[kind] = content.text || content.value || { + url: content.url, + width: content.w, + height: content.h + }; + } + }); + return result; +} + +function setOnAny(collection, key) { + for (var i = 0, result; i < collection.length; i++) { + result = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](collection[i], key); + + if (result) { + return result; + } + } +} + +function flatten(arr) { + var _ref2; + + return (_ref2 = []).concat.apply(_ref2, _toConsumableArray(arr)); +} + +/***/ }) + +},[185]); \ No newline at end of file diff --git a/build/dist/adgenerationBidAdapter.js b/build/dist/adgenerationBidAdapter.js new file mode 100644 index 00000000000..df018d5ebdb --- /dev/null +++ b/build/dist/adgenerationBidAdapter.js @@ -0,0 +1,290 @@ +pbjsChunk([313],{ + +/***/ 187: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(188); + + +/***/ }), + +/***/ 188: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); + + + + +var ADG_BIDDER_CODE = 'adgeneration'; +var spec = { + code: ADG_BIDDER_CODE, + aliases: ['adg'], + // short code + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* 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, bidderRequest) { + var ADGENE_PREBID_VERSION = '1.0.1'; + var serverRequests = []; + + for (var i = 0, len = validBidRequests.length; i < len; i++) { + var validReq = validBidRequests[i]; + var DEBUG_URL = 'https://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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'posall', 'SSPLOC'); + var id = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('id', validReq.params); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'id', id); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'sdktype', '0'); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'hb', 'true'); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 't', 'json3'); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'transactionid', validReq.transactionId); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'sizes', getSizes(validReq)); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'currency', getCurrencyType()); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'pbver', "4.2.0"); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'sdkname', 'prebidjs'); + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'adapterver', ADGENE_PREBID_VERSION); // native以外にvideo等の対応が入った場合は要修正 + + if (!validReq.mediaTypes || !validReq.mediaTypes.native) { + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'imark', '1'); + } + + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](data, 'tp', bidderRequest.refererInfo.referer); // 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} bidRequests + * @return {Bid[]} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, bidRequests) { + var body = serverResponse.body; + + if (!body.results || body.results.length < 1) { + return []; + } + + var bidRequest = bidRequests.bidRequest; + var bidResponse = { + requestId: bidRequest.bidId, + cpm: body.cpm || 0, + width: body.w ? body.w : 1, + height: body.h ? body.h : 1, + creativeId: body.creativeid || '', + dealId: body.dealid || '', + currency: getCurrencyType(), + netRevenue: true, + ttl: body.ttl || 10 + }; + + if (isNative(body)) { + bidResponse.native = createNativeAd(body); + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + } else { + // banner + bidResponse.ad = createAd(body, bidRequest); + } + + return [bidResponse]; + }, + + /** + * 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 = "
").concat(createAPVTag()).concat(insertVASTMethod(bidRequest.bidId, body.vastxml), ""); + } + + ad = appendChildToBody(ad, body.beacon); + if (removeWrapper(ad)) return removeWrapper(ad); + return ad; +} + +function isNative(body) { + if (!body) return false; + return body.native_ad && body.native_ad.assets.length > 0; +} + +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; + + case 502: + native.privacyLink = encodeURIComponent(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>/, "".concat(data, "")); +} + +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(".concat(JSON.stringify(apvVideoAdParam), ").load('").concat(vastXml.replace(/\r?\n/g, ''), "'); })();"); + return script.outerHTML; +} +/** + * + * @param ad + */ + + +function removeWrapper(ad) { + var bodyIndex = ad.indexOf(''); + var lastBodyIndex = ad.lastIndexOf(''); + if (bodyIndex === -1 || lastBodyIndex === -1) return false; + return ad.substr(bodyIndex, lastBodyIndex).replace('', '').replace('', ''); +} +/** + * request + * @param validReq request + * @returns {?string} 300x250,320x50... + */ + + +function getSizes(validReq) { + var sizes = validReq.sizes; + if (!sizes || sizes.length < 1) return null; + var sizesStr = ''; + + for (var i in sizes) { + var size = sizes[i]; + if (size.length !== 2) return null; + sizesStr += "".concat(size[0], "x").concat(size[1], ","); + } + + if (sizesStr || sizesStr.lastIndexOf(',') === sizesStr.length - 1) { + sizesStr = sizesStr.substring(0, sizesStr.length - 1); + } + + return sizesStr; +} +/** + * @return {?string} USD or JPY + */ + + +function getCurrencyType() { + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency') && __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency').toUpperCase() === 'USD') return 'USD'; + return 'JPY'; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[187]); \ No newline at end of file diff --git a/build/dist/adglareBidAdapter.js b/build/dist/adglareBidAdapter.js new file mode 100644 index 00000000000..b618da9f500 --- /dev/null +++ b/build/dist/adglareBidAdapter.js @@ -0,0 +1,112 @@ +pbjsChunk([312],{ + +/***/ 189: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(190); + + +/***/ }), + +/***/ 190: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + +var BIDDER_CODE = 'adglare'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + var p = bid.params; + if (typeof p.domain === 'string' && !!p.domain.length && p.zID && !isNaN(p.zID) && p.type == 'banner') return true; + return false; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var i; + var j; + var bidRequest; + var zID; + var domain; + var keywords; + var url; + var type; + var availscreen = window.innerWidth + 'x' + window.innerHeight; + var pixelRatio = window.devicePixelRatio || 1; + var screen = pixelRatio * window.screen.width + 'x' + pixelRatio * window.screen.height; + var sizes = []; + var serverRequests = []; + var timeout = bidderRequest.timeout || 0; + var referer = bidderRequest.refererInfo.referer || ''; + var reachedtop = bidderRequest.refererInfo.reachedTop || ''; + + for (i = 0; i < validBidRequests.length; i++) { + bidRequest = validBidRequests[i]; + zID = bidRequest.params.zID; + domain = bidRequest.params.domain; + keywords = bidRequest.params.keywords || ''; + type = bidRequest.params.type; // Build ad unit sizes + + if (bidRequest.mediaTypes && bidRequest.mediaTypes[type]) { + for (j in bidRequest.mediaTypes[type].sizes) { + sizes.push(bidRequest.mediaTypes[type].sizes[j].join('x')); + } + } // Build URL + + + url = 'https://' + domain + '/?' + encodeURIComponent(zID) + '&pbjs&pbjs_version=1'; + url += '&pbjs_type=' + encodeURIComponent(type); + url += '&pbjs_timeout=' + encodeURIComponent(timeout); + url += '&pbjs_reachedtop=' + encodeURIComponent(reachedtop); + url += '&sizes=' + encodeURIComponent(sizes.join(',')); + url += '&screen=' + encodeURIComponent(screen); + url += '&availscreen=' + encodeURIComponent(availscreen); + url += '&referer=' + encodeURIComponent(referer); + + if (keywords !== '') { + url += '&keywords=' + encodeURIComponent(keywords); + } // Push server request + + + serverRequests.push({ + method: 'GET', + url: url, + data: {}, + bidRequest: bidRequest + }); + } + + return serverRequests; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidObj = request.bidRequest; + var bidResponses = []; + var bidResponse = {}; + serverResponse = serverResponse.body; + + if (serverResponse && serverResponse.status == 'OK' && bidObj) { + bidResponse.requestId = bidObj.bidId; + bidResponse.bidderCode = bidObj.bidder; + bidResponse.cpm = serverResponse.cpm; + bidResponse.width = serverResponse.width; + bidResponse.height = serverResponse.height; + bidResponse.ad = serverResponse.adhtml; + bidResponse.ttl = serverResponse.ttl; + bidResponse.creativeId = serverResponse.crID; + bidResponse.netRevenue = true; + bidResponse.currency = serverResponse.currency; + bidResponses.push(bidResponse); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[189]); \ No newline at end of file diff --git a/build/dist/adheseBidAdapter.js b/build/dist/adheseBidAdapter.js new file mode 100644 index 00000000000..cf7a4e0edb9 --- /dev/null +++ b/build/dist/adheseBidAdapter.js @@ -0,0 +1,294 @@ +pbjsChunk([311],{ + +/***/ 191: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(192); + + +/***/ }), + +/***/ 192: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); + + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + +var BIDDER_CODE = 'adhese'; +var USER_SYNC_BASE_URL = 'https://user-sync.adhese.com/iframe/user_sync.html'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.account && bid.params.location && (bid.params.format || bid.mediaTypes.banner.sizes)); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (validBidRequests.length === 0) { + return null; + } + + var gdprConsent = bidderRequest.gdprConsent, + refererInfo = bidderRequest.refererInfo; + var account = getAccount(validBidRequests); + var targets = validBidRequests.map(function (bid) { + return bid.params.data; + }).reduce(mergeTargets, {}); + var gdprParams = gdprConsent && gdprConsent.consentString ? ["xt".concat(gdprConsent.consentString)] : []; + var refererParams = refererInfo && refererInfo.referer ? ["xf".concat(base64urlEncode(refererInfo.referer))] : []; + var id5Params = getId5Id(validBidRequests) ? ["x5".concat(getId5Id(validBidRequests))] : []; + var targetsParams = Object.keys(targets).map(function (targetCode) { + return targetCode + targets[targetCode].join(';'); + }); + var slotsParams = validBidRequests.map(function (bid) { + return 'sl' + bidToSlotName(bid); + }); + var params = [].concat(_toConsumableArray(slotsParams), _toConsumableArray(targetsParams), gdprParams, refererParams, id5Params).map(function (s) { + return "/".concat(s); + }).join(''); + var cacheBuster = '?t=' + new Date().getTime(); + var uri = 'https://ads-' + account + '.adhese.com/json' + params + cacheBuster; + return { + method: 'GET', + url: uri, + bids: validBidRequests + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var serverAds = serverResponse.body.reduce(function (map, ad) { + map[ad.slotName] = ad; + return map; + }, {}); + serverResponse.account = getAccount(request.bids); + return request.bids.map(function (bid) { + return { + bid: bid, + ad: serverAds[bidToSlotName(bid)] + }; + }).filter(function (item) { + return item.ad; + }).map(function (item) { + return adResponse(item.bid, item.ad); + }); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent) { + if (syncOptions.iframeEnabled && serverResponses.length > 0) { + var account = serverResponses[0].account; + + if (account) { + var syncurl = USER_SYNC_BASE_URL + '?account=' + account; + + if (gdprConsent) { + syncurl += '&gdpr=' + (gdprConsent.gdprApplies ? 1 : 0); + syncurl += '&consentString=' + encodeURIComponent(gdprConsent.consentString || ''); + } + + return [{ + type: 'iframe', + url: syncurl + }]; + } + } + + return []; + } +}; + +function adResponse(bid, ad) { + var price = getPrice(ad); + var adDetails = getAdDetails(ad); + var markup = getAdMarkup(ad); + var bidResponse = getbaseAdResponse({ + requestId: bid.bidId, + mediaType: getMediaType(markup), + cpm: Number(price.amount), + currency: price.currency, + width: Number(ad.width), + height: Number(ad.height), + creativeId: adDetails.creativeId, + dealId: adDetails.dealId, + adhese: { + originData: adDetails.originData, + origin: adDetails.origin, + originInstance: adDetails.originInstance + } + }); + + if (bidResponse.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]) { + bidResponse.vastXml = markup; + } else { + var counter = ad.impressionCounter ? "" : ''; + bidResponse.ad = markup + counter; + } + + return bidResponse; +} + +function mergeTargets(targets, target) { + if (target) { + Object.keys(target).forEach(function (key) { + var val = target[key]; + var values = Array.isArray(val) ? val : [val]; + + if (targets[key]) { + var distinctValues = values.filter(function (v) { + return targets[key].indexOf(v) < 0; + }); + targets[key].push.apply(targets[key], distinctValues); + } else { + targets[key] = values; + } + }); + } + + return targets; +} + +function bidToSlotName(bid) { + if (bid.params.format) { + return bid.params.location + '-' + bid.params.format; + } + + var sizes = bid.mediaTypes.banner.sizes; + sizes.sort(); + var format = sizes.map(function (size) { + return size[0] + 'x' + size[1]; + }).join('_'); + + if (format.length > 0) { + return bid.params.location + '-' + format; + } else { + return bid.params.location; + } +} + +function getAccount(validBidRequests) { + return validBidRequests[0].params.account; +} + +function getId5Id(validBidRequests) { + if (validBidRequests[0] && validBidRequests[0].userId && validBidRequests[0].userId.id5id) { + return validBidRequests[0].userId.id5id; + } +} + +function getbaseAdResponse(response) { + return _extends({ + netRevenue: true, + ttl: 360 + }, response); +} + +function isAdheseAd(ad) { + return !ad.origin || ad.origin === 'JERLICIA' || ad.origin === 'DALE'; +} + +function getMediaType(markup) { + var isVideo = markup.trim().toLowerCase().match(/<\?xml| arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + +var ANALYTICS_VERSION = '1.0.1'; +var DEFAULT_QUEUE_TIMEOUT = 4000; +var DEFAULT_HOST = 'tag.adkernel.com'; +var storageObj = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(); +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 _getNavigationInfo = getNavigationInfo(), + loc = _getNavigationInfo.loc, + ref = _getNavigationInfo.ref; + + return { + ver: ANALYTICS_VERSION, + domain: loc.hostname, + path: loc.pathname, + accId: pubId, + env: { + screen: { + w: window.screen.width, + h: window.screen.height + }, + lang: navigator.language + }, + src: getUmtSource(loc.href, ref) + }; +} + +var analyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: 'endpoint' +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (!analyticsAdapter.context) { + return; + } + + var handler = null; + + switch (eventType) { + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_INIT: + if (analyticsAdapter.context.queue) { + analyticsAdapter.context.queue.init(); + } + + handler = trackAuctionInit; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_REQUESTED: + handler = trackBidRequest; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_RESPONSE: + handler = trackBidResponse; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_WON: + handler = trackBidWon; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_TIMEOUT: + handler = trackBidTimeout; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_END: + handler = trackAuctionEnd; + break; + } + + if (handler) { + var events = handler(args); + + if (analyticsAdapter.context.queue) { + analyticsAdapter.context.queue.push(events); + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_END) { + sendAll(); + } + } + } +}); + +analyticsAdapter.context = {}; +analyticsAdapter.originEnableAnalytics = analyticsAdapter.enableAnalytics; + +analyticsAdapter.enableAnalytics = function (config) { + if (!config.options.pubId) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["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); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: analyticsAdapter, + code: 'adkernelAdn' +}); +/* harmony default export */ __webpack_exports__["default"] = (analyticsAdapter); + +function sendAll() { + var events = analyticsAdapter.context.queue.popAll(); + + if (events.length !== 0) { + var req = _extends({}, analyticsAdapter.context.requestTemplate, { + hb_ev: events + }); + + analyticsAdapter.ajaxCall(JSON.stringify(req)); + } +} + +analyticsAdapter.ajaxCall = function ajaxCall(data) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])("https://".concat(analyticsAdapter.context.host, "/hb-analytics"), function () {}, data); +}; + +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.adUnitCode); + }); +} + +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 = { + getItem: function getItem(name) { + return storageObj.getDataFromLocalStorage(name); + }, + setItem: function setItem(name, value) { + storageObj.setDataInLocalStorage(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 = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["parseUrl"](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 = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["parseUrl"](referrer); + return [ref.hostname, ref.pathname]; + } + + function getUTM(pageUrl) { + var urlParameters = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["parseUrl"](pageUrl).search; + + if (!urlParameters['utm_campaign'] || !urlParameters['utm_source']) { + return; + } + + var utmArgs = []; + + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["_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]; + } else 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 update or creation. + * @param callback + * @param ttl + * @constructor + */ + +function ExpiringQueue(callback, ttl) { + var queue = []; + var timeoutId; + + 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); + } +} + +function getNavigationInfo() { + try { + return getLocationAndReferrer(self.top); + } catch (e) { + return getLocationAndReferrer(self); + } +} + +function getLocationAndReferrer(win) { + return { + ref: win.document.referrer, + loc: win.location + }; +} + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[193]); \ No newline at end of file diff --git a/build/dist/adkernelAdnBidAdapter.js b/build/dist/adkernelAdnBidAdapter.js new file mode 100644 index 00000000000..6635c17b49b --- /dev/null +++ b/build/dist/adkernelAdnBidAdapter.js @@ -0,0 +1,224 @@ +pbjsChunk([310],{ + +/***/ 195: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(196); + + +/***/ }), + +/***/ 196: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var DEFAULT_ADKERNEL_DSP_DOMAIN = 'tag.adkernel.com'; +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(refInfo) { + return refInfo.referer.indexOf('adk_debug=true') !== -1; +} + +function buildImp(bidRequest) { + var imp = { + id: bidRequest.bidId, + tagid: bidRequest.adUnitCode + }; + var bannerReq = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "mediaTypes.banner"); + var videoReq = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "mediaTypes.video"); + + if (bannerReq) { + var sizes = canonicalizeSizesArray(bannerReq.sizes); + imp.banner = { + format: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](sizes) + }; + } else if (videoReq) { + var size = canonicalizeSizesArray(videoReq.playerSize)[0]; + imp.video = { + w: size[0], + h: size[1], + mimes: videoReq.mimes || DEFAULT_MIMES, + protocols: videoReq.protocols || DEFAULT_PROTOCOLS, + api: videoReq.api || DEFAULT_APIS + }; + } + + return imp; +} +/** + * Convert input array of sizes to canonical form Array[Array[Number]] + * @param sizes + * @return Array[Array[Number]] + */ + + +function canonicalizeSizesArray(sizes) { + if (sizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes[0])) { + return [sizes]; + } + + return sizes; +} + +function buildRequestParams(tags, bidderRequest) { + var auctionId = bidderRequest.auctionId, + gdprConsent = bidderRequest.gdprConsent, + uspConsent = bidderRequest.uspConsent, + transactionId = bidderRequest.transactionId, + refererInfo = bidderRequest.refererInfo; + var req = { + id: auctionId, + tid: transactionId, + site: buildSite(refererInfo), + imp: tags + }; + + if (gdprConsent) { + if (gdprConsent.gdprApplies !== undefined) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](req, 'user.gdpr', ~~gdprConsent.gdprApplies); + } + + if (gdprConsent.consentString !== undefined) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](req, 'user.consent', gdprConsent.consentString); + } + } + + if (uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](req, 'user.us_privacy', uspConsent); + } + + return req; +} + +function buildSite(refInfo) { + var loc = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](refInfo.referer); + var result = { + page: "".concat(loc.protocol, "://").concat(loc.hostname).concat(loc.pathname), + secure: ~~(loc.protocol === 'https') + }; + + if (self === top && document.referrer) { + result.ref = document.referrer; + } + + var keywords = document.getElementsByTagName('meta')['keywords']; + + if (keywords && keywords.content) { + result.keywords = keywords.content; + } + + return result; +} + +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 = tag.tag; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } else if (tag.vast_url) { + bid.vastUrl = tag.vast_url; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + } + + return bid; +} + +var spec = { + code: 'adkernelAdn', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + aliases: ['engagesimply'], + isBidRequestValid: function isBidRequestValid(bidRequest) { + return 'params' in bidRequest && (typeof bidRequest.params.host === 'undefined' || typeof bidRequest.params.host === 'string') && typeof bidRequest.params.pubId === 'number' && 'mediaTypes' in bidRequest && ('banner' in bidRequest.mediaTypes || 'video' in bidRequest.mediaTypes); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + 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); + return acc; + }, {}); + var requests = []; + Object.keys(dispatch).forEach(function (host) { + Object.keys(dispatch[host]).forEach(function (pubId) { + var request = buildRequestParams(dispatch[host][pubId], bidderRequest); + requests.push({ + method: 'POST', + url: "https://".concat(host, "/tag?account=").concat(pubId, "&pb=1").concat(isRtbDebugEnabled(bidderRequest.refererInfo) ? '&debug=1' : ''), + data: JSON.stringify(request) + }); + }); + }); + return requests; + }, + interpretResponse: function interpretResponse(serverResponse) { + var response = serverResponse.body; + + if (!response.tags) { + return []; + } + + if (response.debug) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("ADKERNEL DEBUG:\n".concat(response.debug)); + } + + return response.tags.map(buildBid); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (!serverResponses || serverResponses.length === 0) { + return []; + } + + if (syncOptions.iframeEnabled) { + return buildSyncs(serverResponses, 'syncpages', 'iframe'); + } else if (syncOptions.pixelEnabled) { + return buildSyncs(serverResponses, 'syncpixels', 'image'); + } else { + return []; + } + } +}; + +function buildSyncs(serverResponses, propName, type) { + return serverResponses.filter(function (rps) { + return rps.body && rps.body[propName]; + }).map(function (rsp) { + return rsp.body[propName]; + }).reduce(function (a, b) { + return a.concat(b); + }, []).map(function (syncUrl) { + return { + type: type, + url: syncUrl + }; + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[195]); \ No newline at end of file diff --git a/build/dist/adkernelBidAdapter.js b/build/dist/adkernelBidAdapter.js new file mode 100644 index 00000000000..832822a7e02 --- /dev/null +++ b/build/dist/adkernelBidAdapter.js @@ -0,0 +1,588 @@ +pbjsChunk([309],{ + +/***/ 197: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(198); + + +/***/ }), + +/***/ 198: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_config_js__ = __webpack_require__(3); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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; } + + + + + + + +/* + * In case you're AdKernel whitelable platform's client who needs branded adapter to + * work with Adkernel platform - DO NOT COPY THIS ADAPTER UNDER NEW NAME + * + * Please contact prebid@adkernel.com and we'll add your adapter as an alias. + */ + +var VIDEO_TARGETING = Object.freeze(['mimes', 'minduration', 'maxduration', 'protocols', 'startdelay', 'linearity', 'boxingallowed', 'playbackmethod', 'delivery', 'pos', 'api', 'ext']); +var VERSION = '1.5'; +var SYNC_IFRAME = 1; +var SYNC_IMAGE = 2; +var SYNC_TYPES = Object.freeze({ + 1: 'iframe', + 2: 'image' +}); +var NATIVE_MODEL = [{ + name: 'title', + assetType: 'title' +}, { + name: 'icon', + assetType: 'img', + type: 1 +}, { + name: 'image', + assetType: 'img', + type: 3 +}, { + name: 'body', + assetType: 'data', + type: 2 +}, { + name: 'body2', + assetType: 'data', + type: 10 +}, { + name: 'sponsoredBy', + assetType: 'data', + type: 1 +}, { + name: 'phone', + assetType: 'data', + type: 8 +}, { + name: 'address', + assetType: 'data', + type: 9 +}, { + name: 'price', + assetType: 'data', + type: 6 +}, { + name: 'salePrice', + assetType: 'data', + type: 7 +}, { + name: 'cta', + assetType: 'data', + type: 12 +}, { + name: 'rating', + assetType: 'data', + type: 3 +}, { + name: 'downloads', + assetType: 'data', + type: 5 +}, { + name: 'likes', + assetType: 'data', + type: 4 +}, { + name: 'displayUrl', + assetType: 'data', + type: 11 +}]; +var NATIVE_INDEX = NATIVE_MODEL.reduce(function (acc, val, idx) { + acc[val.name] = _objectSpread({ + id: idx + }, val); + return acc; +}, {}); +/** + * Adapter for requesting bids from AdKernel white-label display platform + */ + +var spec = { + code: 'adkernel', + aliases: ['headbidding', 'adsolut', 'oftmediahb', 'audiencemedia', 'waardex_ak', 'roqoon'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + + /** + * Validates bid request for adunit + * @param bidRequest {BidRequest} + * @returns {boolean} + */ + isBidRequestValid: function isBidRequestValid(bidRequest) { + return 'params' in bidRequest && typeof bidRequest.params.host !== 'undefined' && 'zoneId' in bidRequest.params && !isNaN(Number(bidRequest.params.zoneId)) && bidRequest.params.zoneId > 0 && bidRequest.mediaTypes && (bidRequest.mediaTypes.banner || bidRequest.mediaTypes.video || bidRequest.mediaTypes.native && validateNativeAdUnit(bidRequest.mediaTypes.native)); + }, + + /** + * Builds http request for each unique combination of adkernel host/zone + * @param bidRequests {BidRequest[]} + * @param bidderRequest {BidderRequest} + * @returns {ServerRequest[]} + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var impDispatch = dispatchImps(bidRequests, bidderRequest.refererInfo); + var requests = []; + Object.keys(impDispatch).forEach(function (host) { + Object.keys(impDispatch[host]).forEach(function (zoneId) { + var request = buildRtbRequest(impDispatch[host][zoneId], bidderRequest); + requests.push({ + method: 'POST', + url: "https://".concat(host, "/hb?zone=").concat(zoneId, "&v=").concat(VERSION), + data: JSON.stringify(request) + }); + }); + }); + return requests; + }, + + /** + * Parse response from adkernel backend + * @param serverResponse {ServerResponse} + * @param serverRequest {ServerRequest} + * @returns {Bid[]} + */ + interpretResponse: function interpretResponse(serverResponse, serverRequest) { + var response = serverResponse.body; + + if (!response.seatbid) { + return []; + } + + var rtbRequest = JSON.parse(serverRequest.data); + 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 = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(rtbRequest.imp, 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 = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + prBid.width = rtbBid.w; + prBid.height = rtbBid.h; + prBid.ad = formatAdMarkup(rtbBid); + } else if ('video' in imp) { + prBid.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + prBid.vastUrl = rtbBid.nurl; + prBid.width = imp.video.w; + prBid.height = imp.video.h; + } else if ('native' in imp) { + prBid.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]; + prBid.native = buildNativeAd(JSON.parse(rtbBid.adm)); + } + + return prBid; + }); + }, + + /** + * Extracts user-syncs information from server response + * @param syncOptions {SyncOptions} + * @param serverResponses {ServerResponse[]} + * @returns {UserSync[]} + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (!serverResponses || serverResponses.length === 0 || !syncOptions.iframeEnabled && !syncOptions.pixelEnabled) { + 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 (_ref) { + var url = _ref.url, + type = _ref.type; + return { + type: SYNC_TYPES[type], + url: url + }; + }); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/** + * Dispatch impressions by ad network host and zone + * @param bidRequests {BidRequest[]} + * @param refererInfo {refererInfo} + */ + +function dispatchImps(bidRequests, refererInfo) { + var secure = refererInfo && refererInfo.referer.indexOf('https:') === 0; + return bidRequests.map(function (bidRequest) { + return buildImp(bidRequest, secure); + }).reduce(function (acc, curr, index) { + var bidRequest = bidRequests[index]; + var _bidRequest$params = bidRequest.params, + zoneId = _bidRequest$params.zoneId, + host = _bidRequest$params.host; + acc[host] = acc[host] || {}; + acc[host][zoneId] = acc[host][zoneId] || []; + acc[host][zoneId].push(curr); + return acc; + }, {}); +} +/** + * Builds rtb imp object for single adunit + * @param bidRequest {BidRequest} + * @param secure {boolean} + */ + + +function buildImp(bidRequest, secure) { + var imp = { + 'id': bidRequest.bidId, + 'tagid': bidRequest.adUnitCode + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "mediaTypes.banner")) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getAdUnitSizes"](bidRequest); + imp.banner = { + format: sizes.map(function (wh) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseGPTSingleSizeArrayToRtbSize"](wh); + }), + topframe: 0 + }; + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video')) { + var _sizes = bidRequest.mediaTypes.video.playerSize || []; + + imp.video = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseGPTSingleSizeArrayToRtbSize"](_sizes[0]) || {}; + + if (bidRequest.params.video) { + Object.keys(bidRequest.params.video).filter(function (key) { + return __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, key); + }).forEach(function (key) { + return imp.video[key] = bidRequest.params.video[key]; + }); + } + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.native')) { + var nativeRequest = buildNativeRequest(bidRequest.mediaTypes.native); + imp.native = { + ver: '1.1', + request: JSON.stringify(nativeRequest) + }; + } + + if (secure) { + imp.secure = 1; + } + + return imp; +} +/** + * Builds native request from native adunit + */ + + +function buildNativeRequest(nativeReq) { + var request = { + ver: '1.1', + assets: [] + }; + + for (var _i = 0, _Object$keys = Object.keys(nativeReq); _i < _Object$keys.length; _i++) { + var k = _Object$keys[_i]; + var v = nativeReq[k]; + var desc = NATIVE_INDEX[k]; + + if (desc === undefined) { + continue; + } + + var assetRoot = { + id: desc.id, + required: ~~v.required + }; + + if (desc.assetType === 'img') { + assetRoot[desc.assetType] = buildImageAsset(desc, v); + } else if (desc.assetType === 'data') { + assetRoot.data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["cleanObj"]({ + type: desc.type, + len: v.len + }); + } else if (desc.assetType === 'title') { + assetRoot.title = { + len: v.len || 90 + }; + } else { + return; + } + + request.assets.push(assetRoot); + } + + return request; +} +/** + * Builds image asset request + */ + + +function buildImageAsset(desc, val) { + var img = { + type: desc.type + }; + + if (val.sizes) { + var _val$sizes = _slicedToArray(val.sizes, 2); + + img.w = _val$sizes[0]; + img.h = _val$sizes[1]; + } else if (val.aspect_ratios) { + img.wmin = val.aspect_ratios[0].min_width; + img.hmin = val.aspect_ratios[0].min_height; + } + + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["cleanObj"](img); +} +/** + * Checks if configuration allows specified sync method + * @param syncRule {Object} + * @param bidderCode {string} + * @returns {boolean} + */ + + +function isSyncMethodAllowed(syncRule, bidderCode) { + if (!syncRule) { + return false; + } + + var bidders = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](syncRule.bidders) ? syncRule.bidders : [bidderCode]; + var rule = syncRule.filter === 'include'; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["contains"](bidders, bidderCode) === rule; +} +/** + * Get preferred user-sync method based on publisher configuration + * @param bidderCode {string} + * @returns {number|undefined} + */ + + +function getAllowedSyncMethod(bidderCode) { + if (!__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('userSync.syncEnabled')) { + return; + } + + var filterConfig = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('userSync.filterSettings'); + + if (isSyncMethodAllowed(filterConfig.all, bidderCode) || isSyncMethodAllowed(filterConfig.iframe, bidderCode)) { + return SYNC_IFRAME; + } else if (isSyncMethodAllowed(filterConfig.image, bidderCode)) { + return SYNC_IMAGE; + } +} +/** + * Builds complete rtb request + * @param imps {Object} Collection of rtb impressions + * @param bidderRequest {BidderRequest} + * @return {Object} Complete rtb request + */ + + +function buildRtbRequest(imps, bidderRequest) { + var bidderCode = bidderRequest.bidderCode, + gdprConsent = bidderRequest.gdprConsent, + auctionId = bidderRequest.auctionId, + refererInfo = bidderRequest.refererInfo, + timeout = bidderRequest.timeout, + uspConsent = bidderRequest.uspConsent; + var req = { + 'id': auctionId, + 'imp': imps, + 'site': createSite(refererInfo), + 'at': 1, + 'device': { + 'ip': 'caller', + 'ua': 'caller', + 'js': 1, + 'language': getLanguage() + }, + 'tmax': parseInt(timeout) + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]()) { + req.device.dnt = 1; + } + + if (gdprConsent) { + if (gdprConsent.gdprApplies !== undefined) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](req, 'regs.ext.gdpr', ~~gdprConsent.gdprApplies); + } + + if (gdprConsent.consentString !== undefined) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](req, 'user.ext.consent', gdprConsent.consentString); + } + } + + if (uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](req, 'regs.ext.us_privacy', uspConsent); + } + + var syncMethod = getAllowedSyncMethod(bidderCode); + + if (syncMethod) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](req, 'ext.adk_usersync', syncMethod); + } + + return req; +} +/** + * Get browser language + * @returns {String} + */ + + +function getLanguage() { + var language = navigator.language ? 'language' : 'userLanguage'; + return navigator[language].split('-')[0]; +} +/** + * Creates site description object + */ + + +function createSite(refInfo) { + var url = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](refInfo.referer); + var site = { + 'domain': url.hostname, + 'page': "".concat(url.protocol, "://").concat(url.hostname).concat(url.pathname) + }; + + if (self === top && document.referrer) { + site.ref = document.referrer; + } + + var keywords = document.getElementsByTagName('meta')['keywords']; + + if (keywords && keywords.content) { + site.keywords = keywords.content; + } + + return site; +} +/** + * Format creative with optional nurl call + * @param bid rtb Bid object + */ + + +function formatAdMarkup(bid) { + var adm = bid.adm; + + if ('nurl' in bid) { + adm += __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"]("".concat(bid.nurl, "&px=1")); + } + + return adm; +} +/** + * Basic validates to comply with platform requirements + */ + + +function validateNativeAdUnit(adUnit) { + return validateNativeImageSize(adUnit.image) && validateNativeImageSize(adUnit.icon) && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](adUnit, 'privacyLink.required') && // not supported yet + !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](adUnit, 'privacyIcon.required'); // not supported yet +} +/** + * Validates image asset size definition + */ + + +function validateNativeImageSize(img) { + if (!img) { + return true; + } + + if (img.sizes) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArrayOfNums"](img.sizes, 2); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](img.aspect_ratios)) { + return img.aspect_ratios.length > 0 && img.aspect_ratios[0].min_height && img.aspect_ratios[0].min_width; + } + + return true; +} +/** + * Creates native ad for native 1.1 response + */ + + +function buildNativeAd(nativeResp) { + var _nativeResp$native = nativeResp.native, + assets = _nativeResp$native.assets, + link = _nativeResp$native.link, + imptrackers = _nativeResp$native.imptrackers, + jstracker = _nativeResp$native.jstracker, + privacy = _nativeResp$native.privacy; + var nativeAd = { + clickUrl: link.url, + impressionTrackers: imptrackers, + javascriptTrackers: jstracker ? [jstracker] : undefined, + privacyLink: privacy + }; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](assets, function (asset) { + var assetName = NATIVE_MODEL[asset.id].name; + var assetType = NATIVE_MODEL[asset.id].assetType; + nativeAd[assetName] = asset[assetType].text || asset[assetType].value || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["cleanObj"]({ + url: asset[assetType].url, + width: asset[assetType].w, + height: asset[assetType].h + }); + }); + + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["cleanObj"](nativeAd); +} + +/***/ }) + +},[197]); \ No newline at end of file diff --git a/build/dist/adliveBidAdapter.js b/build/dist/adliveBidAdapter.js new file mode 100644 index 00000000000..f2b87855609 --- /dev/null +++ b/build/dist/adliveBidAdapter.js @@ -0,0 +1,86 @@ +pbjsChunk([308],{ + +/***/ 199: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(200); + + +/***/ }), + +/***/ 200: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'adlive'; +var ENDPOINT_URL = 'https://api.publishers.adlive.io/get?pbjs=1'; +var CURRENCY = 'USD'; +var TIME_TO_LIVE = 360; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.hashes && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.params.hashes)); + }, + buildRequests: function buildRequests(validBidRequests) { + var requests = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + requests.push({ + method: 'POST', + url: ENDPOINT_URL, + options: { + contentType: 'application/json', + withCredentials: true + }, + data: JSON.stringify({ + transaction_id: bid.bidId, + hashes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('hashes', bid.params) + }), + bidId: bid.bidId + }); + }); + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + try { + var response = serverResponse.body; + var bidResponses = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](response, function (bidResponse) { + if (!bidResponse.is_passback) { + bidResponses.push({ + requestId: bidRequest.bidId, + cpm: bidResponse.price, + width: bidResponse.size[0], + height: bidResponse.size[1], + creativeId: bidResponse.hash, + currency: CURRENCY, + netRevenue: false, + ttl: TIME_TO_LIVE, + ad: bidResponse.content + }); + } + }); + + return bidResponses; + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](err); + return []; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[199]); \ No newline at end of file diff --git a/build/dist/admanBidAdapter.js b/build/dist/admanBidAdapter.js new file mode 100644 index 00000000000..3ec4b35b563 --- /dev/null +++ b/build/dist/admanBidAdapter.js @@ -0,0 +1,138 @@ +pbjsChunk([307],{ + +/***/ 201: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(202); + + +/***/ }), + +/***/ 202: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'adman'; +var AD_URL = 'https://pub.admanmedia.com/?c=o&m=multi'; +var URL_SYNC = 'https://pub.admanmedia.com/?c=o&m=sync'; + +function isBidResponseValid(bid) { + if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { + return false; + } + + switch (bid['mediaType']) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + return Boolean(bid.native && bid.native.title && bid.native.image && bid.native.impressionTrackers); + + default: + return false; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* 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 bidderRequest = arguments.length > 1 ? arguments[1] : undefined; + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + var placements = []; + var request = { + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'language': navigator && navigator.language ? navigator.language : '', + 'secure': 1, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + request.language.indexOf('-') != -1 && (request.language = request.language.split('-')[0]); + + if (bidderRequest) { + if (bidderRequest.uspConsent) { + request.ccpa = bidderRequest.uspConsent; + } + + if (bidderRequest.gdprConsent) { + request.gdpr = bidderRequest.gdprConsent; + } + } + + var len = validBidRequests.length; + + for (var i = 0; i < len; i++) { + var bid = validBidRequests[i]; + var traff = bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + placements.push({ + placementId: bid.params.placementId, + bidId: bid.bidId, + sizes: bid.mediaTypes && bid.mediaTypes[traff] && bid.mediaTypes[traff].sizes ? bid.mediaTypes[traff].sizes : [], + traffic: traff + }); + + if (bid.schain) { + placements.schain = bid.schain; + } + } + + return { + method: 'POST', + url: AD_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)) { + response.push(resItem); + } + } + + return response; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + return [{ + type: 'image', + url: URL_SYNC + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[201]); \ No newline at end of file diff --git a/build/dist/admaticBidAdapter.js b/build/dist/admaticBidAdapter.js new file mode 100644 index 00000000000..10de075ea4e --- /dev/null +++ b/build/dist/admaticBidAdapter.js @@ -0,0 +1,171 @@ +pbjsChunk([306],{ + +/***/ 203: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(204); + + +/***/ }), + +/***/ 204: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var BIDDER_CODE = 'admatic'; +var ENDPOINT_URL = 'https://ads4.admatic.com.tr/prebid/v3/bidrequest'; +var spec = { + code: BIDDER_CODE, + aliases: ['admatic'], + // 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.pid && bid.params.wid && bid.params.url); + }, + + /** + * 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 payload = { + request: [] + }; + + for (var i = 0; i < validBidRequests.length; i++) { + var validBidRequest = validBidRequests[i]; + payload.auctionId = validBidRequest.auctionId; + payload.bidder = validBidRequest.bidder; + payload.bidderRequestId = validBidRequest.bidderRequestId; + payload.pid = validBidRequest.params.pid; + payload.wid = validBidRequest.params.wid; + payload.url = validBidRequest.params.url; + var request = { + adUnitCode: validBidRequest.adUnitCode, + bidId: validBidRequest.bidId, + transactionId: validBidRequest.transactionId, + priceType: validBidRequest.params.priceType, + sizes: transformSizes(validBidRequest.sizes) + }; + payload.request.push(request); + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: ENDPOINT_URL, + data: payloadString, + bidder: 'admatic', + bids: validBidRequests + }; + }, + + /** + * 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 = []; + + if (serverBody) { + if (serverBody.tags && serverBody.tags.length > 0) { + serverBody.tags.forEach(function (serverBid) { + if (serverBid != null) { + if (serverBid.cpm !== 0) { + var bidResponse = { + requestId: serverBid.bidId, + cpm: serverBid.cpm, + width: serverBid.width, + height: serverBid.height, + creativeId: serverBid.creativeId, + dealId: serverBid.dealId, + currency: serverBid.currency, + netRevenue: serverBid.netRevenue, + ttl: serverBid.ttl, + referrer: serverBid.referrer, + ad: serverBid.ad + }; + bidResponses.push(bidResponse); + } + } + }); + } + } + + 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: 'https://ads4.admatic.com.tr/prebid/static/usersync/v3/async_usersync.html' + }); + } + + if (syncOptions.pixelEnabled && serverResponses.length > 0) { + syncs.push({ + type: 'image', + url: 'https://ads5.admatic.com.tr/prebid/v3/bidrequest/usersync' + }); + } + + return syncs; + } +}; +/* Turn bid request sizes into ut-compatible format */ + +function transformSizes(requestSizes) { + var sizes = []; + var sizeObj = {}; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes) && requestSizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes[0])) { + sizeObj.width = parseInt(requestSizes[0], 10); + sizeObj.height = parseInt(requestSizes[1], 10); + sizes.push(sizeObj); + } else if (_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; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[203]); \ No newline at end of file diff --git a/build/dist/admediaBidAdapter.js b/build/dist/admediaBidAdapter.js new file mode 100644 index 00000000000..4ee02468ab5 --- /dev/null +++ b/build/dist/admediaBidAdapter.js @@ -0,0 +1,86 @@ +pbjsChunk([305],{ + +/***/ 205: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(206); + + +/***/ }), + +/***/ 206: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'admedia'; +var ENDPOINT_URL = 'https://prebid.admedia.com/bidder/'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return bid.params && !!bid.params.aid; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var payload = {}; + + if (bidderRequest && bidderRequest.refererInfo) { + payload.referer = encodeURIComponent(bidderRequest.refererInfo.referer); + } + + payload.tags = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + var tag = { + id: bid.bidId, + sizes: bid.sizes, + aid: bid.params.aid + }; + payload.tags.push(tag); + }); + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: ENDPOINT_URL, + data: payloadString + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + + if (!serverResponse.body.tags) { + return bidResponses; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body.tags, function (response) { + if (!response.error && response.cpm > 0) { + var bidResponse = { + requestId: response.id, + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.id, + dealId: response.id, + currency: 'USD', + netRevenue: true, + ttl: 120, + // referrer: REFERER, + ad: response.ad + }; + bidResponses.push(bidResponse); + } + }); + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[205]); \ No newline at end of file diff --git a/build/dist/admixerBidAdapter.js b/build/dist/admixerBidAdapter.js new file mode 100644 index 00000000000..ed2d7a6015e --- /dev/null +++ b/build/dist/admixerBidAdapter.js @@ -0,0 +1,107 @@ +pbjsChunk([304],{ + +/***/ 207: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(208); + + +/***/ }), + +/***/ 208: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'admixer'; +var ALIASES = ['go2net']; +var ENDPOINT_URL = 'https://inv-nets.admixer.net/prebid.1.0.aspx'; +var spec = { + code: BIDDER_CODE, + aliases: ALIASES, + supportedMediaTypes: ['banner', 'video'], + + /** + * Determines whether or not the given bid request is valid. + */ + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.zone; + }, + + /** + * Make a server request from the list of BidRequests. + */ + buildRequests: function buildRequests(validRequest, bidderRequest) { + var payload = { + imps: [] + }; + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + payload.referrer = encodeURIComponent(bidderRequest.refererInfo.referer); + } + + if (bidderRequest.gdprConsent) { + payload.gdprConsent = { + consentString: bidderRequest.gdprConsent.consentString, + // will check if the gdprApplies field was populated with a boolean value (ie from page config). If it's undefined, then default to true + gdprApplies: typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies : true + }; + } + + if (bidderRequest.uspConsent) { + payload.uspConsent = bidderRequest.uspConsent; + } + } + + validRequest.forEach(function (bid) { + payload.imps.push(bid); + }); + var payloadString = JSON.stringify(payload); + return { + method: 'GET', + url: ENDPOINT_URL, + data: "data=".concat(payloadString) + }; + }, + + /** + * Unpack the response from the server into a list of bids. + */ + 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[207]); \ No newline at end of file diff --git a/build/dist/adnuntiusBidAdapter.js b/build/dist/adnuntiusBidAdapter.js new file mode 100644 index 00000000000..0c699fc0afb --- /dev/null +++ b/build/dist/adnuntiusBidAdapter.js @@ -0,0 +1,93 @@ +pbjsChunk([303],{ + +/***/ 209: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(210); + + +/***/ }), + +/***/ 210: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 = 'adnuntius'; +var ENDPOINT_URL = 'https://delivery.adnuntius.com/i?tzo=-60&format=json'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.auId || bid.params.member && bid.params.invCode); + }, + buildRequests: function buildRequests(validBidRequests) { + var networks = {}; + var bidRequests = {}; + var requests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + var bid = validBidRequests[i]; + var network = bid.params.network || 'network'; + bidRequests[network] = bidRequests[network] || []; + bidRequests[network].push(bid); + networks[network] = networks[network] || {}; + networks[network].adUnits = networks[network].adUnits || []; + networks[network].adUnits.push(_objectSpread(_objectSpread({}, bid.params.targeting), {}, { + auId: bid.params.auId + })); + } + + var networkKeys = Object.keys(networks); + + for (var j = 0; j < networkKeys.length; j++) { + var _network = networkKeys[j]; + requests.push({ + method: 'POST', + url: ENDPOINT_URL, + data: JSON.stringify(networks[_network]), + bid: bidRequests[_network] + }); + } + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var serverBody = serverResponse.body; + + for (var k = 0; k < serverBody.adUnits.length; k++) { + var adUnit = serverBody.adUnits[k]; + + if (adUnit.matchedAdCount > 0) { + var bid = adUnit.ads[0]; + bidResponses.push({ + requestId: bidRequest.bid[k].bidId, + cpm: bid.cpm ? bid.cpm.amount : 0, + width: Number(bid.creativeWidth), + height: Number(bid.creativeHeight), + creativeId: bid.creativeId, + currency: bid.cpm ? bid.cpm.currency : 'EUR', + netRevenue: false, + ttl: 360, + ad: adUnit.html + }); + } + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[209]); \ No newline at end of file diff --git a/build/dist/adoceanBidAdapter.js b/build/dist/adoceanBidAdapter.js new file mode 100644 index 00000000000..73700992962 --- /dev/null +++ b/build/dist/adoceanBidAdapter.js @@ -0,0 +1,154 @@ +pbjsChunk([302],{ + +/***/ 211: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(212); + + +/***/ }), + +/***/ 212: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'adocean'; + +function buildEndpointUrl(emiter, payloadMap) { + var payload = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](payloadMap, function (v, k) { + payload.push(k + '=' + encodeURIComponent(v)); + }); + + var randomizedPart = Math.random().toString().slice(2); + return 'https://' + emiter + '/_' + randomizedPart + '/ad.json?' + payload.join('&'); +} + +function buildRequest(masterBidRequests, masterId, gdprConsent) { + var emiter; + var payload = { + id: masterId, + aosspsizes: [] + }; + + if (gdprConsent) { + payload.gdpr_consent = gdprConsent.consentString || undefined; + payload.gdpr = gdprConsent.gdprApplies ? 1 : 0; + } + + var bidIdMap = {}; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](masterBidRequests, function (bid, slaveId) { + if (!emiter) { + emiter = bid.params.emiter; + } + + var slaveSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.mediaTypes.banner.sizes).join('_'); + var rawSlaveId = bid.params.slaveId.replace('adocean', ''); + payload.aosspsizes.push(rawSlaveId + '~' + slaveSizes); + bidIdMap[slaveId] = bid.bidId; + }); + + payload.aosspsizes = payload.aosspsizes.join('-'); + return { + method: 'GET', + url: buildEndpointUrl(emiter, payload), + data: '', + bidIdMap: bidIdMap + }; +} + +function assignToMaster(bidRequest, bidRequestsByMaster) { + var masterId = bidRequest.params.masterId; + var slaveId = bidRequest.params.slaveId; + var masterBidRequests = bidRequestsByMaster[masterId] = bidRequestsByMaster[masterId] || [{}]; + var i = 0; + + while (masterBidRequests[i] && masterBidRequests[i][slaveId]) { + i++; + } + + if (!masterBidRequests[i]) { + masterBidRequests[i] = {}; + } + + masterBidRequests[i][slaveId] = bidRequest; +} + +function _interpretResponse(placementResponse, bidRequest, bids) { + var requestId = bidRequest.bidIdMap[placementResponse.id]; + + if (!placementResponse.error && requestId) { + var adCode = '"); + trackedAd += tracker; + }); + } + + return trackedAd; +} + +function getScreenParams() { + return "".concat(window.screen.width, "x").concat(window.screen.height, "@").concat(window.devicePixelRatio); +} + +function getBids(bids) { + var bidArr = bids.map(function (bid) { + var bidId = bid.bidId; + var mediaType = ''; + var mediaTypes = Object.keys(bid.mediaTypes); + + switch (mediaTypes[0]) { + case 'video': + mediaType = 'v'; + break; + + case 'native': + mediaType = 'n'; + break; + + case 'audio': + mediaType = 'a'; + break; + + default: + mediaType = 'b'; + break; + } + + var adUnitCode = ",c=".concat(bid.adUnitCode); + + if (bid.params.code) { + adUnitCode = ",c=".concat(encodeURIComponent(bid.params.code)); + } + + if (bid.params.adunitId) { + adUnitCode = ",u=".concat(encodeURIComponent(bid.params.adunitId)); + } + + return "".concat(bidId, ":t=").concat(mediaType, ",s=").concat(serializeSizes(bid.sizes)).concat(adUnitCode); + }); + return bidArr.join(';'); +} + +; + +function getEndpointsGroups(bidRequests) { + var endpoints = []; + + var getEndpoint = function getEndpoint(bid) { + if (bid.params.test) { + return "https://mock-bapi.userreport.com/v2/".concat(bid.params.publisherId, "/bid"); + } + + if (bid.params.endpoint) { + return "".concat(bid.params.endpoint).concat(bid.params.publisherId, "/bid"); + } + + return "https://bapi.userreport.com/v2/".concat(bid.params.publisherId, "/bid"); + }; + + bidRequests.forEach(function (bid) { + var exist = endpoints.filter(function (item) { + return item.endpoint.indexOf(bid.params.endpoint) > -1; + })[0]; + + if (exist) { + exist.bids.push(bid); + } else { + endpoints.push({ + endpoint: getEndpoint(bid), + bids: [bid] + }); + } + }); + return endpoints; +} + +function isBidRequestValid(bid) { + var isPublisherIdExist = !!bid.params.publisherId; + var isOneMediaType = Object.keys(bid.mediaTypes).length === 1; + return isPublisherIdExist && isOneMediaType; +} + +function buildRequests(bidRequests, bidderRequest) { + var data = { + med: encodeURIComponent(window.location.href), + auid: bidderRequest.auctionId, + ref: document.referrer, + dnt: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getDNT"]() ? 1 : 0, + sr: getScreenParams() + }; + var consentData = getRawConsentString(bidderRequest.gdprConsent); + data.iab_consent = consentData; + var options = { + withCredentials: true + }; + var isConsent = getIabConsentString(bidderRequest); + var noDsu = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('apstream.noDsu'); + + if (!isConsent || noDsu) { + data.dsu = ''; + } else { + data.dsu = dsuModule.readOrCreateDsu(); + } + + if (!isConsent || isConsent === 'disabled') { + options.withCredentials = false; + } + + var endpoints = getEndpointsGroups(bidRequests); + var serverRequests = endpoints.map(function (item) { + return { + method: 'GET', + url: item.endpoint, + data: _objectSpread(_objectSpread({}, data), {}, { + bids: getBids(item.bids), + rnd: Math.random() + }), + options: options + }; + }); + return serverRequests; +} + +function interpretResponse(serverResponse) { + var bidResponses = serverResponse && serverResponse.body; + + if (!bidResponses || !bidResponses.length) { + return []; + } + + return bidResponses.map(function (x) { + return { + requestId: x.bidId, + cpm: x.bidDetails.cpm, + width: x.bidDetails.width, + height: x.bidDetails.height, + creativeId: x.bidDetails.creativeId, + currency: x.bidDetails.currency || 'USD', + netRevenue: x.bidDetails.netRevenue, + dealId: x.bidDetails.dealId, + ad: injectPixels(x.bidDetails.ad, x.bidDetails.noticeUrls, x.bidDetails.impressionScripts), + ttl: x.bidDetails.ttl + }; + }); +} + +var spec = { + code: CONSTANTS.BIDDER_CODE, + gvlid: CONSTANTS.GVLID, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[267]); \ No newline at end of file diff --git a/build/dist/astraoneBidAdapter.js b/build/dist/astraoneBidAdapter.js new file mode 100644 index 00000000000..b1f9c0de6d7 --- /dev/null +++ b/build/dist/astraoneBidAdapter.js @@ -0,0 +1,133 @@ +pbjsChunk([280],{ + +/***/ 269: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(270); + + +/***/ }), + +/***/ 270: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'astraone'; +var SSP_ENDPOINT = 'https://ssp.astraone.io/auction/prebid'; +var TTL = 60; + +function buildBidRequests(validBidRequests) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](validBidRequests, function (validBidRequest) { + var params = validBidRequest.params; + var bidRequest = { + bidId: validBidRequest.bidId, + transactionId: validBidRequest.transactionId, + sizes: validBidRequest.sizes, + placement: params.placement, + placeId: params.placeId, + imageUrl: params.imageUrl + }; + return bidRequest; + }); +} + +function buildBid(bidData) { + var bid = { + requestId: bidData.bidId, + cpm: bidData.price, + width: bidData.width, + height: bidData.height, + creativeId: bidData.content.seanceId, + currency: bidData.currency, + netRevenue: true, + mediaType: __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], + ttl: TTL, + content: bidData.content + }; + bid.ad = wrapAd(bid, bidData); + return bid; +} + +function getMediaTypeFromBid(bid) { + return bid.mediaTypes && Object.keys(bid.mediaTypes)[0]; +} + +function wrapAd(bid, bidData) { + return "\n \n \n \n \n \n \n \n \n
\n \n \n "); +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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 getMediaTypeFromBid(bid) === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */] && !!bid.params.placeId && !!bid.params.imageUrl && !!bid.params.placement && bid.params.placement === 'inImage'; + }, + + /** + * 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 payload = { + url: bidderRequest.refererInfo.referer, + cmp: !!bidderRequest.gdprConsent, + bidRequests: buildBidRequests(validBidRequests) + }; + + if (payload.cmp) { + var gdprApplies = bidderRequest.gdprConsent.gdprApplies; + if (gdprApplies !== undefined) payload['ga'] = gdprApplies; + payload['cs'] = bidderRequest.gdprConsent.consentString; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: SSP_ENDPOINT, + data: payloadString, + options: { + contentType: 'application/json' + } + }; + }, + + /** + * 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) { + var serverBody = serverResponse.body; + + if (serverBody && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverBody)) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](serverBody, function (bid) { + return buildBid(bid); + }); + } else { + return []; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[269]); \ No newline at end of file diff --git a/build/dist/atomxBidAdapter.js b/build/dist/atomxBidAdapter.js new file mode 100644 index 00000000000..af3d16b2520 --- /dev/null +++ b/build/dist/atomxBidAdapter.js @@ -0,0 +1,122 @@ +pbjsChunk([279],{ + +/***/ 271: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(272); + + +/***/ }), + +/***/ 272: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +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 = { + 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: 'https://p.ato.mx/placement', + data: { + v: 12, + id: bidRequest.params.id, + size: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[271]); \ No newline at end of file diff --git a/build/dist/atsAnalyticsAdapter.js b/build/dist/atsAnalyticsAdapter.js new file mode 100644 index 00000000000..ac2a5a35135 --- /dev/null +++ b/build/dist/atsAnalyticsAdapter.js @@ -0,0 +1,471 @@ +pbjsChunk([39],{ + +/***/ 273: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(274); + + +/***/ }), + +/***/ 274: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["checkUserBrowser"] = checkUserBrowser; +/* harmony export (immutable) */ __webpack_exports__["browserIsFirefox"] = browserIsFirefox; +/* harmony export (immutable) */ __webpack_exports__["browserIsIE"] = browserIsIE; +/* harmony export (immutable) */ __webpack_exports__["browserIsEdge"] = browserIsEdge; +/* harmony export (immutable) */ __webpack_exports__["browserIsChrome"] = browserIsChrome; +/* harmony export (immutable) */ __webpack_exports__["browserIsSafari"] = browserIsSafari; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var analyticsType = 'endpoint'; +var handlerRequest = []; +var handlerResponse = []; +var host = ''; + +function bidRequestedHandler(args) { + var requests; + requests = args.bids.map(function (bid) { + return { + has_envelope: bid.userId ? !!bid.userId.idl_env : false, + bidder: bid.bidder, + bid_id: bid.bidId, + auction_id: args.auctionId, + user_browser: checkUserBrowser(), + user_platform: navigator.platform, + auction_start: new Date(args.auctionStart).toJSON(), + domain: window.location.hostname, + pid: atsAnalyticsAdapter.context.pid + }; + }); + return requests; +} + +function bidResponseHandler(args) { + return { + bid_id: args.requestId, + response_time_stamp: new Date(args.responseTimestamp).toJSON(), + currency: args.currency, + cpm: args.cpm, + net_revenue: args.netRevenue + }; +} + +function checkUserBrowser() { + var firefox = browserIsFirefox(); + var chrome = browserIsChrome(); + var edge = browserIsEdge(); + var safari = browserIsSafari(); + + if (firefox) { + return firefox; + } + + if (chrome) { + return chrome; + } + + if (edge) { + return edge; + } + + if (safari) { + return safari; + } else { + return 'Unknown'; + } +} +function browserIsFirefox() { + if (typeof InstallTrigger !== 'undefined') { + return 'Firefox'; + } else { + return false; + } +} +function browserIsIE() { + return !!document.documentMode; +} +function browserIsEdge() { + if (!browserIsIE() && !!window.StyleMedia) { + return 'Edge'; + } else { + return false; + } +} +function browserIsChrome() { + if (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime) || /Android/i.test(navigator.userAgent) && !!window.chrome) { + return 'Chrome'; + } else { + return false; + } +} +function browserIsSafari() { + if (window.safari !== undefined) { + return 'Safari'; + } else { + return false; + } +} + +function callHandler(evtype, args) { + if (evtype === __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_REQUESTED) { + handlerRequest = handlerRequest.concat(bidRequestedHandler(args)); + } else if (evtype === __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_RESPONSE) { + handlerResponse.push(bidResponseHandler(args)); + } + + if (evtype === __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_END) { + if (handlerRequest.length) { + var events = []; + + if (handlerResponse.length) { + events = handlerRequest.filter(function (request) { + return handlerResponse.filter(function (response) { + if (request.bid_id === response.bid_id) { + _extends(request, response); + } + }); + }); + } else { + events = handlerRequest; + } + + atsAnalyticsAdapter.context.events = events; + } + } +} + +var atsAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + host: host, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (typeof args !== 'undefined') { + callHandler(eventType, args); + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_END) { + // send data to ats analytic endpoint + try { + var dataToSend = { + 'Data': atsAnalyticsAdapter.context.events + }; + var strJSON = JSON.stringify(dataToSend); + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])(atsAnalyticsAdapter.context.host, function () {}, strJSON, { + method: 'POST', + contentType: 'application/json' + }); + } catch (err) {} + } + } +}); // save the base class function + + +atsAnalyticsAdapter.originEnableAnalytics = atsAnalyticsAdapter.enableAnalytics; // override enableAnalytics so we can get access to the config passed in from the page + +atsAnalyticsAdapter.enableAnalytics = function (config) { + if (!config.options.pid) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('Publisher ID (pid) option is not defined. Analytics won\'t work'); + return; + } + + if (!config.options.host) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('Host option is not defined. Analytics won\'t work'); + return; + } + + host = config.options.host; + atsAnalyticsAdapter.context = { + events: [], + host: config.options.host, + pid: config.options.pid + }; + var initOptions = config.options; + atsAnalyticsAdapter.originEnableAnalytics(initOptions); // call the base class function +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: atsAnalyticsAdapter, + code: 'atsAnalytics' +}); +/* harmony default export */ __webpack_exports__["default"] = (atsAnalyticsAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[273]); \ No newline at end of file diff --git a/build/dist/audiencerunBidAdapter.js b/build/dist/audiencerunBidAdapter.js new file mode 100644 index 00000000000..465346152b9 --- /dev/null +++ b/build/dist/audiencerunBidAdapter.js @@ -0,0 +1,162 @@ +pbjsChunk([278],{ + +/***/ 275: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(276); + + +/***/ }), + +/***/ 276: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'audiencerun'; +var ENDPOINT_URL = 'https://d.audiencerun.com/prebid'; +var spec = { + version: '1.0.0', + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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) { + var isValid = true; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.zoneId')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('AudienceRun zoneId parameter is required. Bid aborted.'); + isValid = false; + } + + return isValid; + }, + + /** + * 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. + * @param {*} bidderRequest + * @return {ServerRequest} Info describing the request to the server. + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var bids = bidRequests.map(function (bid) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes', []); + return { + zoneId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getValue"](bid.params, 'zoneId'), + sizes: sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }), + bidfloor: bid.params.bidfloor || 0.0, + bidId: bid.bidId, + bidderRequestId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidderRequestId', bid), + adUnitCode: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('adUnitCode', bid), + auctionId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('auctionId', bid), + transactionId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('transactionId', bid) + }; + }); + var payload = { + libVersion: this.version, + referer: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null, + currencyCode: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'), + timeout: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('bidderTimeout'), + bids: bids + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr = { + consent: bidderRequest.gdprConsent.consentString, + applies: bidderRequest.gdprConsent.gdprApplies + }; + } else { + payload.gdpr = { + consent: '' + }; + } + + return { + method: 'POST', + url: ENDPOINT_URL, + data: JSON.stringify(payload), + options: { + withCredentials: true + } + }; + }, + + /** + * 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 bids = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body.bid, function (bidObject) { + if (!bidObject.cpm || bidObject.cpm === null || !bidObject.adm) { + return; + } + + var bid = {}; + bid.ad = bidObject.adm; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; // Common properties + + bid.requestId = bidObject.bidId; + bid.adId = bidObject.zoneId; + bid.cpm = parseFloat(bidObject.cpm); + bid.creativeId = bidObject.crid; + bid.currency = bidObject.currency ? bidObject.currency.toUpperCase() : 'USD'; + bid.height = bidObject.h; + bid.width = bidObject.w; + bid.netRevenue = bidObject.isNet ? bidObject.isNet : false; + bid.ttl = 300; + bids.push(bid); + }); + + return bids; + }, + + /** + * 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) { + if (!serverResponses || !serverResponses.length) return []; + var syncs = []; + serverResponses.forEach(function (response) { + response.body.bid.forEach(function (bidObject) { + syncs.push({ + type: 'iframe', + url: bidObject.syncUrl + }); + }); + }); + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[275]); \ No newline at end of file diff --git a/build/dist/audigentRtdProvider.js b/build/dist/audigentRtdProvider.js new file mode 100644 index 00000000000..6af8b6cf36d --- /dev/null +++ b/build/dist/audigentRtdProvider.js @@ -0,0 +1,179 @@ +pbjsChunk([277],{ + +/***/ 277: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(278); + + +/***/ }), + +/***/ 278: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["setData"] = setData; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "audigentSubmodule", function() { return audigentSubmodule; }); +/* harmony export (immutable) */ __webpack_exports__["init"] = init; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +/** + * This module adds audigent provider to the real time data module + * The {@link module:modules/realTimeData} module is required + * The module will fetch segments from audigent server + * @module modules/audigentRtdProvider + * @requires module:modules/realTimeData + */ + +/** + * @typedef {Object} ModuleParams + * @property {string} siteKey + * @property {string} pubKey + * @property {string} url + * @property {?string} keyName + * @property {number} auctionDelay + */ + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(); +/** @type {string} */ + +var MODULE_NAME = 'realTimeData'; +/** @type {ModuleParams} */ + +var _moduleParams = {}; +/** + * XMLHttpRequest to get data form audigent server + * @param {string} url server url with query params + */ + +function setData(data) { + storage.setDataInLocalStorage('__adgntseg', JSON.stringify(data)); +} + +function getSegments(adUnits, onDone) { + try { + var jsonData = storage.getDataFromLocalStorage('__adgntseg'); + + if (jsonData) { + var data = JSON.parse(jsonData); + + if (data.audigent_segments) { + var dataToReturn = adUnits.reduce(function (rp, cau) { + var adUnitCode = cau && cau.code; + + if (!adUnitCode) { + return rp; + } + + rp[adUnitCode] = data; + return rp; + }, {}); + onDone(dataToReturn); + return; + } + } + + getSegmentsAsync(adUnits, onDone); + } catch (e) { + getSegmentsAsync(adUnits, onDone); + } +} + +function getSegmentsAsync(adUnits, onDone) { + var userIds = Object(__WEBPACK_IMPORTED_MODULE_1__src_prebidGlobal_js__["a" /* getGlobal */])().getUserIds(); + var tdid = null; + + if (userIds && userIds['tdid']) { + tdid = userIds['tdid']; + } else { + onDone({}); + } + + var url = "https://seg.ad.gt/api/v1/rtb_segments?tdid=".concat(tdid); + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])(url, { + success: function success(response, req) { + if (req.status === 200) { + try { + var data = JSON.parse(response); + + if (data && data.audigent_segments) { + setData(data); + var dataToReturn = adUnits.reduce(function (rp, cau) { + var adUnitCode = cau && cau.code; + + if (!adUnitCode) { + return rp; + } + + rp[adUnitCode] = data; + return rp; + }, {}); + onDone(dataToReturn); + } else { + onDone({}); + } + } catch (err) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('unable to parse audigent segment data'); + onDone({}); + } + } else if (req.status === 204) { + // unrecognized site key + onDone({}); + } + }, + error: function error() { + onDone({}); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('unable to get audigent segment data'); + } + }); +} +/** @type {RtdSubmodule} */ + + +var audigentSubmodule = { + /** + * used to link submodule with realTimeData + * @type {string} + */ + name: 'audigent', + + /** + * get data and send back to realTimeData module + * @function + * @param {adUnit[]} adUnits + * @param {function} onDone + */ + getData: getSegments +}; +function init(config) { + var confListener = config.getConfig(MODULE_NAME, function (_ref) { + var realTimeData = _ref.realTimeData; + + try { + _moduleParams = realTimeData.dataProviders && realTimeData.dataProviders.filter(function (pr) { + return pr.name && pr.name.toLowerCase() === 'audigent'; + })[0].params; + _moduleParams.auctionDelay = realTimeData.auctionDelay; + } catch (e) { + _moduleParams = {}; + } + + confListener(); + }); +} +Object(__WEBPACK_IMPORTED_MODULE_3__src_hook_js__["e" /* submodule */])('realTimeData', audigentSubmodule); +init(__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */]); + +/***/ }) + +},[277]); \ No newline at end of file diff --git a/build/dist/automatadBidAdapter.js b/build/dist/automatadBidAdapter.js new file mode 100644 index 00000000000..7350fee59c1 --- /dev/null +++ b/build/dist/automatadBidAdapter.js @@ -0,0 +1,133 @@ +pbjsChunk([276],{ + +/***/ 279: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(280); + + +/***/ }), + +/***/ 280: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); + + + + +var BIDDER = 'automatad'; +var ENDPOINT_URL = 'https://rtb2.automatad.com/ortb2'; +var DEFAULT_BID_TTL = 30; +var DEFAULT_CURRENCY = 'USD'; +var DEFAULT_NET_REVENUE = true; +var spec = { + code: BIDDER, + aliases: ['atd'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + // will receive request bid. check if have necessary params for bidding + return bid && bid.hasOwnProperty('params') && bid.params.hasOwnProperty('siteId') && bid.params.hasOwnProperty('placementId') && bid.hasOwnProperty('mediaTypes') && bid.mediaTypes.hasOwnProperty('banner'); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (!validBidRequests || !bidderRequest) { + return; + } + + var siteId = validBidRequests[0].params.siteId; + var placementId = validBidRequests[0].params.placementId; + var impressions = validBidRequests.map(function (bidRequest) { + return { + id: bidRequest.bidId, + banner: { + format: bidRequest.sizes.map(function (sizeArr) { + return { + w: sizeArr[0], + h: sizeArr[1] + }; + }) + } + }; + }); // params from bid request + + var openrtbRequest = { + id: validBidRequests[0].auctionId, + imp: impressions, + site: { + id: siteId, + placement: placementId, + domain: window.location.hostname, + page: window.location.href, + ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null + } + }; + var payloadString = JSON.stringify(openrtbRequest); + return { + method: 'POST', + url: ENDPOINT_URL + '/resp', + data: payloadString, + options: { + contentType: 'application/json', + withCredentials: false, + crossOrigin: true + } + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidResponses = []; + var response = (serverResponse || {}).body; + + if (response && response.seatbid && response.seatbid.length === 1 && response.seatbid[0].bid && response.seatbid[0].bid.length) { + response.seatbid[0].bid.forEach(function (bid) { + bidResponses.push({ + requestId: bid.impid, + cpm: bid.price, + ad: bid.adm, + adDomain: bid.adomain[0], + currency: DEFAULT_CURRENCY, + ttl: DEFAULT_BID_TTL, + creativeId: bid.crid, + width: bid.w, + height: bid.h, + netRevenue: DEFAULT_NET_REVENUE, + nurl: bid.nurl + }); + }); + } else { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('automatad :: no valid responses to interpret'); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponse) { + return [{ + type: 'iframe', + url: 'https://rtb2.automatad.com/ortb2/async_usersync' + }]; + }, + onBidWon: function onBidWon(bid) { + if (!bid.nurl) { + return; + } + + var winCpm = bid.hasOwnProperty('originalCpm') ? bid.originalCpm : bid.cpm; + var winCurr = bid.hasOwnProperty('originalCurrency') && bid.hasOwnProperty('originalCpm') ? bid.originalCurrency : bid.currency; + var winUrl = bid.nurl.replace(/\$\{AUCTION_PRICE\}/, winCpm).replace(/\$\{AUCTION_IMP_ID\}/, bid.requestId).replace(/\$\{AUCTION_CURRENCY\}/, winCurr).replace(/\$\{AUCTION_ID\}/, bid.auctionId); + spec.ajaxCall(winUrl, null); + return true; + }, + ajaxCall: function ajaxCall(endpoint, data) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(endpoint, data); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[279]); \ No newline at end of file diff --git a/build/dist/avocetBidAdapter.js b/build/dist/avocetBidAdapter.js new file mode 100644 index 00000000000..0729f66a601 --- /dev/null +++ b/build/dist/avocetBidAdapter.js @@ -0,0 +1,161 @@ +pbjsChunk([275],{ + +/***/ 281: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(282); + + +/***/ }), + +/***/ 282: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var BIDDER_CODE = 'avct'; +var DEFAULT_BASE_URL = 'https://ads.avct.cloud'; +var DEFAULT_PREBID_PATH = '/prebid'; + +function getPrebidURL() { + var host = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('avct.baseUrl'); + + if (host && typeof host === 'string') { + return "".concat(host).concat(getPrebidPath()); + } + + return "".concat(DEFAULT_BASE_URL).concat(getPrebidPath()); +} + +function getPrebidPath() { + var prebidPath = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('avct.prebidPath'); + + if (prebidPath && typeof prebidPath === 'string') { + return prebidPath; + } + + return DEFAULT_PREBID_PATH; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + + /** + * Determines whether or not the given bid request is valid. + * + * @param {BidRequest} bid The bid with params to validate. + * @return boolean True if this is a valid bid, and false otherwise. + */ + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params && !!bid.params.placement && typeof bid.params.placement === 'string' && bid.params.placement.length === 24; + }, + + /** + * 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, bidderRequest) { + // Get currency from config + var currency = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); // Publisher domain from config + + var publisherDomain = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('publisherDomain'); // First-party data from config + + var fpd = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('fpd'); // GDPR status and TCF consent string + + var tcfConsentString; + var gdprApplies = false; + + if (bidderRequest.gdprConsent) { + tcfConsentString = bidderRequest.gdprConsent.consentString; + gdprApplies = !!bidderRequest.gdprConsent.gdprApplies; + } // US privacy string + + + var usPrivacyString; + + if (bidderRequest.uspConsent) { + usPrivacyString = bidderRequest.uspConsent; + } // Supply chain + + + var schain; + + if (bidderRequest.schain) { + schain = bidderRequest.schain; + } // ID5 identifier + + + var id5id; + + if (bidRequests[0].userId && bidRequests[0].userId.id5id) { + id5id = bidRequests[0].userId.id5id; + } // Build the avocet ext object + + + var ext = { + currency: currency, + tcfConsentString: tcfConsentString, + gdprApplies: gdprApplies, + usPrivacyString: usPrivacyString, + schain: schain, + publisherDomain: publisherDomain, + fpd: fpd, + id5id: id5id + }; // Extract properties from bidderRequest + + var auctionId = bidderRequest.auctionId, + auctionStart = bidderRequest.auctionStart, + bidderCode = bidderRequest.bidderCode, + bidderRequestId = bidderRequest.bidderRequestId, + refererInfo = bidderRequest.refererInfo, + timeout = bidderRequest.timeout; // Construct payload + + var payload = JSON.stringify({ + auctionId: auctionId, + auctionStart: auctionStart, + bidderCode: bidderCode, + bidderRequestId: bidderRequestId, + refererInfo: refererInfo, + timeout: timeout, + bids: bidRequests, + ext: ext + }); + return { + method: 'POST', + url: getPrebidURL(), + data: payload + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + if (!serverResponse || !serverResponse.body || _typeof(serverResponse.body) !== 'object') { + return []; + } + + if (Array.isArray(serverResponse.body)) { + return serverResponse.body; + } + + if (Array.isArray(serverResponse.body.responses)) { + return serverResponse.body.responses; + } + + return []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[281]); \ No newline at end of file diff --git a/build/dist/beachfrontBidAdapter.js b/build/dist/beachfrontBidAdapter.js new file mode 100644 index 00000000000..be84e3ac56b --- /dev/null +++ b/build/dist/beachfrontBidAdapter.js @@ -0,0 +1,486 @@ +pbjsChunk([274],{ + +/***/ 283: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(284); + + +/***/ }), + +/***/ 284: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_ENDPOINT", function() { return VIDEO_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BANNER_ENDPOINT", function() { return BANNER_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OUTSTREAM_SRC", function() { return OUTSTREAM_SRC; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_TARGETING", function() { return VIDEO_TARGETING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_MIMES", function() { return DEFAULT_MIMES; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js__); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + +var ADAPTER_VERSION = '1.11'; +var ADAPTER_NAME = 'BFIO_PREBID'; +var OUTSTREAM = 'outstream'; +var VIDEO_ENDPOINT = 'https://reachms.bfmio.com/bid.json?exchange_id='; +var BANNER_ENDPOINT = 'https://display.bfmio.com/prebid_display'; +var OUTSTREAM_SRC = 'https://player-cdn.beachfrontmedia.com/playerapi/loader/outstream.js'; +var VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'placement']; +var DEFAULT_MIMES = ['video/mp4', 'application/javascript']; +var appId = ''; +var spec = { + code: 'beachfront', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(isVideoBidValid(bid) || isBannerBidValid(bid)); + }, + buildRequests: function buildRequests(bids, bidderRequest) { + var requests = []; + var videoBids = bids.filter(function (bid) { + return isVideoBidValid(bid); + }); + var bannerBids = bids.filter(function (bid) { + return isBannerBidValid(bid); + }); + videoBids.forEach(function (bid) { + appId = getVideoBidParam(bid, 'appId'); + requests.push({ + method: 'POST', + url: VIDEO_ENDPOINT + appId, + data: createVideoRequestData(bid, bidderRequest), + bidRequest: bid + }); + }); + + if (bannerBids.length) { + appId = getBannerBidParam(bannerBids[0], 'appId'); + requests.push({ + method: 'POST', + url: BANNER_ENDPOINT, + data: createBannerRequestData(bannerBids, bidderRequest), + 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("No valid video bids from ".concat(spec.code, " bidder")); + return []; + } + + var sizes = getVideoSizes(bidRequest); + var firstSize = getFirstSize(sizes); + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.context'); + return { + requestId: bidRequest.bidId, + bidderCode: spec.code, + vastUrl: response.url, + vastXml: response.vast, + cpm: response.bidPrice, + width: firstSize.w, + height: firstSize.h, + creativeId: response.crid || response.cmpId, + renderer: context === OUTSTREAM ? createRenderer(bidRequest) : null, + mediaType: __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */], + currency: 'USD', + netRevenue: true, + ttl: 300 + }; + } else { + if (!response || !response.length) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("No valid banner bids from ".concat(spec.code, " bidder")); + return []; + } + + return response.filter(function (bid) { + return bid.adm; + }).map(function (bid) { + var request = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___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: __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */], + currency: 'USD', + netRevenue: true, + ttl: 300 + }; + }); + } + }, + getUserSyncs: function getUserSyncs(syncOptions) { + var serverResponses = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var gdprConsent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var uspConsent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; + var syncs = []; + var gdprApplies = gdprConsent.gdprApplies, + _gdprConsent$consentS = gdprConsent.consentString, + consentString = _gdprConsent$consentS === void 0 ? '' : _gdprConsent$consentS; + var bannerResponse = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(serverResponses, function (res) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](res.body); + }); + + if (bannerResponse) { + if (syncOptions.iframeEnabled) { + bannerResponse.body.filter(function (bid) { + return bid.sync; + }).forEach(function (bid) { + syncs.push({ + type: 'iframe', + url: bid.sync + }); + }); + } + } else if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: "https://sync.bfmio.com/sync_iframe?ifg=1&id=".concat(appId, "&gdpr=").concat(gdprApplies ? 1 : 0, "&gc=").concat(consentString, "&gce=1&us_privacy=").concat(uspConsent) + }); + } else if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: "https://sync.bfmio.com/syncb?pid=144&id=".concat(appId, "&gdpr=").concat(gdprApplies ? 1 : 0, "&gc=").concat(consentString, "&gce=1&us_privacy=").concat(uspConsent) + }); + } + + return syncs; + } +}; + +function createRenderer(bidRequest) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: bidRequest.bidId, + url: OUTSTREAM_SRC, + loaded: false + }); + renderer.setRender(function (bid) { + bid.renderer.push(function () { + window.Beachfront.Player(bid.adUnitCode, { + adTagUrl: bid.vastUrl, + width: bid.width, + height: bid.height, + expandInView: getPlayerBidParam(bidRequest, 'expandInView', false), + collapseOnComplete: getPlayerBidParam(bidRequest, 'collapseOnComplete', true), + progressColor: getPlayerBidParam(bidRequest, 'progressColor'), + adPosterColor: getPlayerBidParam(bidRequest, 'adPosterColor') + }); + }); + }); + return renderer; +} + +function getFirstSize(sizes) { + return sizes && sizes.length ? sizes[0] : { + w: undefined, + h: undefined + }; +} + +function parseSizes(sizes) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](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 getVideoSizes(bid) { + return parseSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize') || bid.sizes); +} + +function getBannerSizes(bid) { + return parseSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') || bid.sizes); +} + +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 = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___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 __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} + +function isBannerBid(bid) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner') || !isVideoBid(bid); +} + +function getVideoBidParam(bid, key) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.' + key) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.' + key); +} + +function getBannerBidParam(bid, key) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.banner.' + key) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.' + key); +} + +function getPlayerBidParam(bid, key, defaultValue) { + var param = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.player.' + key); + return param === undefined ? defaultValue : param; +} + +function isVideoBidValid(bid) { + return isVideoBid(bid) && getVideoBidParam(bid, 'appId') && getVideoBidParam(bid, 'bidfloor'); +} + +function isBannerBidValid(bid) { + return isBannerBid(bid) && getBannerBidParam(bid, 'appId') && getBannerBidParam(bid, 'bidfloor'); +} + +function getTopWindowLocation(bidderRequest) { + var url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('pageUrl') || url, { + decodeSearchAsString: true + }); +} + +function getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return ''; + } +} + +function getVideoTargetingParams(bid) { + return Object.keys(Object(bid.params.video)).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).reduce(function (obj, param) { + obj[param] = bid.params.video[param]; + return obj; + }, {}); +} + +function createVideoRequestData(bid, bidderRequest) { + var sizes = getVideoSizes(bid); + var firstSize = getFirstSize(sizes); + var video = getVideoTargetingParams(bid); + var appId = getVideoBidParam(bid, 'appId'); + var bidfloor = getVideoBidParam(bid, 'bidfloor'); + var tagid = getVideoBidParam(bid, 'tagid'); + var topLocation = getTopWindowLocation(bidderRequest); + var payload = { + isPrebid: true, + appId: appId, + domain: document.location.hostname, + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: [{ + video: _extends({ + w: firstSize.w, + h: firstSize.h, + mimes: DEFAULT_MIMES + }, video), + bidfloor: bidfloor, + tagid: tagid, + secure: topLocation.protocol.indexOf('https') === 0 ? 1 : 0, + displaymanager: ADAPTER_NAME, + displaymanagerver: ADAPTER_VERSION + }], + site: { + page: topLocation.href, + domain: topLocation.hostname + }, + device: { + ua: navigator.userAgent, + language: navigator.language, + devicetype: isMobile() ? 1 : isConnectedTV() ? 3 : 2, + dnt: getDoNotTrack() ? 1 : 0, + js: 1, + geo: {} + }, + regs: { + ext: {} + }, + user: { + ext: {} + }, + cur: ['USD'] + }; + + if (bidderRequest && bidderRequest.uspConsent) { + payload.regs.ext.us_privacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + var _bidderRequest$gdprCo = bidderRequest.gdprConsent, + gdprApplies = _bidderRequest$gdprCo.gdprApplies, + consentString = _bidderRequest$gdprCo.consentString; + payload.regs.ext.gdpr = gdprApplies ? 1 : 0; + payload.user.ext.consent = consentString; + } + + if (bid.userId && bid.userId.tdid) { + payload.user.ext.eids = [{ + source: 'adserver.org', + uids: [{ + id: bid.userId.tdid, + ext: { + rtiPartner: 'TDID' + } + }] + }]; + } + + var connection = navigator.connection || navigator.webkitConnection; + + if (connection && connection.effectiveType) { + payload.device.connectiontype = connection.effectiveType; + } + + return payload; +} + +function createBannerRequestData(bids, bidderRequest) { + var topLocation = getTopWindowLocation(bidderRequest); + var topReferrer = getTopWindowReferrer(); + var slots = bids.map(function (bid) { + return { + slot: bid.adUnitCode, + id: getBannerBidParam(bid, 'appId'), + bidfloor: getBannerBidParam(bid, 'bidfloor'), + sizes: getBannerSizes(bid) + }; + }); + var payload = { + slots: slots, + page: topLocation.href, + domain: topLocation.hostname, + search: topLocation.search, + secure: topLocation.protocol.indexOf('https') === 0 ? 1 : 0, + referrer: topReferrer, + ua: navigator.userAgent, + deviceOs: getOsVersion(), + isMobile: isMobile() ? 1 : 0, + dnt: getDoNotTrack() ? 1 : 0, + adapterVersion: ADAPTER_VERSION, + adapterName: ADAPTER_NAME + }; + + if (bidderRequest && bidderRequest.uspConsent) { + payload.usPrivacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + var _bidderRequest$gdprCo2 = bidderRequest.gdprConsent, + gdprApplies = _bidderRequest$gdprCo2.gdprApplies, + consentString = _bidderRequest$gdprCo2.consentString; + payload.gdpr = gdprApplies ? 1 : 0; + payload.gdprConsent = consentString; + } + + if (bids[0] && bids[0].userId && bids[0].userId.tdid) { + payload.tdid = bids[0].userId.tdid; + } + + return payload; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[283]); \ No newline at end of file diff --git a/build/dist/betweenBidAdapter.js b/build/dist/betweenBidAdapter.js new file mode 100644 index 00000000000..bcf7e4d6243 --- /dev/null +++ b/build/dist/betweenBidAdapter.js @@ -0,0 +1,221 @@ +pbjsChunk([273],{ + +/***/ 285: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(286); + + +/***/ }), + +/***/ 286: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var BIDDER_CODE = 'between'; +var spec = { + code: BIDDER_CODE, + aliases: ['btw'], + supportedMediaTypes: ['banner'], + + /** + * 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 Boolean(bid.params.s); + }, + + /** + * 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 requests = []; + var gdprConsent = bidderRequest && bidderRequest.gdprConsent; + validBidRequests.forEach(function (i) { + var params = { + sizes: Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["parseSizesInput"])(Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getAdUnitSizes"])(i)).join('%2C'), + jst: 'hb', + ord: Math.random() * 10000000000000000, + tz: getTz(), + fl: getFl(), + rr: getRr(), + s: i.params.s, + bidid: i.bidId, + transactionid: i.transactionId, + auctionid: i.auctionId + }; + + if (i.params.itu !== undefined) { + params.itu = i.params.itu; + } + + if (i.params.cur !== undefined) { + params.cur = i.params.cur; + } + + if (i.params.subid !== undefined) { + params.subid = i.params.subid; + } + + if (i.params.click3rd !== undefined) { + params.click3rd = i.params.click3rd; + } + + if (i.params.pubdata !== undefined) { + for (var key in i.params.pubdata) { + params['pubside_macro[' + key + ']'] = encodeURIComponent(i.params.pubdata[key]); + } + } + + if (gdprConsent) { + if (typeof gdprConsent.gdprApplies !== 'undefined') { + params.gdprApplies = !!gdprConsent.gdprApplies; + } + + if (typeof gdprConsent.consentString !== 'undefined') { + params.consentString = gdprConsent.consentString; + } + } + + requests.push({ + method: 'GET', + url: 'https://ads.betweendigital.com/adjson', + data: params + }); + }); + return requests; + }, + + /** + * 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 = []; + + for (var i = 0; i < serverResponse.body.length; i++) { + var bidResponse = { + requestId: serverResponse.body[i].bidid, + cpm: serverResponse.body[i].cpm || 0, + width: serverResponse.body[i].w, + height: serverResponse.body[i].h, + ttl: serverResponse.body[i].ttl, + creativeId: serverResponse.body[i].creativeid, + currency: serverResponse.body[i].currency || 'RUB', + netRevenue: serverResponse.body[i].netRevenue || true, + ad: serverResponse.body[i].ad + }; + bidResponses.push(bidResponse); + } + + 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 = []; + /* console.log(syncOptions,serverResponses) + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: 'https://acdn.adnxs.com/dmp/async_usersync.html' + }); + } + if (syncOptions.pixelEnabled && serverResponses.length > 0) { + syncs.push({ + type: 'image', + url: serverResponses[0].body.userSync.url + }); + } */ + // syncs.push({ + // type: 'iframe', + // url: 'https://acdn.adnxs.com/dmp/async_usersync.html' + // }); + + syncs.push({ + type: 'iframe', + url: 'https://ads.betweendigital.com/sspmatch-iframe' + }); + return syncs; + } +}; + +function getRr() { + try { + var td = top.document; + var rr = td.referrer; + } catch (err) { + return false; + } + + if (typeof rr != 'undefined' && rr.length > 0) { + return encodeURIComponent(rr); + } else if (typeof rr != 'undefined' && rr == '') { + return 'direct'; + } +} + +function getFl() { + if (navigator.plugins !== undefined && navigator.plugins !== null) { + if (navigator.plugins['Shockwave Flash'] !== undefined && navigator.plugins['Shockwave Flash'] !== null && _typeof(navigator.plugins['Shockwave Flash']) === 'object') { + var description = navigator.plugins['Shockwave Flash'].description; + + if (description && !(navigator.mimeTypes !== undefined && navigator.mimeTypes['application/x-shockwave-flash'] && !navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin)) { + description = description.replace(/^.*\s+(\S+\s+\S+$)/, '$1').replace(/^(.*)\..*$/, '$1'); + return parseInt(description, 10); + } + } + } + + return 0; +} + +function getTz() { + return new Date().getTimezoneOffset(); +} +/* +function get_pubdata(adds) { + if (adds !== undefined && adds.pubdata !== undefined) { + let index = 0; + let url = ''; + for(var key in adds.pubdata) { + if (index == 0) { + url = url + encodeURIComponent('pubside_macro[' + key + ']') + '=' + encodeURIComponent(adds.pubdata[key]); + index++; + } else { + url = url + '&' + encodeURIComponent('pubside_macro[' + key + ']') + '=' + encodeURIComponent(adds.pubdata[key]); + } + } + return url; + } +} +*/ + + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[285]); \ No newline at end of file diff --git a/build/dist/bidfluenceBidAdapter.js b/build/dist/bidfluenceBidAdapter.js new file mode 100644 index 00000000000..c4665b91f32 --- /dev/null +++ b/build/dist/bidfluenceBidAdapter.js @@ -0,0 +1,148 @@ +pbjsChunk([272],{ + +/***/ 287: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(288); + + +/***/ }), + +/***/ 288: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__ = __webpack_require__(9); + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'bidfluence'; + +function stdTimezoneOffset(t) { + var jan = new Date(t.getFullYear(), 0, 1); + var jul = new Date(t.getFullYear(), 6, 1); + return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()); +} + +function dst(t) { + return t.getTimezoneOffset() < stdTimezoneOffset(t); +} + +function getBdfTz(d) { + var tz = d.getTimezoneOffset(); + + if (dst(d)) { + tz += 60; + } + + return tz.toString(); +} + +function getUTCDate() { + var m = new Date(); + var dateString = m.getUTCFullYear() + '/' + ('0' + (m.getUTCMonth() + 1)).slice(-2) + '/' + ('0' + m.getUTCDate()).slice(-2) + ' ' + ('0' + m.getUTCHours()).slice(-2) + ':' + ('0' + m.getUTCMinutes()).slice(-2) + ':' + ('0' + m.getUTCSeconds()).slice(-2); + return dateString; +} + +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placementId || !!bid.params.publisherId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var body = document.getElementsByTagName('body')[0]; + var refInfo = bidderRequest.refererInfo; + var gdpr = bidderRequest.gdprConsent; + var vpW = Math.max(window.innerWidth || body.clientWidth || 0) + 2; + var vpH = Math.max(window.innerHeight || body.clientHeight || 0) + 2; + var sr = screen.height > screen.width ? screen.height + 'x' + screen.width + 'x' + screen.colorDepth : screen.width + 'x' + screen.height + 'x' + screen.colorDepth; + var payload = { + v: '2.0', + azr: true, + ck: storage.cookiesAreEnabled(), + re: refInfo ? refInfo.referer : '', + st: refInfo ? refInfo.stack : [], + tz: getBdfTz(new Date()), + sr: sr, + tm: bidderRequest.timeout, + vp: vpW + 'x' + vpH, + sdt: getUTCDate(), + top: refInfo ? refInfo.reachedTop : false, + gdpr: gdpr ? gdpr.gdprApplies : false, + gdprc: gdpr ? gdpr.consentString : '', + bids: [] + }; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bidRequest) { + var params = bidRequest.params; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.sizes)[0]; + var width = sizes.split('x')[0]; + var height = sizes.split('x')[1]; + var currentBidPayload = { + bid: bidRequest.bidId, + tid: params.placementId, + pid: params.publisherId, + rp: params.reservePrice || 0, + w: width, + h: height + }; + payload.bids.push(currentBidPayload); + }); + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: "https://bdf".concat(payload.bids[0].pid, ".bidfluence.com/Prebid"), + data: payloadString, + options: { + contentType: 'text/plain' + } + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](response.Bids, function (currentResponse) { + var cpm = currentResponse.Cpm || 0; + + if (cpm > 0) { + var bidResponse = { + requestId: currentResponse.BidId, + cpm: cpm, + width: currentResponse.Width, + height: currentResponse.Height, + creativeId: currentResponse.CreativeId, + ad: currentResponse.Ad, + currency: 'USD', + netRevenue: true, + ttl: 360 + }; + bidResponses.push(bidResponse); + } + }); + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(serverResponses) { + if (serverResponses.userSyncs) { + var syncs = serverResponses.UserSyncs.map(function (sync) { + return { + type: sync.Type === 'ifr' ? 'iframe' : 'image', + url: sync.Url + }; + }); + return syncs; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[287]); \ No newline at end of file diff --git a/build/dist/bidglassBidAdapter.js b/build/dist/bidglassBidAdapter.js new file mode 100644 index 00000000000..3226d96fcd7 --- /dev/null +++ b/build/dist/bidglassBidAdapter.js @@ -0,0 +1,153 @@ +pbjsChunk([271],{ + +/***/ 289: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(290); + + +/***/ }), + +/***/ 290: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + // import {config} from 'src/config.js'; + + +var BIDDER_CODE = 'bidglass'; +var spec = { + code: BIDDER_CODE, + aliases: ['bg'], + // 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.adUnitId && !isNaN(parseFloat(bid.params.adUnitId)) && isFinite(bid.params.adUnitId)); + }, + + /** + * 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) { + /* + Sample array entry for validBidRequests[]: + [{ + "bidder": "bidglass", + "bidId": "51ef8751f9aead", + "params": { + "adUnitId": 11, + ... + }, + "adUnitCode": "div-gpt-ad-1460505748561-0", + "transactionId": "d7b773de-ceaa-484d-89ca-d9f51b8d61ec", + "sizes": [[320,50],[300,250],[300,600]], + "bidderRequestId": "418b37f85e772c", + "auctionId": "18fd8b8b0bd757", + "bidRequestsCount": 1 + }] + */ + var imps = []; + + var getReferer = function getReferer() { + return window === window.top ? window.location.href : window.parent === window.top ? document.referrer : null; + }; + + var getOrigins = function getOrigins() { + var ori = ['https://' + window.location.hostname]; + + if (window.location.ancestorOrigins) { + for (var i = 0; i < window.location.ancestorOrigins.length; i++) { + ori.push(window.location.ancestorOrigins[i]); + } + } else if (window !== window.top) { + // Derive the parent origin + var parts = document.referrer.split('/'); + ori.push('https://' + parts[2]); + + if (window.parent !== window.top) { + // Additional unknown origins exist + ori.push('null'); + } + } + + return ori; + }; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + bid.sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.sizes) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.sizes[0]) ? bid.sizes : [bid.sizes]; + bid.sizes = bid.sizes.filter(function (size) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size); + }); // Stuff to send: [bid id, sizes, adUnitId] + + imps.push({ + bidId: bid.bidId, + sizes: bid.sizes, + adUnitId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('adUnitId', bid.params) + }); + }); // Stuff to send: page URL + + + var bidReq = { + reqId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imps: imps, + ref: getReferer(), + ori: getOrigins() + }; + var url = 'https://bid.glass/ad/hb.php?' + "src=Genius_prebid_4.2.0"; + return { + method: 'POST', + url: url, + data: JSON.stringify(bidReq), + options: { + contentType: 'text/plain', + withCredentials: false + } + }; + }, + + /** + * 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) { + var bidResponses = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body.bidResponses, function (bid) { + bidResponses.push({ + requestId: bid.requestId, + cpm: parseFloat(bid.cpm), + width: parseInt(bid.width, 10), + height: parseInt(bid.height, 10), + creativeId: bid.creativeId, + dealId: bid.dealId || null, + currency: bid.currency || 'USD', + mediaType: bid.mediaType || 'banner', + netRevenue: true, + ttl: bid.ttl || 10, + ad: bid.ad + }); + }); + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[289]); \ No newline at end of file diff --git a/build/dist/bidlabBidAdapter.js b/build/dist/bidlabBidAdapter.js new file mode 100644 index 00000000000..004669dbd01 --- /dev/null +++ b/build/dist/bidlabBidAdapter.js @@ -0,0 +1,143 @@ +pbjsChunk([270],{ + +/***/ 291: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(292); + + +/***/ }), + +/***/ 292: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'bidlab'; +var AD_URL = 'https://service.bidlab.ai/?c=o&m=multi'; +var URL_SYNC = 'https://service.bidlab.ai/?c=o&m=sync'; +var NO_SYNC = true; + +function isBidResponseValid(bid) { + if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { + return false; + } + + switch (bid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + return Boolean(bid.native && bid.native.title && bid.native.image && bid.native.impressionTrackers); + + default: + return false; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + noSync: NO_SYNC, + isBidRequestValid: function isBidRequestValid(bid) { + return Boolean(bid.bidId && bid.params && !isNaN(parseInt(bid.params.placementId))); + }, + buildRequests: function buildRequests() { + var validBidRequests = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var bidderRequest = arguments.length > 1 ? arguments[1] : undefined; + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + var placements = []; + var request = { + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'language': navigator && navigator.language ? navigator.language.split('-')[0] : '', + 'secure': 1, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + request.language.indexOf('-') != -1 && (request.language = request.language.split('-')[0]); + + if (bidderRequest) { + if (bidderRequest.uspConsent) { + request.ccpa = bidderRequest.uspConsent; + } + + if (bidderRequest.gdprConsent) { + request.gdpr = bidderRequest.gdprConsent; + } + } + + var len = validBidRequests.length; + + for (var i = 0; i < len; i++) { + var bid = validBidRequests[i]; + var traff = bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + placements.push({ + placementId: bid.params.placementId, + bidId: bid.bidId, + sizes: bid.mediaTypes && bid.mediaTypes[traff] && bid.mediaTypes[traff].sizes ? bid.mediaTypes[traff].sizes : [], + traffic: traff + }); + + if (bid.schain) { + placements.schain = bid.schain; + } + } + + return { + method: 'POST', + url: AD_URL, + data: request + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var response = []; + + for (var i = 0; i < serverResponse.body.length; i++) { + var resItem = serverResponse.body[i]; + + if (isBidResponseValid(resItem)) { + response.push(resItem); + } + } + + return response; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (NO_SYNC) { + return false; + } else { + return [{ + type: 'image', + url: URL_SYNC + }]; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[291]); \ No newline at end of file diff --git a/build/dist/bidphysicsBidAdapter.js b/build/dist/bidphysicsBidAdapter.js new file mode 100644 index 00000000000..1376ac00ac3 --- /dev/null +++ b/build/dist/bidphysicsBidAdapter.js @@ -0,0 +1,167 @@ +pbjsChunk([269],{ + +/***/ 293: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(294); + + +/***/ }), + +/***/ 294: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var ENDPOINT_URL = 'https://exchange.bidphysics.com/auction'; +var DEFAULT_BID_TTL = 30; +var DEFAULT_CURRENCY = 'USD'; +var DEFAULT_NET_REVENUE = true; +var spec = { + code: 'bidphysics', + aliases: ['yieldlift'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.unitId && typeof bid.params.unitId === 'string' || !!bid.params.networkId && typeof bid.params.networkId === 'string' || !!bid.params.publisherId && typeof bid.params.publisherId === 'string'; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (!validBidRequests || !bidderRequest) { + return; + } + + var publisherId = validBidRequests[0].params.publisherId; + var networkId = validBidRequests[0].params.networkId; + var impressions = validBidRequests.map(function (bidRequest) { + return { + id: bidRequest.bidId, + banner: { + format: bidRequest.sizes.map(function (sizeArr) { + return { + w: sizeArr[0], + h: sizeArr[1] + }; + }) + }, + ext: { + bidphysics: { + unitId: bidRequest.params.unitId + } + } + }; + }); + var openrtbRequest = { + id: bidderRequest.auctionId, + imp: impressions, + site: { + domain: window.location.hostname, + page: window.location.href, + ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null + }, + ext: { + bidphysics: { + publisherId: publisherId, + networkId: networkId + } + } + }; // apply gdpr + + if (bidderRequest.gdprConsent) { + openrtbRequest.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0 + } + }; + openrtbRequest.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + } + + var payloadString = JSON.stringify(openrtbRequest); + return { + method: 'POST', + url: ENDPOINT_URL, + data: payloadString + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidResponses = []; + var response = (serverResponse || {}).body; // response is always one seat (bidphysics) with (optional) bids for each impression + + if (response && response.seatbid && response.seatbid.length === 1 && response.seatbid[0].bid && response.seatbid[0].bid.length) { + response.seatbid[0].bid.forEach(function (bid) { + bidResponses.push({ + requestId: bid.impid, + cpm: bid.price, + width: bid.w, + height: bid.h, + ad: bid.adm, + ttl: DEFAULT_BID_TTL, + creativeId: bid.crid, + netRevenue: DEFAULT_NET_REVENUE, + currency: DEFAULT_CURRENCY + }); + }); + } else { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('bidphysics.interpretResponse :: no valid responses to interpret'); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('bidphysics.getUserSyncs', 'syncOptions', syncOptions, 'serverResponses', serverResponses); + var syncs = []; + + if (!syncOptions.iframeEnabled && !syncOptions.pixelEnabled) { + return syncs; + } + + serverResponses.forEach(function (resp) { + var userSync = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](resp, 'body.ext.usersync'); + + if (userSync) { + var syncDetails = []; + Object.keys(userSync).forEach(function (key) { + var value = userSync[key]; + + if (value.syncs && value.syncs.length) { + syncDetails = syncDetails.concat(value.syncs); + } + }); + syncDetails.forEach(function (syncDetails) { + syncs.push({ + type: syncDetails.type === 'iframe' ? 'iframe' : 'image', + url: syncDetails.url + }); + }); + + if (!syncOptions.iframeEnabled) { + syncs = syncs.filter(function (s) { + return s.type !== 'iframe'; + }); + } + + if (!syncOptions.pixelEnabled) { + syncs = syncs.filter(function (s) { + return s.type !== 'image'; + }); + } + } + }); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('bidphysics.getUserSyncs result=%o', syncs); + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[293]); \ No newline at end of file diff --git a/build/dist/bluebillywigBidAdapter.js b/build/dist/bluebillywigBidAdapter.js new file mode 100644 index 00000000000..b4e6a1e2d81 --- /dev/null +++ b/build/dist/bluebillywigBidAdapter.js @@ -0,0 +1,589 @@ +pbjsChunk([38],{ + +/***/ 295: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(296); + + +/***/ }), + +/***/ 296: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BB_HELPERS", function() { return BB_HELPERS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__userId_eids_js__ = __webpack_require__(44); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + +var DEV_MODE = window.location.search.match(/bbpbs_debug=true/); // Blue Billywig Constants + +var BB_CONSTANTS = { + BIDDER_CODE: 'bluebillywig', + AUCTION_URL: '$$URL_STARTpbs.bluebillywig.com/openrtb2/auction?pub=$$PUBLICATION', + SYNC_URL: '$$URL_STARTpbs.bluebillywig.com/static/cookie-sync.html?pub=$$PUBLICATION', + RENDERER_URL: 'https://$$PUBLICATION.bbvms.com/r/$$RENDERER.js', + DEFAULT_TIMEOUT: 5000, + DEFAULT_TTL: 300, + DEFAULT_WIDTH: 768, + DEFAULT_HEIGHT: 432, + DEFAULT_NET_REVENUE: true +}; // Aliasing + +var getConfig = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig; // Helper Functions + +var BB_HELPERS = { + addSiteAppDevice: function addSiteAppDevice(request, pageUrl) { + if (!request) return; + if (_typeof(getConfig('app')) === 'object') request.app = getConfig('app');else { + request.site = {}; + if (_typeof(getConfig('site')) === 'object') request.site = getConfig('site'); + if (pageUrl) request.site.page = pageUrl; + } + if (_typeof(getConfig('device')) === 'object') request.device = getConfig('device'); + if (!request.device) request.device = {}; + if (!request.device.w) request.device.w = window.innerWidth; + if (!request.device.h) request.device.h = window.innerHeight; + }, + addSchain: function addSchain(request, validBidRequests) { + if (!request) return; + var schain = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests, '0.schain'); + if (schain) request.source.ext = { + schain: schain + }; + }, + addCurrency: function addCurrency(request) { + if (!request) return; + var adServerCur = getConfig('currency.adServerCurrency'); + if (adServerCur && typeof adServerCur === 'string') request.cur = [adServerCur];else if (Array.isArray(adServerCur) && adServerCur.length) request.cur = [adServerCur[0]]; + }, + addUserIds: function addUserIds(request, validBidRequests) { + if (!request) return; + var bidUserId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests, '0.userId'); + var eids = Object(__WEBPACK_IMPORTED_MODULE_5__userId_eids_js__["a" /* createEidsArray */])(bidUserId); + + if (eids.length) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'user.ext.eids', eids); + } + }, + addDigiTrust: function addDigiTrust(request, bidRequests) { + var digiTrust = BB_HELPERS.getDigiTrustParams(bidRequests && bidRequests[0]); + if (digiTrust) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'user.ext.digitrust', digiTrust); + }, + substituteUrl: function substituteUrl(url, publication, renderer) { + return url.replace('$$URL_START', DEV_MODE ? 'https://dev.' : 'https://').replace('$$PUBLICATION', publication).replace('$$RENDERER', renderer); + }, + getAuctionUrl: function getAuctionUrl(publication) { + return BB_HELPERS.substituteUrl(BB_CONSTANTS.AUCTION_URL, publication); + }, + getSyncUrl: function getSyncUrl(publication) { + return BB_HELPERS.substituteUrl(BB_CONSTANTS.SYNC_URL, publication); + }, + getRendererUrl: function getRendererUrl(publication, renderer) { + return BB_HELPERS.substituteUrl(BB_CONSTANTS.RENDERER_URL, publication, renderer); + }, + getDigiTrustParams: function getDigiTrustParams(bidRequest) { + var digiTrustId = BB_HELPERS.getDigiTrustId(bidRequest); + if (!digiTrustId || digiTrustId.privacy && digiTrustId.privacy.optout) return null; + return { + id: digiTrustId.id, + keyv: digiTrustId.keyv + }; + }, + getDigiTrustId: function getDigiTrustId(bidRequest) { + var bidRequestDigiTrust = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'userId.digitrustid.data'); + if (bidRequestDigiTrust) return bidRequestDigiTrust; + var digiTrustUser = getConfig('digiTrustId'); + return digiTrustUser && digiTrustUser.success && digiTrustUser.identity || null; + }, + transformRTBToPrebidProps: function transformRTBToPrebidProps(bid, serverResponse) { + bid.cpm = bid.price; + delete bid.price; + bid.bidId = bid.impid; + bid.requestId = bid.impid; + delete bid.impid; + bid.width = bid.w || BB_CONSTANTS.DEFAULT_WIDTH; + bid.height = bid.h || BB_CONSTANTS.DEFAULT_HEIGHT; + + if (bid.adm) { + bid.ad = bid.adm; + bid.vastXml = bid.adm; + delete bid.adm; + } + + if (bid.nurl && !bid.adm) { + // ad markup is on win notice url, and adm is ommited according to OpenRTB 2.5 + bid.vastUrl = bid.nurl; + delete bid.nurl; + } + + bid.netRevenue = BB_CONSTANTS.DEFAULT_NET_REVENUE; + bid.creativeId = bid.crid; + delete bid.crid; + bid.currency = serverResponse.cur; + bid.ttl = BB_CONSTANTS.DEFAULT_TTL; + } +}; // Renderer Functions + +var BB_RENDERER = { + bootstrapPlayer: function bootstrapPlayer(bid) { + var config = { + code: bid.adUnitCode + }; + if (bid.vastXml) config.vastXml = bid.vastXml;else if (bid.vastUrl) config.vastUrl = bid.vastUrl; + + if (!bid.vastXml && !bid.vastUrl) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": No vastXml or vastUrl on bid, bailing...")); + return; + } + + var rendererId = BB_RENDERER.getRendererId(bid.publicationName, bid.rendererCode); + var ele = document.getElementById(bid.adUnitCode); // NB convention + + var renderer; + + for (var rendererIndex = 0; rendererIndex < window.bluebillywig.renderers.length; rendererIndex++) { + if (window.bluebillywig.renderers[rendererIndex]._id === rendererId) { + renderer = window.bluebillywig.renderers[rendererIndex]; + break; + } + } + + if (renderer) renderer.bootstrap(config, ele);else __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": Couldn't find a renderer with ").concat(rendererId)); + }, + newRenderer: function newRenderer(rendererUrl, adUnitCode) { + var renderer = __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__["a" /* Renderer */].install({ + url: rendererUrl, + loaded: false, + adUnitCode: adUnitCode + }); + + try { + renderer.setRender(BB_RENDERER.outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": Error tying to setRender on renderer"), err); + } + + return renderer; + }, + outstreamRender: function outstreamRender(bid) { + bid.renderer.push(function () { + BB_RENDERER.bootstrapPlayer(bid); + }); + }, + getRendererId: function getRendererId(pub, renderer) { + return "".concat(pub, "-").concat(renderer); // NB convention! + } +}; // Spec Functions +// These functions are used to construct the core spec for the adapter + +var spec = { + code: BB_CONSTANTS.BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + syncStore: { + bidders: [] + }, + isBidRequestValid: function isBidRequestValid(bid) { + var publicationNameRegex = /^\w+\.?\w+$/; + var rendererRegex = /^[\w+_]+$/; + + if (!bid.params) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": no params set on bid. Rejecting bid: "), bid); + return false; + } + + if (!bid.params.hasOwnProperty('publicationName') || typeof bid.params.publicationName !== 'string') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": no publicationName specified in bid params, or it's not a string. Rejecting bid: "), bid); + return false; + } else if (!publicationNameRegex.test(bid.params.publicationName)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": publicationName must be in format 'publication' or 'publication.environment'. Rejecting bid: "), bid); + return false; + } + + if (!bid.params.hasOwnProperty('rendererCode') || typeof bid.params.rendererCode !== 'string') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": no rendererCode was specified in bid params. Rejecting bid: "), bid); + return false; + } else if (!rendererRegex.test(bid.params.rendererCode)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": rendererCode must be alphanumeric, including underscores. Rejecting bid: "), bid); + return false; + } + + if (!bid.params.accountId) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": no accountId specified in bid params. Rejecting bid: "), bid); + return false; + } + + if (bid.params.hasOwnProperty('connections')) { + if (!Array.isArray(bid.params.connections)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": connections is not of type array. Rejecting bid: "), bid); + return false; + } else { + for (var connectionIndex = 0; connectionIndex < bid.params.connections.length; connectionIndex++) { + var connection = bid.params.connections[connectionIndex]; + + if (!bid.params.hasOwnProperty(connection)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": connection specified in params.connections, but not configured in params. Rejecting bid: "), bid); + return false; + } + } + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": no connections specified in bid. Rejecting bid: "), bid); + return false; + } + + if (bid.hasOwnProperty('mediaTypes') && bid.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */])) { + if (!bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]].hasOwnProperty('context')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": no context specified in bid. Rejecting bid: "), bid); + return false; + } + + if (bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]].context !== 'outstream') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": video.context is invalid, must be \"outstream\". Rejecting bid: "), bid); + return false; + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(BB_CONSTANTS.BIDDER_CODE, ": mediaTypes or mediaTypes.video is not specified. Rejecting bid: "), bid); + return false; + } + + return true; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var _this2 = this; + + var imps = []; + + var _loop = function _loop(validBidRequestIndex) { + var validBidRequest = validBidRequests[validBidRequestIndex]; + var _this = _this2; + var ext = validBidRequest.params.connections.reduce(function (extBuilder, connection) { + extBuilder[connection] = validBidRequest.params[connection]; + if (_this.syncStore.bidders.indexOf(connection) === -1) _this.syncStore.bidders.push(connection); + return extBuilder; + }, {}); + imps.push({ + id: validBidRequest.bidId, + ext: ext, + secure: window.location.protocol === 'https' ? 1 : 0, + video: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequest, 'mediaTypes.video') + }); + }; + + for (var validBidRequestIndex = 0; validBidRequestIndex < validBidRequests.length; validBidRequestIndex++) { + _loop(validBidRequestIndex); + } + + var request = { + id: bidderRequest.auctionId, + source: { + tid: bidderRequest.auctionId + }, + tmax: BB_CONSTANTS.DEFAULT_TIMEOUT, + imp: imps, + test: DEV_MODE ? 1 : 0, + ext: { + prebid: { + targeting: { + includewinners: true, + includebidderkeys: false + } + } + } + }; // handle privacy settings for GDPR/CCPA/COPPA + + if (bidderRequest.gdprConsent) { + var gdprApplies = 0; + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') gdprApplies = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'regs.ext.gdpr', gdprApplies); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'regs.ext.us_privacy', bidderRequest.uspConsent); + this.syncStore.uspConsent = bidderRequest.uspConsent; + } + + if (getConfig('coppa') == true) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'regs.coppa', 1); // Enrich the request with any external data we may have + + BB_HELPERS.addSiteAppDevice(request, bidderRequest.refererInfo && bidderRequest.refererInfo.referer); + BB_HELPERS.addSchain(request, validBidRequests); + BB_HELPERS.addCurrency(request); + BB_HELPERS.addUserIds(request, validBidRequests); + BB_HELPERS.addDigiTrust(request, validBidRequests); + return { + method: 'POST', + url: BB_HELPERS.getAuctionUrl(validBidRequests[0].params.publicationName), + data: JSON.stringify(request), + bidderRequest: bidderRequest + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + serverResponse = serverResponse.body || {}; + + if (!serverResponse.hasOwnProperty('seatbid') || !Array.isArray(serverResponse.seatbid)) { + return []; + } + + var bids = []; + + for (var seatbidIndex = 0; seatbidIndex < serverResponse.seatbid.length; seatbidIndex++) { + var seatbid = serverResponse.seatbid[seatbidIndex]; + if (!seatbid.bid || !Array.isArray(seatbid.bid)) continue; + + for (var bidIndex = 0; bidIndex < seatbid.bid.length; bidIndex++) { + var bid = seatbid.bid[bidIndex]; + BB_HELPERS.transformRTBToPrebidProps(bid, serverResponse); + var bidParams = void 0; + + for (var bidderRequestBidsIndex = 0; bidderRequestBidsIndex < request.bidderRequest.bids.length; bidderRequestBidsIndex++) { + if (request.bidderRequest.bids[bidderRequestBidsIndex].bidId === bid.bidId) { + bidParams = request.bidderRequest.bids[bidderRequestBidsIndex].params; + } + } + + if (bidParams) { + bid.publicationName = bidParams.publicationName; + bid.rendererCode = bidParams.rendererCode; + bid.accountId = bidParams.accountId; + } + + var rendererUrl = BB_HELPERS.getRendererUrl(bid.publicationName, bid.rendererCode); + bid.renderer = BB_RENDERER.newRenderer(rendererUrl, bid.adUnitCode); + bids.push(bid); + } + } + + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdpr) { + if (!serverResponses || !serverResponses.length) return []; + if (!syncOptions.iframeEnabled) return []; + var queryString = []; + var accountId; + var publication; + var serverResponse = serverResponses[0]; + if (!serverResponse.body || !serverResponse.body.seatbid) return []; + + for (var seatbidIndex = 0; seatbidIndex < serverResponse.body.seatbid.length; seatbidIndex++) { + var seatbid = serverResponse.body.seatbid[seatbidIndex]; + + for (var bidIndex = 0; bidIndex < seatbid.bid.length; bidIndex++) { + var bid = seatbid.bid[bidIndex]; + accountId = bid.accountId || null; + publication = bid.publicationName || null; + if (publication && accountId) break; + } + + if (publication && accountId) break; + } + + if (!publication || !accountId) return []; + if (gdpr.gdprApplies) queryString.push("gdpr=".concat(gdpr.gdprApplies ? 1 : 0)); + if (gdpr.gdprApplies && gdpr.consentString) queryString.push("gdpr_consent=".concat(gdpr.consentString)); + if (this.syncStore.uspConsent) queryString.push("usp_consent=".concat(this.syncStore.uspConsent)); + queryString.push("accountId=".concat(accountId)); + queryString.push("bidders=".concat(btoa(JSON.stringify(this.syncStore.bidders)))); + queryString.push("cb=".concat(Date.now(), "-").concat(Math.random().toString().replace('.', ''))); + if (DEV_MODE) queryString.push('bbpbs_debug=true'); // NB syncUrl by default starts with ?pub=$$PUBLICATION + + var syncUrl = "".concat(BB_HELPERS.getSyncUrl(publication), "&").concat(queryString.join('&')); + return [{ + type: 'iframe', + url: syncUrl + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }), + +/***/ 44: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = createEidsArray; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); + // Each user-id sub-module is expected to mention respective config here + +var USER_IDS_CONFIG = { + // key-name : {config} + // intentIqId + 'intentIqId': { + source: 'intentiq.com', + atype: 1 + }, + // pubCommonId + 'pubcid': { + source: 'pubcid.org', + atype: 1 + }, + // unifiedId + 'tdid': { + source: 'adserver.org', + atype: 1, + getUidExt: function getUidExt() { + return { + rtiPartner: 'TDID' + }; + } + }, + // id5Id + 'id5id': { + source: 'id5-sync.com', + atype: 1 + }, + // parrableId + 'parrableId': { + source: 'parrable.com', + atype: 1, + getValue: function getValue(parrableId) { + if (parrableId.eid) { + return parrableId.eid; + } + + if (parrableId.ccpaOptout) { + // If the EID was suppressed due to a non consenting ccpa optout then + // we still wish to provide this as a reason to the adapters + return ''; + } + + return null; + }, + getUidExt: function getUidExt(parrableId) { + var extendedData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["pick"](parrableId, ['ibaOptout', 'ccpaOptout']); + + if (Object.keys(extendedData).length) { + return extendedData; + } + } + }, + // identityLink + 'idl_env': { + source: 'liveramp.com', + atype: 1 + }, + // liveIntentId + 'lipb': { + getValue: function getValue(data) { + return data.lipbid; + }, + source: 'liveintent.com', + atype: 1, + getEidExt: function getEidExt(data) { + if (Array.isArray(data.segments) && data.segments.length) { + return { + segments: data.segments + }; + } + } + }, + // britepoolId + 'britepoolid': { + source: 'britepool.com', + atype: 1 + }, + // lotamePanoramaId + lotamePanoramaId: { + source: 'crwdcntrl.net', + atype: 1 + }, + // criteo + 'criteoId': { + source: 'criteo.com', + atype: 1 + }, + // NetId + 'netId': { + source: 'netid.de', + atype: 1 + }, + // sharedid + 'sharedid': { + source: 'sharedid.org', + atype: 1, + getValue: function getValue(data) { + return data.id; + }, + getUidExt: function getUidExt(data) { + return data && data.third ? { + third: data.third + } : undefined; + } + } +}; // this function will create an eid object for the given UserId sub-module + +function createEidObject(userIdData, subModuleKey) { + var conf = USER_IDS_CONFIG[subModuleKey]; + + if (conf && userIdData) { + var eid = {}; + eid.source = conf['source']; + var value = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getValue']) ? conf['getValue'](userIdData) : userIdData; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value)) { + var uid = { + id: value, + atype: conf['atype'] + }; // getUidExt + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getUidExt'])) { + var uidExt = conf['getUidExt'](userIdData); + + if (uidExt) { + uid.ext = uidExt; + } + } + + eid.uids = [uid]; // getEidExt + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getEidExt'])) { + var eidExt = conf['getEidExt'](userIdData); + + if (eidExt) { + eid.ext = eidExt; + } + } + + return eid; + } + } + + return null; +} // this function will generate eids array for all available IDs in bidRequest.userId +// this function will be called by userId module +// if any adapter does not want any particular userId to be passed then adapter can use Array.filter(e => e.source != 'tdid') + + +function createEidsArray(bidRequestUserId) { + var eids = []; + + for (var subModuleKey in bidRequestUserId) { + if (bidRequestUserId.hasOwnProperty(subModuleKey)) { + var eid = createEidObject(bidRequestUserId[subModuleKey], subModuleKey); + + if (eid) { + eids.push(eid); + } + } + } + + return eids; +} + +/***/ }) + +},[295]); \ No newline at end of file diff --git a/build/dist/boldwinBidAdapter.js b/build/dist/boldwinBidAdapter.js new file mode 100644 index 00000000000..4bd6c94f8a9 --- /dev/null +++ b/build/dist/boldwinBidAdapter.js @@ -0,0 +1,144 @@ +pbjsChunk([268],{ + +/***/ 297: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(298); + + +/***/ }), + +/***/ 298: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'boldwin'; +var AD_URL = 'https://ssp.videowalldirect.com/?c=o&m=multi'; +var SYNC_URL = 'https://cs.videowalldirect.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 __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + return Boolean(bid.native && bid.native.title && bid.native.image && bid.native.impressionTrackers); + + default: + return false; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: function isBidRequestValid(bid) { + return Boolean(bid.bidId && bid.params && !isNaN(parseInt(bid.params.placementId))); + }, + buildRequests: function buildRequests() { + var validBidRequests = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var bidderRequest = arguments.length > 1 ? arguments[1] : undefined; + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + var placements = []; + var request = { + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'language': navigator && navigator.language ? navigator.language.split('-')[0] : '', + 'secure': 1, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + + if (bidderRequest) { + if (bidderRequest.uspConsent) { + request.ccpa = bidderRequest.uspConsent; + } + + if (bidderRequest.gdprConsent) { + request.gdpr = bidderRequest.gdprConsent; + } + } + + var len = validBidRequests.length; + + for (var i = 0; i < len; i++) { + var bid = validBidRequests[i]; + var sizes = void 0; + + if (bid.mediaTypes) { + if (bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]] && bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]].sizes) { + sizes = bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]].sizes; + } else if (bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]] && bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]].playerSize) { + sizes = bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]].playerSize; + } + } + + placements.push({ + placementId: bid.params.placementId, + bidId: bid.bidId, + sizes: sizes || [], + wPlayer: sizes ? sizes[0] : 0, + hPlayer: sizes ? sizes[1] : 0, + traffic: bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], + schain: bid.schain || {} + }); + } + + return { + method: 'POST', + url: AD_URL, + data: request + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var response = []; + + for (var i = 0; i < serverResponse.body.length; i++) { + var resItem = serverResponse.body[i]; + + if (isBidResponseValid(resItem)) { + response.push(resItem); + } + } + + return response; + }, + getUserSyncs: function getUserSyncs() { + return [{ + type: 'image', + url: SYNC_URL + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[297]); \ No newline at end of file diff --git a/build/dist/bridgewellBidAdapter.js b/build/dist/bridgewellBidAdapter.js new file mode 100644 index 00000000000..38ffb88f130 --- /dev/null +++ b/build/dist/bridgewellBidAdapter.js @@ -0,0 +1,309 @@ +pbjsChunk([267],{ + +/***/ 299: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(300); + + +/***/ }), + +/***/ 300: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); + + + + +var BIDDER_CODE = 'bridgewell'; +var REQUEST_ENDPOINT = 'https://prebid.scupio.com/recweb/prebid.aspx?cb=' + Math.random(); +var BIDDER_VERSION = '0.0.2'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* 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) { + var valid = false; + + if (bid && bid.params && bid.params.ChannelID) { + valid = true; + } + + 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, bidderRequest) { + var adUnits = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + adUnits.push({ + ChannelID: bid.params.ChannelID, + adUnitCode: bid.adUnitCode, + mediaTypes: bid.mediaTypes || { + banner: { + sizes: bid.sizes + } + } + }); + }); + + var topUrl = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + topUrl = bidderRequest.refererInfo.referer; + } + + return { + method: 'POST', + url: REQUEST_ENDPOINT, + data: { + version: { + prebid: "4.2.0", + bridgewell: BIDDER_VERSION + }, + inIframe: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"](), + url: topUrl, + referrer: getTopWindowReferrer(), + adUnits: adUnits + }, + 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 + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidRequest.validBidRequests, function (req) { + var bidResponse = {}; + + if (!serverResponse.body) { + return; + } + + var matchedResponse = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(serverResponse.body, function (res) { + var valid = false; + + if (res && !res.consumed) { + var mediaTypes = req.mediaTypes; + var adUnitCode = req.adUnitCode; + + if (res.adUnitCode) { + return res.adUnitCode === adUnitCode; + } else if (res.width && res.height && mediaTypes) { + if (mediaTypes.native) { + // dont care native sizes + valid = true; + } else if (mediaTypes.banner) { + if (mediaTypes.banner.sizes) { + var width = res.width; + var height = res.height; + var sizes = mediaTypes.banner.sizes; // check response size validation + + if (typeof sizes[0] === 'number') { + // for foramt Array[Number] check + valid = width === sizes[0] && height === sizes[1]; + } else { + // for format Array[Array[Number]] check + valid = !!__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(sizes, function (size) { + return width === size[0] && height === size[1]; + }); + } + } + } + } + } + + return valid; + }); + + if (matchedResponse) { + matchedResponse.consumed = true; // check required parameters + + if (typeof matchedResponse.cpm !== 'number') { + return; + } else if (typeof matchedResponse.netRevenue !== 'boolean') { + return; + } else if (typeof matchedResponse.currency !== 'string') { + return; + } else if (typeof matchedResponse.mediaType !== 'string') { + return; + } + + bidResponse.requestId = req.bidId; + bidResponse.cpm = matchedResponse.cpm; + bidResponse.width = matchedResponse.width; + bidResponse.height = matchedResponse.height; + bidResponse.ttl = matchedResponse.ttl; + bidResponse.creativeId = matchedResponse.id; + bidResponse.netRevenue = matchedResponse.netRevenue; + bidResponse.currency = matchedResponse.currency; + bidResponse.mediaType = matchedResponse.mediaType; // check required parameters by matchedResponse.mediaType + + switch (matchedResponse.mediaType) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + // check banner required parameters + if (typeof matchedResponse.ad !== 'string') { + return; + } + + bidResponse.ad = matchedResponse.ad; + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]: + // check native required parameters + if (!matchedResponse.native) { + return; + } + + var reqNativeLayout = req.mediaTypes.native; + var resNative = matchedResponse.native; // check title + + var title = reqNativeLayout.title; + + if (title && title.required) { + if (typeof resNative.title !== 'string') { + return; + } else if (title.len && title.len < resNative.title.length) { + return; + } + } // check body + + + var body = reqNativeLayout.body; + + if (body && body.required) { + if (typeof resNative.body !== 'string') { + return; + } + } // check image + + + var image = reqNativeLayout.image; + + if (image && image.required) { + if (resNative.image) { + if (typeof resNative.image.url !== 'string') { + // check image url + return; + } else { + if (resNative.image.width !== image.sizes[0] || resNative.image.height !== image.sizes[1]) { + // check image sizes + return; + } + } + } else { + return; + } + } // check sponsoredBy + + + var sponsoredBy = reqNativeLayout.sponsoredBy; + + if (sponsoredBy && sponsoredBy.required) { + if (typeof resNative.sponsoredBy !== 'string') { + return; + } + } // check icon + + + var icon = reqNativeLayout.icon; + + if (icon && icon.required) { + if (resNative.icon) { + if (typeof resNative.icon.url !== 'string') { + // check icon url + return; + } else { + if (resNative.icon.width !== icon.sizes[0] || resNative.icon.height !== icon.sizes[0]) { + // check image sizes + return; + } + } + } else { + return; + } + } // check clickUrl + + + if (typeof resNative.clickUrl !== 'string') { + return; + } // check clickTracker + + + var clickTrackers = resNative.clickTrackers; + + if (clickTrackers) { + if (clickTrackers.length === 0) { + return; + } + } else { + return; + } // check impressionTrackers + + + var impressionTrackers = resNative.impressionTrackers; + + if (impressionTrackers) { + if (impressionTrackers.length === 0) { + return; + } + } else { + return; + } + + bidResponse.native = matchedResponse.native; + break; + + default: + // response mediaType is not supported + return; + } + + bidResponses.push(bidResponse); + } + }); + + return bidResponses; + } +}; + +function getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return ''; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[299]); \ No newline at end of file diff --git a/build/dist/brightcomBidAdapter.js b/build/dist/brightcomBidAdapter.js new file mode 100644 index 00000000000..25c1ba37a3e --- /dev/null +++ b/build/dist/brightcomBidAdapter.js @@ -0,0 +1,322 @@ +pbjsChunk([266],{ + +/***/ 301: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(302); + + +/***/ }), + +/***/ 302: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'brightcom'; +var URL = 'https://brightcombid.marphezis.com/hb'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs +}; + +function buildRequests(bidReqs, bidderRequest) { + try { + var referrer = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + referrer = bidderRequest.refererInfo.referer; + } + + var brightcomImps = []; + var publisherId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('publisherId', bidReqs[0].params); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidReqs, function (bid) { + var bidSizes = bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes || bid.sizes; + bidSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidSizes) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidSizes[0]) ? bidSizes : [bidSizes]; + bidSizes = bidSizes.filter(function (size) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size); + }); + var processedSizes = bidSizes.map(function (size) { + return { + w: parseInt(size[0], 10), + h: parseInt(size[1], 10) + }; + }); + var element = document.getElementById(bid.adUnitCode); + + var minSize = _getMinSize(processedSizes); + + var viewabilityAmount = _isViewabilityMeasurable(element) ? _getViewability(element, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](), minSize) : 'na'; + var viewabilityAmountRounded = isNaN(viewabilityAmount) ? viewabilityAmount : Math.round(viewabilityAmount); + var imp = { + id: bid.bidId, + banner: { + format: processedSizes, + ext: { + viewability: viewabilityAmountRounded + } + }, + tagid: String(bid.adUnitCode) + }; + var bidFloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidFloor', bid.params); + + if (bidFloor) { + imp.bidfloor = bidFloor; + } + + brightcomImps.push(imp); + }); + + var brightcomBidReq = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: brightcomImps, + site: { + domain: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](referrer).host, + page: referrer, + publisher: { + id: publisherId + } + }, + device: { + devicetype: _getDeviceType(), + w: screen.width, + h: screen.height + }, + tmax: __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; + return { + method: 'POST', + url: URL, + data: JSON.stringify(brightcomBidReq), + options: { + contentType: 'text/plain', + withCredentials: false + } + }; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e, { + bidReqs: bidReqs, + bidderRequest: bidderRequest + }); + } +} + +function isBidRequestValid(bid) { + if (bid.bidder !== BIDDER_CODE || typeof bid.params === 'undefined') { + return false; + } + + if (typeof bid.params.publisherId === 'undefined') { + return false; + } + + return true; +} + +function interpretResponse(serverResponse) { + if (!serverResponse.body || _typeof(serverResponse.body) != 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Brightcom server returned empty/non-json response: ' + JSON.stringify(serverResponse.body)); + return []; + } + + var _serverResponse$body = serverResponse.body, + id = _serverResponse$body.id, + seatbid = _serverResponse$body.seatbid; + + try { + var brightcomBidResponses = []; + + if (id && seatbid && seatbid.length > 0 && seatbid[0].bid && seatbid[0].bid.length > 0) { + seatbid[0].bid.map(function (brightcomBid) { + brightcomBidResponses.push({ + requestId: brightcomBid.impid, + cpm: parseFloat(brightcomBid.price), + width: parseInt(brightcomBid.w), + height: parseInt(brightcomBid.h), + creativeId: brightcomBid.crid || brightcomBid.id, + currency: 'USD', + netRevenue: true, + mediaType: __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], + ad: _getAdMarkup(brightcomBid), + ttl: 60 + }); + }); + } + + return brightcomBidResponses; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e, { + id: id, + seatbid: seatbid + }); + } +} // Don't do user sync for now + + +function getUserSyncs(syncOptions, responses, gdprConsent) { + return []; +} + +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 _getDeviceType() { + return _isMobile() ? 1 : _isConnectedTV() ? 3 : 2; +} + +function _getAdMarkup(bid) { + var adm = bid.adm; + + if ('nurl' in bid) { + adm += __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"](bid.nurl); + } + + return adm; +} + +function _isViewabilityMeasurable(element) { + return !_isIframe() && element !== null; +} + +function _getViewability(element, topWin) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref.w, + h = _ref.h; + + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().document.visibilityState === 'visible' ? _getPercentInView(element, topWin, { + w: w, + h: h + }) : 0; +} + +function _isIframe() { + try { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowSelf"]() !== __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](); + } catch (e) { + return true; + } +} + +function _getMinSize(sizes) { + return sizes.reduce(function (min, size) { + return size.h * size.w < min.h * min.w ? size : min; + }); +} + +function _getBoundingBox(element) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + w = _ref2.w, + h = _ref2.h; + + var _element$getBoundingC = element.getBoundingClientRect(), + width = _element$getBoundingC.width, + height = _element$getBoundingC.height, + left = _element$getBoundingC.left, + top = _element$getBoundingC.top, + right = _element$getBoundingC.right, + bottom = _element$getBoundingC.bottom; + + if ((width === 0 || height === 0) && w && h) { + width = w; + height = h; + right = left + w; + bottom = top + h; + } + + return { + width: width, + height: height, + left: left, + top: top, + right: right, + bottom: bottom + }; +} + +function _getIntersectionOfRects(rects) { + var bbox = { + left: rects[0].left, + right: rects[0].right, + top: rects[0].top, + bottom: rects[0].bottom + }; + + for (var i = 1; i < rects.length; ++i) { + bbox.left = Math.max(bbox.left, rects[i].left); + bbox.right = Math.min(bbox.right, rects[i].right); + + if (bbox.left >= bbox.right) { + return null; + } + + bbox.top = Math.max(bbox.top, rects[i].top); + bbox.bottom = Math.min(bbox.bottom, rects[i].bottom); + + if (bbox.top >= bbox.bottom) { + return null; + } + } + + bbox.width = bbox.right - bbox.left; + bbox.height = bbox.bottom - bbox.top; + return bbox; +} + +function _getPercentInView(element, topWin) { + var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref3.w, + h = _ref3.h; + + var elementBoundingBox = _getBoundingBox(element, { + w: w, + h: h + }); // Obtain the intersection of the element and the viewport + + + var elementInViewBoundingBox = _getIntersectionOfRects([{ + left: 0, + top: 0, + right: topWin.innerWidth, + bottom: topWin.innerHeight + }, elementBoundingBox]); + + var elementInViewArea, elementTotalArea; + + if (elementInViewBoundingBox !== null) { + // Some or all of the element is in view + elementInViewArea = elementInViewBoundingBox.width * elementInViewBoundingBox.height; + elementTotalArea = elementBoundingBox.width * elementBoundingBox.height; + return elementInViewArea / elementTotalArea * 100; + } // No overlap between element and the viewport; therefore, the element + // lies completely out of view + + + return 0; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[301]); \ No newline at end of file diff --git a/build/dist/britepoolIdSystem.js b/build/dist/britepoolIdSystem.js new file mode 100644 index 00000000000..2bc782b84a4 --- /dev/null +++ b/build/dist/britepoolIdSystem.js @@ -0,0 +1,193 @@ +pbjsChunk([265],{ + +/***/ 303: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(304); + + +/***/ }), + +/***/ 304: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "britepoolIdSubmodule", function() { return britepoolIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * This module adds BritePoolId to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/britepoolIdSystem + * @requires module:modules/userId + */ + + + +/** @type {Submodule} */ + +var britepoolIdSubmodule = { + /** + * Used to link submodule with config + * @type {string} + */ + name: 'britepoolId', + + /** + * Decode the stored id value for passing to bid requests + * @function + * @param {string} value + * @returns {{britepoolid:string}} + */ + decode: function decode(value) { + return value && typeof value['primaryBPID'] === 'string' ? { + 'britepoolid': value['primaryBPID'] + } : null; + }, + + /** + * Performs action to obtain id and return a value in the callback's response argument + * @function + * @param {SubmoduleParams} [configParams] + * @returns {function(callback:function)} + */ + getId: function getId(submoduleConfigParams, consentData) { + var _britepoolIdSubmodule = britepoolIdSubmodule.createParams(submoduleConfigParams, consentData), + params = _britepoolIdSubmodule.params, + headers = _britepoolIdSubmodule.headers, + url = _britepoolIdSubmodule.url, + getter = _britepoolIdSubmodule.getter, + errors = _britepoolIdSubmodule.errors; + + var getterResponse = null; + + if (typeof getter === 'function') { + getterResponse = getter(params); // First let's rule out that the response is not a function + + if (typeof getterResponse !== 'function') { + // Optimization to return value from getter + return { + id: britepoolIdSubmodule.normalizeValue(getterResponse) + }; + } + } // Return for async operation + + + return { + callback: function callback(_callback) { + if (errors.length > 0) { + errors.forEach(function (error) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + }); + + _callback(); + + return; + } + + if (getterResponse) { + // Resolve the getter function response + try { + getterResponse(function (response) { + _callback(britepoolIdSubmodule.normalizeValue(response)); + }); + } catch (error) { + if (error !== '') __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + + _callback(); + } + } else { + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(url, { + success: function success(response) { + var responseObj = britepoolIdSubmodule.normalizeValue(response); + + _callback(responseObj ? { + primaryBPID: responseObj.primaryBPID + } : null); + }, + error: function error(_error) { + if (_error !== '') __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](_error); + + _callback(); + } + }, JSON.stringify(params), { + customHeaders: headers, + contentType: 'application/json', + method: 'POST', + withCredentials: true + }); + } + } + }; + }, + + /** + * Helper method to create params for our API call + * @param {SubmoduleParams} [configParams] + * @returns {object} Object with parsed out params + */ + createParams: function createParams(submoduleConfigParams, consentData) { + var errors = []; + var headers = {}; + + var params = _extends({}, submoduleConfigParams); + + if (params.getter) { + // Custom getter will not require other params + if (typeof params.getter !== 'function') { + errors.push("userIdTargeting - britepoolId submodule requires getter to be a function"); + return { + errors: errors + }; + } + } else { + if (params.api_key) { + // Add x-api-key into the header + headers['x-api-key'] = params.api_key; + } + } + + var url = params.url || 'https://api.britepool.com/v1/britepool/id'; + var getter = params.getter; + delete params.api_key; + delete params.url; + delete params.getter; + return { + params: params, + headers: headers, + url: url, + getter: getter, + errors: errors + }; + }, + + /** + * Helper method to normalize a JSON value + */ + normalizeValue: function normalizeValue(value) { + var valueObj = null; + + if (_typeof(value) === 'object') { + valueObj = value; + } else if (typeof value === 'string') { + try { + valueObj = JSON.parse(value); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + } + + return valueObj; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', britepoolIdSubmodule); + +/***/ }) + +},[303]); \ No newline at end of file diff --git a/build/dist/browsiRtdProvider.js b/build/dist/browsiRtdProvider.js new file mode 100644 index 00000000000..b7f4bc7f270 --- /dev/null +++ b/build/dist/browsiRtdProvider.js @@ -0,0 +1,396 @@ +pbjsChunk([264],{ + +/***/ 305: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(306); + + +/***/ }), + +/***/ 306: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["addBrowsiTag"] = addBrowsiTag; +/* harmony export (immutable) */ __webpack_exports__["setData"] = setData; +/* harmony export (immutable) */ __webpack_exports__["isIdMatchingAdUnit"] = isIdMatchingAdUnit; +/* harmony export (immutable) */ __webpack_exports__["getMacroId"] = getMacroId; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "browsiSubmodule", function() { return browsiSubmodule; }); +/* harmony export (immutable) */ __webpack_exports__["init"] = init; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_adloader_js__ = __webpack_require__(39); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js__); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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; } + +/** + * This module adds browsi provider to the eal time data module + * The {@link module:modules/realTimeData} module is required + * The module will fetch predictions from browsi server + * The module will place browsi bootstrap script on page + * @module modules/browsiProvider + * @requires module:modules/realTimeData + */ + +/** + * @typedef {Object} ModuleParams + * @property {string} siteKey + * @property {string} pubKey + * @property {string} url + * @property {?string} keyName + * @property {?number} auctionDelay + * @property {?number} timeout + */ + + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(); +/** @type {string} */ + +var MODULE_NAME = 'realTimeData'; +/** @type {number} */ + +var DEF_TIMEOUT = 1000; +/** @type {ModuleParams} */ + +var _moduleParams = {}; +/** @type {null|Object} */ + +var _data = null; +/** @type {null | function} */ + +var _dataReadyCallback = null; +/** + * add browsi script to page + * @param {Object} data + */ + +function addBrowsiTag(data) { + var script = Object(__WEBPACK_IMPORTED_MODULE_4__src_adloader_js__["a" /* loadExternalScript */])(data.u, 'browsi'); + script.async = true; + script.setAttribute('data-sitekey', _moduleParams.siteKey); + script.setAttribute('data-pubkey', _moduleParams.pubKey); + script.setAttribute('prebidbpt', 'true'); + script.setAttribute('id', 'browsi-tag'); + script.setAttribute('src', data.u); + script.prebidData = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepClone"](data); + + if (_moduleParams.keyName) { + script.prebidData.kn = _moduleParams.keyName; + } + + return script; +} +/** + * collect required data from page + * send data to browsi server to get predictions + */ + +function collectData() { + var win = window.top; + var doc = win.document; + var browsiData = null; + + try { + browsiData = storage.getDataFromLocalStorage('__brtd'); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]('unable to parse __brtd'); + } + + var predictorData = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, { + sk: _moduleParams.siteKey, + sw: win.screen && win.screen.width || -1, + sh: win.screen && win.screen.height || -1, + url: "".concat(doc.location.protocol, "//").concat(doc.location.host).concat(doc.location.pathname) + }), browsiData ? { + us: browsiData + } : { + us: '{}' + }), document.referrer ? { + r: document.referrer + } : {}), document.title ? { + at: document.title + } : {}); + + getPredictionsFromServer("//".concat(_moduleParams.url, "/prebid?").concat(toUrlParams(predictorData))); +} + +function setData(data) { + _data = data; + + if (typeof _dataReadyCallback === 'function') { + _dataReadyCallback(_data); + + _dataReadyCallback = null; + } +} +/** + * wait for data from server + * call callback when data is ready + * @param {function} callback + */ + +function waitForData(callback) { + if (_data) { + _dataReadyCallback = null; + callback(_data); + } else { + _dataReadyCallback = callback; + } +} +/** + * filter server data according to adUnits received + * call callback (onDone) when data is ready + * @param {adUnit[]} adUnits + * @param {function} onDone callback function + */ + + +function sendDataToModule(adUnits, onDone) { + try { + waitForData(function (_predictionsData) { + var _predictions = _predictionsData.p; + + if (!_predictions || !Object.keys(_predictions).length) { + return onDone({}); + } + + var dataToReturn = adUnits.reduce(function (rp, cau) { + var adUnitCode = cau && cau.code; + + if (!adUnitCode) { + return rp; + } + + var adSlot = getSlotByCode(adUnitCode); + var identifier = adSlot ? getMacroId(_predictionsData.pmd, adSlot) : adUnitCode; + var predictionData = _predictions[identifier]; + + if (!predictionData) { + return rp; + } + + if (predictionData.p) { + if (!isIdMatchingAdUnit(adSlot, predictionData.w)) { + return rp; + } + + rp[adUnitCode] = getKVObject(predictionData.p, _predictionsData.kn); + } + + return rp; + }, {}); + return onDone(dataToReturn); + }); + } catch (e) { + onDone({}); + } +} +/** + * get all slots on page + * @return {Object[]} slot GoogleTag slots + */ + + +function getAllSlots() { + return __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isGptPubadsDefined"]() && window.googletag.pubads().getSlots(); +} +/** + * get prediction and return valid object for key value set + * @param {number} p + * @param {string?} keyName + * @return {Object} key:value + */ + + +function getKVObject(p, keyName) { + var prValue = p < 0 ? 'NA' : (Math.floor(p * 10) / 10).toFixed(2); + var prObject = {}; + prObject[(_moduleParams['keyName'] || keyName).toString()] = prValue.toString(); + return prObject; +} +/** + * check if placement id matches one of given ad units + * @param {Object} slot google slot + * @param {string[]} whitelist ad units + * @return {boolean} + */ + + +function isIdMatchingAdUnit(slot, whitelist) { + if (!whitelist || !whitelist.length || !slot) { + return true; + } + + var slotAdUnits = slot.getAdUnitPath(); + return whitelist.indexOf(slotAdUnits) !== -1; +} +/** + * get GPT slot by placement id + * @param {string} code placement id + * @return {?Object} + */ + +function getSlotByCode(code) { + var slots = getAllSlots(); + + if (!slots || !slots.length) { + return null; + } + + return __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default()(slots, function (s) { + return s.getSlotElementId() === code || s.getAdUnitPath() === code; + }) || null; +} +/** + * generate id according to macro script + * @param {Object} macro replacement macro + * @param {Object} slot google slot + * @return {?Object} + */ + + +function getMacroId(macro, slot) { + if (macro) { + try { + var macroResult = evaluate(macro, slot.getSlotElementId(), slot.getAdUnitPath(), function (match, p1) { + return p1 && slot.getTargeting(p1).join('_') || 'NA'; + }); + return macroResult; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]("failed to evaluate: ".concat(macro)); + } + } + + return slot.getSlotElementId(); +} + +function evaluate(macro, divId, adUnit, replacer) { + var macroResult = macro.p.replace(/['"]+/g, '').replace(//g, divId); + + if (adUnit) { + macroResult = macroResult.replace(//g, adUnit); + } + + if (replacer) { + macroResult = macroResult.replace(//g, replacer); + } + + if (macro.s) { + macroResult = macroResult.substring(macro.s.s, macro.s.e); + } + + return macroResult; +} +/** + * XMLHttpRequest to get data form browsi server + * @param {string} url server url with query params + */ + + +function getPredictionsFromServer(url) { + var ajax = Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["b" /* ajaxBuilder */])(_moduleParams.auctionDelay || _moduleParams.timeout || DEF_TIMEOUT); + ajax(url, { + success: function success(response, req) { + if (req.status === 200) { + try { + var data = JSON.parse(response); + + if (data && data.p && data.kn) { + setData({ + p: data.p, + kn: data.kn, + pmd: data.pmd + }); + } else { + setData({}); + } + + addBrowsiTag(data); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]('unable to parse data'); + setData({}); + } + } else if (req.status === 204) { + // unrecognized site key + setData({}); + } + }, + error: function error() { + setData({}); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]('unable to get prediction data'); + } + }); +} +/** + * serialize object and return query params string + * @param {Object} data + * @return {string} + */ + + +function toUrlParams(data) { + return Object.keys(data).map(function (key) { + return key + '=' + encodeURIComponent(data[key]); + }).join('&'); +} +/** @type {RtdSubmodule} */ + + +var browsiSubmodule = { + /** + * used to link submodule with realTimeData + * @type {string} + */ + name: 'browsi', + + /** + * get data and send back to realTimeData module + * @function + * @param {adUnit[]} adUnits + * @param {function} onDone + */ + getData: sendDataToModule +}; +function init(config) { + var confListener = config.getConfig(MODULE_NAME, function (_ref) { + var realTimeData = _ref.realTimeData; + + try { + _moduleParams = realTimeData.dataProviders && realTimeData.dataProviders.filter(function (pr) { + return pr.name && pr.name.toLowerCase() === 'browsi'; + })[0].params; + _moduleParams.auctionDelay = realTimeData.auctionDelay; + _moduleParams.timeout = realTimeData.timeout; + } catch (e) { + _moduleParams = {}; + } + + if (_moduleParams.siteKey && _moduleParams.pubKey && _moduleParams.url) { + confListener(); + collectData(); + } else { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]('missing params for Browsi provider'); + } + }); +} +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('realTimeData', browsiSubmodule); +init(__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */]); + +/***/ }) + +},[305]); \ No newline at end of file diff --git a/build/dist/bucksenseBidAdapter.js b/build/dist/bucksenseBidAdapter.js new file mode 100644 index 00000000000..17dfde29142 --- /dev/null +++ b/build/dist/bucksenseBidAdapter.js @@ -0,0 +1,151 @@ +pbjsChunk([263],{ + +/***/ 307: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(308); + + +/***/ }), + +/***/ 308: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var WHO = 'BKSHBID-005'; +var BIDDER_CODE = 'bucksense'; +var URL = 'https://prebid.bksn.se/prebidjs/'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' isBidRequestValid() - INPUT bid:', bid); + + if (bid.bidder !== BIDDER_CODE || typeof bid.params === 'undefined') { + return false; + } + + if (typeof bid.params.placementId === 'undefined') { + return false; + } + + return true; + }, + + /** + * 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, bidderRequest) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' buildRequests() - INPUT validBidRequests:', validBidRequests, 'INPUT bidderRequest:', bidderRequest); + var requests = []; + var len = validBidRequests.length; + + for (var i = 0; i < len; i++) { + var bid = validBidRequests[i]; + var params = {}; + + for (var key in bid.params) { + if (bid.params.hasOwnProperty(key)) { + params[key] = encodeURI(bid.params[key]); + } + } + + delete bid.params; + var sizes = bid.sizes; + delete bid.sizes; + var sendData = { + 'pub_id': location.host, + 'pl_id': '' + params.placementId, + 'secure': location.protocol === 'https:' ? 1 : 0, + 'href': encodeURI(location.href), + 'bid_id': bid.bidId, + 'params': params, + 'sizes': sizes, + '_bid': bidderRequest + }; + requests.push({ + method: 'POST', + url: URL, + data: sendData + }); + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' buildRequests() - requests:', requests); + return 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) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' interpretResponse() - INPUT serverResponse:', serverResponse, 'INPUT request:', request); + var bidResponses = []; + + if (serverResponse.body) { + var oResponse = serverResponse.body; + var sRequestID = oResponse.requestId || ''; + var nCPM = oResponse.cpm || 0; + var nWidth = oResponse.width || 0; + var nHeight = oResponse.height || 0; + var nTTL = oResponse.ttl || 0; + var sCreativeID = oResponse.creativeId || 0; + var sCurrency = oResponse.currency || 'USD'; + var bNetRevenue = oResponse.netRevenue || true; + var sAd = oResponse.ad || ''; + + if (request && sRequestID.length == 0) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' interpretResponse() - use RequestID from Placments'); + sRequestID = request.data.bid_id || ''; + } + + if (request && request.data.params.hasOwnProperty('testcpm')) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' interpretResponse() - use Test CPM '); + nCPM = request.data.params.testcpm; + } + + var bidResponse = { + requestId: sRequestID, + cpm: nCPM, + width: nWidth, + height: nHeight, + ttl: nTTL, + creativeId: sCreativeID, + currency: sCurrency, + netRevenue: bNetRevenue, + ad: sAd + }; + bidResponses.push(bidResponse); + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' interpretResponse() - serverResponse not valid'); + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"](WHO + ' interpretResponse() - return', bidResponses); + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[307]); \ No newline at end of file diff --git a/build/dist/buzzoolaBidAdapter.js b/build/dist/buzzoolaBidAdapter.js new file mode 100644 index 00000000000..f7183263542 --- /dev/null +++ b/build/dist/buzzoolaBidAdapter.js @@ -0,0 +1,132 @@ +pbjsChunk([262],{ + +/***/ 309: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(310); + + +/***/ }), + +/***/ 310: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_video_js__ = __webpack_require__(36); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var BIDDER_CODE = 'buzzoola'; +var ENDPOINT = 'https://exchange.buzzoola.com/ssp/prebidjs'; +var RENDERER_SRC = 'https://tube.buzzoola.com/new/build/buzzlibrary.js'; +var spec = { + code: BIDDER_CODE, + aliases: ['buzzoolaAdapter'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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) { + var types = bid.mediaTypes; + return !!(bid && bid.mediaTypes && (types.banner || types.video) && bid.params && bid.params.placementId); + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests an array of bids + * @param bidderRequest + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return { + url: ENDPOINT, + method: 'POST', + data: bidderRequest + }; + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {ServerResponse} serverResponse A successful response from the server. + * @param bidderRequest + * @return {Bid[]} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(_ref, _ref2) { + var body = _ref.body; + var data = _ref2.data; + var requestBids = {}; + var response; + + try { + response = JSON.parse(body); + } catch (ex) { + response = body; + } + + if (!Array.isArray(response)) response = []; + data.bids.forEach(function (bid) { + return requestBids[bid.bidId] = bid; + }); + return response.map(function (bid) { + var requestBid = requestBids[bid.requestId]; + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](requestBid, 'mediaTypes.video.context'); + var validBid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](bid); + + if (validBid.mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] && context === __WEBPACK_IMPORTED_MODULE_4__src_video_js__["b" /* OUTSTREAM */]) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: validBid.requestId, + url: RENDERER_SRC, + loaded: false + }); + renderer.setRender(setOutstreamRenderer); + validBid.renderer = renderer; + } + + return validBid; + }); + } +}; +/** + * Initialize Buzzoola Outstream player + * + * @param bid + */ + +function setOutstreamRenderer(bid) { + var adData = JSON.parse(bid.ad); + var unitSettings = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](adData, 'placement.unit_settings'); + var extendedSettings = { + width: '' + bid.width, + height: '' + bid.height, + container_height: '' + bid.height + }; + adData.placement = _extends({}, adData.placement); + adData.placement.unit_settings = _extends({}, unitSettings, extendedSettings); + bid.renderer.push(function () { + window.Buzzoola.Core.install(document.querySelector("#".concat(bid.adUnitCode)), { + data: adData + }); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[309]); \ No newline at end of file diff --git a/build/dist/byplayBidAdapter.js b/build/dist/byplayBidAdapter.js new file mode 100644 index 00000000000..729b33fca6e --- /dev/null +++ b/build/dist/byplayBidAdapter.js @@ -0,0 +1,95 @@ +pbjsChunk([261],{ + +/***/ 311: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(312); + + +/***/ }), + +/***/ 312: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 = 'byplay'; +var ENDPOINT_URL = 'https://prebid.byplay.net/bidder'; +var VIDEO_PLAYER_URL = 'https://cdn.byplay.net/prebid-byplay-v2.js'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.sectionId; + }, + buildRequests: function buildRequests(validBidRequests) { + return validBidRequests.map(function (req) { + var payload = _objectSpread({ + requestId: req.bidId, + sectionId: req.params.sectionId + }, req.params.env ? { + env: req.params.env + } : {}); + + return { + method: 'POST', + url: ENDPOINT_URL, + data: JSON.stringify(payload), + options: { + withCredentials: false + } + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidderRequest) { + var response = serverResponse.body; + var data = JSON.parse(bidderRequest.data); + var bidResponse = { + requestId: data.requestId, + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.creativeId || '0', + ttl: __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('_bidderTimeout'), + currency: 'JPY', + netRevenue: response.netRevenue, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], + vastXml: response.vastXml, + renderer: createRenderer() + }; + return [bidResponse]; + } +}; + +function createRenderer() { + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + url: VIDEO_PLAYER_URL + }); + renderer.setRender(function (bid) { + bid.renderer.push(function () { + window.adtagRender(bid); + }); + }); + return renderer; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[311]); \ No newline at end of file diff --git a/build/dist/c1xBidAdapter.js b/build/dist/c1xBidAdapter.js new file mode 100644 index 00000000000..dce7c6fe1d4 --- /dev/null +++ b/build/dist/c1xBidAdapter.js @@ -0,0 +1,203 @@ +pbjsChunk([260],{ + +/***/ 313: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(314); + + +/***/ }), + +/***/ 314: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c1xAdapter", function() { return c1xAdapter; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_userSync_js__ = __webpack_require__(43); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + +var BIDDER_CODE = 'c1x'; +var URL = 'https://ht.c1exchange.com/ht'; +var PIXEL_ENDPOINT = 'https://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.1 (c) C1X Inc., 2018 + */ + +var c1xAdapter = { + code: BIDDER_CODE, + // check the bids sent to c1x bidder + isBidRequestValid: function isBidRequestValid(bid) { + var siteId = bid.params.siteId || ''; + + if (!siteId) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"](LOG_MSG.noSite); + } + + return !!(bid.adUnitCode && siteId); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var payload = {}; + var tagObj = {}; + var pixelUrl = ''; + 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; + payload = { + adunits: adunits.toString(), + rnd: rnd.toString(), + response: 'json', + compress: 'gzip' + }; // for GDPR support + + if (bidderRequest && bidderRequest.gdprConsent) { + payload['consent_string'] = bidderRequest.gdprConsent.consentString; + payload['consent_required'] = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies.toString() : 'true'; + } + + if (pixelId) { + pixelUrl = PIXEL_ENDPOINT + pixelId; + + if (payload.consent_required) { + pixelUrl += '&gdpr=' + (bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + pixelUrl += '&consent=' + encodeURIComponent(bidderRequest.gdprConsent.consentString || ''); + } + + __WEBPACK_IMPORTED_MODULE_2__src_userSync_js__["a" /* userSync */].registerSync('image', BIDDER_CODE, pixelUrl); + } + + _extends(payload, tagObj); + + var payloadString = stringifyPayload(payload); // 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; + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["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; + } + } + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"](LOG_MSG.bidWin + bid.adId + ' size: ' + curBid.width + 'x' + curBid.height); + bidResponses.push(curBid); + } else { + // no bid + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["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; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(c1xAdapter); + +/***/ }) + +},[313]); \ No newline at end of file diff --git a/build/dist/categoryTranslation.js b/build/dist/categoryTranslation.js new file mode 100644 index 00000000000..0baf73baf09 --- /dev/null +++ b/build/dist/categoryTranslation.js @@ -0,0 +1,133 @@ +pbjsChunk([259],{ + +/***/ 315: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(316); + + +/***/ }), + +/***/ 316: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerAdserver", function() { return registerAdserver; }); +/* harmony export (immutable) */ __webpack_exports__["getAdserverCategoryHook"] = getAdserverCategoryHook; +/* harmony export (immutable) */ __webpack_exports__["initTranslation"] = initTranslation; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_auction_js__ = __webpack_require__(40); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +/** + * This module translates iab category to freewheel industry using translation mapping file + * Publisher can set translation file by using setConfig method + * + * Example: + * config.setConfig({ + * 'brandCategoryTranslation': { + * 'translationFile': 'http://sample.com' + * } + * }); + * If publisher has not defined translation file than prebid will use default prebid translation file provided here //cdn.jsdelivr.net/gh/prebid/category-mapping-file@1/freewheel-mapping.json + */ + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["a" /* getCoreStorageManager */])('categoryTranslation'); +var DEFAULT_TRANSLATION_FILE_URL = 'https://cdn.jsdelivr.net/gh/prebid/category-mapping-file@1/freewheel-mapping.json'; +var DEFAULT_IAB_TO_FW_MAPPING_KEY = 'iabToFwMappingkey'; +var DEFAULT_IAB_TO_FW_MAPPING_KEY_PUB = 'iabToFwMappingkeyPub'; +var refreshInDays = 1; +var registerAdserver = Object(__WEBPACK_IMPORTED_MODULE_1__src_hook_js__["b" /* hook */])('async', function (adServer) { + var url; + + if (adServer === 'freewheel') { + url = DEFAULT_TRANSLATION_FILE_URL; + initTranslation(url, DEFAULT_IAB_TO_FW_MAPPING_KEY); + } +}, 'registerAdserver'); +registerAdserver(); +function getAdserverCategoryHook(fn, adUnitCode, bid) { + if (!bid) { + return fn.call(this, adUnitCode); // if no bid, call original and let it display warnings + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('adpod.brandCategoryExclusion')) { + return fn.call(this, adUnitCode, bid); + } + + var localStorageKey = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('brandCategoryTranslation.translationFile') ? DEFAULT_IAB_TO_FW_MAPPING_KEY_PUB : DEFAULT_IAB_TO_FW_MAPPING_KEY; + + if (bid.meta && !bid.meta.adServerCatId) { + var mapping = storage.getDataFromLocalStorage(localStorageKey); + + if (mapping) { + try { + mapping = JSON.parse(mapping); + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"])('Failed to parse translation mapping file'); + } + + if (bid.meta.primaryCatId && mapping['mapping'] && mapping['mapping'][bid.meta.primaryCatId]) { + bid.meta.adServerCatId = mapping['mapping'][bid.meta.primaryCatId]['id']; + } else { + // This bid will be automatically ignored by adpod module as adServerCatId was not found + bid.meta.adServerCatId = undefined; + } + } else { + Object(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"])('Translation mapping data not found in local storage'); + } + } + + fn.call(this, adUnitCode, bid); +} +function initTranslation(url, localStorageKey) { + Object(__WEBPACK_IMPORTED_MODULE_1__src_hook_js__["d" /* setupBeforeHookFnOnce */])(__WEBPACK_IMPORTED_MODULE_4__src_auction_js__["c" /* addBidResponse */], getAdserverCategoryHook, 50); + var mappingData = storage.getDataFromLocalStorage(localStorageKey); + + try { + mappingData = mappingData ? JSON.parse(mappingData) : undefined; + + if (!mappingData || Object(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["timestamp"])() > mappingData.lastUpdated + refreshInDays * 24 * 60 * 60 * 1000) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_ajax_js__["a" /* ajax */])(url, { + success: function success(response) { + try { + response = JSON.parse(response); + response['lastUpdated'] = Object(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["timestamp"])(); + storage.setDataInLocalStorage(localStorageKey, JSON.stringify(response)); + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"])('Failed to parse translation mapping file'); + } + }, + error: function error() { + Object(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"])('Failed to load brand category translation file.'); + } + }); + } + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"])('Failed to parse translation mapping file'); + } +} + +function setConfig(config) { + if (config.translationFile) { + // if publisher has defined the translation file, preload that file here + initTranslation(config.translationFile, DEFAULT_IAB_TO_FW_MAPPING_KEY_PUB); + } +} + +__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('brandCategoryTranslation', function (config) { + return setConfig(config.brandCategoryTranslation); +}); + +/***/ }) + +},[315]); \ No newline at end of file diff --git a/build/dist/ccxBidAdapter.js b/build/dist/ccxBidAdapter.js new file mode 100644 index 00000000000..e57051fc84a --- /dev/null +++ b/build/dist/ccxBidAdapter.js @@ -0,0 +1,277 @@ +pbjsChunk([258],{ + +/***/ 317: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(318); + + +/***/ }), + +/***/ 318: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'ccx'; +var BID_URL = 'https://delivery.clickonometrics.pl/ortb/prebid/bid'; +var SUPPORTED_VIDEO_PROTOCOLS = [2, 3, 5, 6]; +var SUPPORTED_VIDEO_MIMES = ['video/mp4', 'video/x-flv']; +var SUPPORTED_VIDEO_PLAYBACK_METHODS = [1, 2, 3, 4]; + +function _getDeviceObj() { + var device = {}; + device.w = screen.width; + device.y = screen.height; + device.ua = navigator.userAgent; + return device; +} + +function _getSiteObj(bidderRequest) { + var site = {}; + var url = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](window, 'location.href'); + + if (url.length > 0) { + url = url.split('?')[0]; + } + + site.page = url; + return site; +} + +function _validateSizes(sizeObj, type) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizeObj) || typeof sizeObj[0] === 'undefined') { + return false; + } + + if (type === 'video' && (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizeObj[0]) || sizeObj[0].length !== 2)) { + return false; + } + + var result = true; + + if (type === 'banner') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](sizeObj, function (size) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size) || size.length !== 2) { + result = false; + } + }); + + return result; + } + + if (type === 'old') { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizeObj[0]) && sizeObj.length !== 2) { + result = false; + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizeObj[0])) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](sizeObj, function (size) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size) || size.length !== 2) { + result = false; + } + }); + } + + return result; + } + + return true; +} + +function _buildBid(bid) { + var placement = {}; + placement.id = bid.bidId; + placement.secure = 1; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'sizes'); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaType') === 'banner' || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video') && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaType')) { + placement.banner = { + 'format': [] + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes[0])) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](sizes, function (size) { + placement.banner.format.push({ + 'w': size[0], + 'h': size[1] + }); + }); + } else { + placement.banner.format.push({ + 'w': sizes[0], + 'h': sizes[1] + }); + } + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaType') === 'video') { + placement.video = {}; + + if (typeof sizes !== 'undefined') { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes[0])) { + placement.video.w = sizes[0][0]; + placement.video.h = sizes[0][1]; + } else { + placement.video.w = sizes[0]; + placement.video.h = sizes[1]; + } + } + + placement.video.protocols = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.protocols') || SUPPORTED_VIDEO_PROTOCOLS; + placement.video.mimes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.mimes') || SUPPORTED_VIDEO_MIMES; + placement.video.playbackmethod = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.playbackmethod') || SUPPORTED_VIDEO_PLAYBACK_METHODS; + placement.video.skip = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.skip') || 0; + + if (placement.video.skip === 1 && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.skipafter')) { + placement.video.skipafter = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.skipafter'); + } + } + + placement.ext = { + 'pid': bid.params.placementId + }; + return placement; +} + +function _buildResponse(bid, currency, ttl) { + var resp = { + requestId: bid.impid, + cpm: bid.price, + width: bid.w, + height: bid.h, + creativeId: bid.crid, + netRevenue: false, + ttl: ttl, + currency: currency + }; + + if (bid.ext.type === 'video') { + resp.vastXml = bid.adm; + } else { + resp.ad = bid.adm; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'dealid')) { + resp.dealId = bid.dealid; + } + + return resp; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['banner', 'video'], + isBidRequestValid: function isBidRequestValid(bid) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.placementId')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('placementId param is reqeuired.'); + return false; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes')) { + var isValid = _validateSizes(bid.mediaTypes.banner.sizes, 'banner'); + + if (!isValid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Bid sizes are invalid.'); + } + + return isValid; + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize')) { + var _isValid = _validateSizes(bid.mediaTypes.video.playerSize, 'video'); + + if (!_isValid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Bid sizes are invalid.'); + } + + return _isValid; + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'sizes')) { + var _isValid2 = _validateSizes(bid.sizes, 'old'); + + if (!_isValid2) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Bid sizes are invalid.'); + } + + return _isValid2; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Bid sizes are required.'); + return false; + } + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + // check if validBidRequests is not empty + if (validBidRequests.length > 0) { + var requestBody = {}; + requestBody.imp = []; + requestBody.site = _getSiteObj(bidderRequest); + requestBody.device = _getDeviceObj(); + requestBody.id = bidderRequest.bids[0].auctionId; + requestBody.ext = { + 'ce': storage.cookiesAreEnabled() ? 1 : 0 + }; // Attaching GDPR Consent Params + + if (bidderRequest && bidderRequest.gdprConsent) { + requestBody.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + requestBody.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0 + } + }; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + requestBody.imp.push(_buildBid(bid)); + }); // Return the server request + + + return { + 'method': 'POST', + 'url': BID_URL, + 'data': JSON.stringify(requestBody) + }; + } + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidResponses = []; // response is not empty (HTTP 204) + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](serverResponse.body)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body.seatbid, function (seatbid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](seatbid.bid, function (bid) { + bidResponses.push(_buildResponse(bid, serverResponse.body.cur, serverResponse.body.ext.ttl)); + }); + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverResponses[0], 'body.ext.usersync') && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](serverResponses[0].body.ext.usersync)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponses[0].body.ext.usersync, function (match) { + if (syncOptions.iframeEnabled && match.type === 'iframe' || syncOptions.pixelEnabled && match.type === 'image') { + syncs.push({ + type: match.type, + url: match.url + }); + } + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[317]); \ No newline at end of file diff --git a/build/dist/cedatoBidAdapter.js b/build/dist/cedatoBidAdapter.js new file mode 100644 index 00000000000..c9ce33bcc27 --- /dev/null +++ b/build/dist/cedatoBidAdapter.js @@ -0,0 +1,261 @@ +pbjsChunk([257],{ + +/***/ 319: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(320); + + +/***/ }), + +/***/ 320: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'cedato'; +var BID_URL = 'https://h.cedatoplayer.com/hb'; +var SYNC_URL = 'https://h.cedatoplayer.com/hb_usync'; +var TTL = 10000; +var CURRENCY = 'USD'; +var NET_REVENUE = true; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.player_id && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["checkCookieSupport"]() && storage.cookiesAreEnabled()); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var site = { + domain: document.domain + }; + var device = { + ua: navigator.userAgent, + w: screen.width, + h: screen.height + }; + var currency = CURRENCY; + var tmax = bidderRequest.timeout; + var auctionId = bidderRequest.auctionId; + var auctionStart = bidderRequest.auctionStart; + var bidderRequestId = bidderRequest.bidderRequestId; + var imp = bidRequests.map(function (req) { + var banner = getMediaType(req, 'banner'); + var video = getMediaType(req, 'video'); + var params = req.params; + var bidId = req.bidId; + var adUnitCode = req.adUnitCode; + var bidRequestsCount = req.bidRequestsCount; + var bidderWinsCount = req.bidderWinsCount; + var transactionId = req.transactionId; + return { + bidId: bidId, + banner: banner, + video: video, + adUnitCode: adUnitCode, + bidRequestsCount: bidRequestsCount, + bidderWinsCount: bidderWinsCount, + transactionId: transactionId, + params: params + }; + }); + var payload = { + version: "4.2.0", + site: site, + device: device, + imp: imp, + currency: currency, + tmax: tmax, + auctionId: auctionId, + auctionStart: auctionStart, + bidderRequestId: bidderRequestId + }; + + if (bidderRequest) { + payload.referer_info = bidderRequest.refererInfo; + payload.us_privacy = bidderRequest.uspConsent; + + if (bidderRequest.gdprConsent) { + payload.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + } + + return formatRequest(payload, bidderRequest); + }, + interpretResponse: function interpretResponse(resp, _ref) { + var bidderRequest = _ref.bidderRequest; + resp = resp.body; + var bids = []; + + if (!resp) { + return bids; + } + + resp.seatbid[0].bid.map(function (serverBid) { + var bid = newBid(serverBid, bidderRequest); + bid.currency = resp.cur; + bids.push(bid); + }); + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, resps, gdprConsent, uspConsent) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + syncs.push(getSync('iframe', gdprConsent, uspConsent)); + } else if (syncOptions.pixelEnabled) { + syncs.push(getSync('image', gdprConsent, uspConsent)); + } + + return syncs; + } +}; + +function getMediaType(req, type) { + var mediaTypes = req.mediaTypes; + + if (!mediaTypes) { + return; + } + + switch (type) { + case 'banner': + if (mediaTypes.banner) { + var sizes = mediaTypes.banner.sizes; + return { + format: getFormats(sizes) + }; + } + + break; + + case 'video': + if (mediaTypes.video) { + var _mediaTypes$video = mediaTypes.video, + playerSize = _mediaTypes$video.playerSize, + context = _mediaTypes$video.context; + return { + context: context, + format: getFormats(playerSize) + }; + } + + } +} + +function newBid(serverBid, bidderRequest) { + var bidRequest = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidRequest"](serverBid.uuid, [bidderRequest]); + var cpm = serverBid.price; + var requestId = serverBid.uuid; + var width = serverBid.w; + var height = serverBid.h; + var creativeId = serverBid.crid; + var dealId = serverBid.dealid; + var mediaType = serverBid.media_type; + var netRevenue = NET_REVENUE; + var ttl = TTL; + var bid = { + cpm: cpm, + requestId: requestId, + width: width, + height: height, + mediaType: mediaType, + creativeId: creativeId, + dealId: dealId, + netRevenue: netRevenue, + ttl: ttl + }; + + if (mediaType == 'video') { + var videoContext = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.context'); + + if (videoContext == 'instream') { + bid.vastUrl = serverBid.vast_url; + bid.vastImpUrl = serverBid.notify_url; + } + } else { + bid.ad = serverBid.adm; + } + + return bid; +} + +function formatRequest(payload, bidderRequest) { + var payloadByUrl = {}; + var requests = []; + payload.imp.forEach(function (imp) { + var url = imp.params.bid_url || BID_URL; + + if (!payloadByUrl[url]) { + payloadByUrl[url] = _objectSpread(_objectSpread({}, payload), {}, { + imp: [] + }); + } + + payloadByUrl[url].imp.push(imp); + }); + + for (var url in payloadByUrl) { + requests.push({ + url: url, + method: 'POST', + data: JSON.stringify(payloadByUrl[url]), + bidderRequest: bidderRequest + }); + } + + return requests; +} + +var getSync = function getSync(type, gdprConsent) { + var uspConsent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; + var syncUrl = SYNC_URL; + var params = '?type=' + type + '&us_privacy=' + uspConsent; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += "&gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + params += "&gdpr_consent=".concat(gdprConsent.consentString); + } + } + + return { + type: type, + url: syncUrl + params + }; +}; + +var getFormats = function getFormats(arr) { + return arr.map(function (s) { + return { + w: s[0], + h: s[1] + }; + }); +}; + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[319]); \ No newline at end of file diff --git a/build/dist/cleanmedianetBidAdapter.js b/build/dist/cleanmedianetBidAdapter.js new file mode 100644 index 00000000000..99c7921ea50 --- /dev/null +++ b/build/dist/cleanmedianetBidAdapter.js @@ -0,0 +1,303 @@ +pbjsChunk([256],{ + +/***/ 321: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(322); + + +/***/ }), + +/***/ 322: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helper", function() { return helper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var helper = { + getTopWindowDomain: function getTopWindowDomain(url) { + var domainStart = url.indexOf('://') + '://'.length; + return url.substring(domainStart, url.indexOf('/', domainStart) < 0 ? url.length : url.indexOf('/', domainStart)); + }, + startsWith: function startsWith(str, search) { + return str.substr(0, search.length) === search; + }, + getMediaType: function getMediaType(bid) { + if (bid.ext) { + if (bid.ext.media_type) { + return bid.ext.media_type.toLowerCase(); + } else if (bid.ext.vast_url) { + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]; + } else { + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]; + } + } + + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]; + } +}; +var spec = { + code: 'cleanmedianet', + aliases: [], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.supplyPartnerId && typeof bid.params.supplyPartnerId === 'string' && (typeof bid.params.bidfloor === 'undefined' || typeof bid.params.bidfloor === 'number') && (typeof bid.params['adpos'] === 'undefined' || typeof bid.params['adpos'] === 'number') && (typeof bid.params['protocols'] === 'undefined' || Array.isArray(bid.params['protocols'])) && (typeof bid.params.instl === 'undefined' || bid.params.instl === 0 || bid.params.instl === 1); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var _this = this; + + return validBidRequests.map(function (bidRequest) { + var adUnitCode = bidRequest.adUnitCode, + auctionId = bidRequest.auctionId, + mediaTypes = bidRequest.mediaTypes, + params = bidRequest.params, + sizes = bidRequest.sizes, + transactionId = bidRequest.transactionId; + var baseEndpoint = 'https://bidder.cleanmediaads.com'; + var rtbEndpoint = "".concat(baseEndpoint, "/r/").concat(params.supplyPartnerId, "/bidr?rformat=open_rtb&reqformat=rtb_json&bidder=prebid") + (params.query ? '&' + params.query : ''); + var url = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl') || bidderRequest.refererInfo.referer; + var rtbBidRequest = { + id: auctionId, + site: { + domain: helper.getTopWindowDomain(url), + page: url, + ref: bidderRequest.refererInfo.referer + }, + device: { + ua: navigator.userAgent, + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0, + h: screen.height, + w: screen.width, + language: navigator.language + }, + imp: [], + ext: {}, + user: { + ext: {} + } + }; + + if (bidderRequest.gdprConsent && bidderRequest.gdprConsent.consentString && bidderRequest.gdprConsent.gdprApplies) { + rtbBidRequest.ext.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + rtbBidRequest.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies === true ? 1 : 0 + } + }; + rtbBidRequest.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + } + + var imp = { + id: transactionId, + instl: params.instl === 1 ? 1 : 0, + tagid: adUnitCode, + bidfloor: params.bidfloor || 0, + bidfloorcur: 'USD', + secure: 1 + }; + + var hasFavoredMediaType = params.favoredMediaType && _this.supportedMediaTypes.includes(params.favoredMediaType); + + if (!mediaTypes || mediaTypes.banner) { + if (!hasFavoredMediaType || params.favoredMediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]) { + var bannerImp = _extends({}, imp, { + banner: { + w: sizes.length ? sizes[0][0] : 300, + h: sizes.length ? sizes[0][1] : 250, + pos: params.pos || 0, + topframe: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"]() ? 0 : 1 + } + }); + + rtbBidRequest.imp.push(bannerImp); + } + } + + if (mediaTypes && mediaTypes.video) { + if (!hasFavoredMediaType || params.favoredMediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]) { + var videoImp = { + video: { + protocols: params.protocols || [1, 2, 3, 4, 5, 6], + pos: params.pos || 0, + ext: { + context: mediaTypes.video.context + } + } + }; + var playerSize = mediaTypes.video.playerSize || sizes; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](playerSize[0])) { + videoImp.video.w = playerSize[0][0]; + videoImp.video.h = playerSize[0][1]; + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](playerSize[0])) { + videoImp.video.w = playerSize[0]; + videoImp.video.h = playerSize[1]; + } else { + videoImp.video.w = 300; + videoImp.video.h = 250; + } + + videoImp = _extends({}, imp, videoImp); + rtbBidRequest.imp.push(videoImp); + } + } + + if (rtbBidRequest.imp.length === 0) { + return; + } + + return { + method: 'POST', + url: rtbEndpoint, + data: rtbBidRequest, + bidRequest: bidRequest + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var response = serverResponse && serverResponse.body; + + if (!response) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('empty response'); + return []; + } + + var bids = response.seatbid.reduce(function (acc, seatBid) { + return acc.concat(seatBid.bid); + }, []); + var outBids = []; + bids.forEach(function (bid) { + var outBid = { + requestId: bidRequest.bidRequest.bidId, + cpm: bid.price, + width: bid.w, + height: bid.h, + ttl: 360, + creativeId: bid.crid || bid.adid, + netRevenue: true, + currency: bid.cur || response.cur, + mediaType: helper.getMediaType(bid) + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest.bidRequest, 'mediaTypes.' + outBid.mediaType)) { + if (outBid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]) { + outBids.push(_extends({}, outBid, { + ad: bid.adm + })); + } else if (outBid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]) { + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest.bidRequest, 'mediaTypes.video.context'); + outBids.push(_extends({}, outBid, { + vastUrl: bid.ext.vast_url, + vastXml: bid.adm, + renderer: context === 'outstream' ? newRenderer(bidRequest.bidRequest, bid) : undefined + })); + } + } + }); + return outBids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent) { + var syncs = []; + var gdprApplies = gdprConsent && typeof gdprConsent.gdprApplies === 'boolean' ? gdprConsent.gdprApplies : false; + var suffix = gdprApplies ? 'gc=' + encodeURIComponent(gdprConsent.consentString) : 'gc=missing'; + serverResponses.forEach(function (resp) { + if (resp.body) { + var bidResponse = resp.body; + + if (bidResponse.ext && Array.isArray(bidResponse.ext['utrk'])) { + bidResponse.ext['utrk'].forEach(function (pixel) { + var url = pixel.url + (pixel.url.indexOf('?') > 0 ? '&' + suffix : '?' + suffix); + return syncs.push({ + type: pixel.type, + url: url + }); + }); + } + + if (Array.isArray(bidResponse.seatbid)) { + bidResponse.seatbid.forEach(function (seatBid) { + if (Array.isArray(seatBid.bid)) { + seatBid.bid.forEach(function (bid) { + if (bid.ext && Array.isArray(bid.ext['utrk'])) { + bid.ext['utrk'].forEach(function (pixel) { + var url = pixel.url + (pixel.url.indexOf('?') > 0 ? '&' + suffix : '?' + suffix); + return syncs.push({ + type: pixel.type, + url: url + }); + }); + } + }); + } + }); + } + } + }); + return syncs; + } +}; + +function newRenderer(bidRequest, bid) { + var rendererOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + url: bidRequest.params && bidRequest.params.rendererUrl || bid.ext && bid.ext.renderer_url || 'https://s.wlplayer.com/video/latest/renderer.js', + config: rendererOptions, + loaded: false + }); + + try { + renderer.setRender(renderOutstream); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function renderOutstream(bid) { + bid.renderer.push(function () { + var unitId = bid.adUnitCode + '/' + bid.adId; + window['GamoshiPlayer'].renderAd({ + id: unitId, + debug: window.location.href.indexOf('pbjsDebug') >= 0, + placement: document.getElementById(bid.adUnitCode), + width: bid.width, + height: bid.height, + events: { + ALL_ADS_COMPLETED: function ALL_ADS_COMPLETED() { + return window.setTimeout(function () { + window['GamoshiPlayer'].removeAd(unitId); + }, 300); + } + }, + vastUrl: bid.vastUrl, + vastXml: bid.vastXml + }); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[321]); \ No newline at end of file diff --git a/build/dist/clickforceBidAdapter.js b/build/dist/clickforceBidAdapter.js new file mode 100644 index 00000000000..b95d825d0d6 --- /dev/null +++ b/build/dist/clickforceBidAdapter.js @@ -0,0 +1,151 @@ +pbjsChunk([255],{ + +/***/ 323: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(324); + + +/***/ }), + +/***/ 324: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'clickforce'; +var ENDPOINT_URL = 'https://ad.holmesmind.com/adserver/prebid.json?cb=' + new Date().getTime() + '&hb=1&ver=1.21'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* 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 && bid.params && !!bid.params.zone; + }, + + /** + * 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 bidParams = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + bidParams.push({ + z: bid.params.zone, + bidId: bid.bidId + }); + }); + + return { + method: 'POST', + url: ENDPOINT_URL, + data: bidParams, + 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 cfResponses = []; + var bidRequestList = []; + + if (typeof bidRequest != 'undefined') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidRequest.validBidRequests, function (req) { + bidRequestList[req.bidId] = req; + }); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body, function (response) { + if (response.requestId != null) { + // native ad size + if (response.width == 3) { + cfResponses.push({ + requestId: response.requestId, + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.creativeId, + currency: response.currency, + netRevenue: response.netRevenue, + ttl: response.ttl, + native: { + title: response.tag.content.title, + body: response.tag.content.content, + image: { + url: response.tag.content.image, + height: 900, + width: 1600 + }, + icon: { + url: response.tag.content.icon, + height: 900, + width: 900 + }, + clickUrl: response.tag.cu, + cta: response.tag.content.button_text, + sponsoredBy: response.tag.content.advertiser, + impressionTrackers: response.tag.iu + }, + mediaType: 'native' + }); + } else { + // display ad + cfResponses.push({ + requestId: response.requestId, + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.creativeId, + currency: response.currency, + netRevenue: response.netRevenue, + ttl: response.ttl, + ad: response.tag, + mediaType: 'banner' + }); + } + } + }); + + return cfResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: 'https://cdn.holmesmind.com/js/capmapping.htm' + }]; + } else if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: 'https://c.holmesmind.com/cm' + }]; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[323]); \ No newline at end of file diff --git a/build/dist/clicktripzBidAdapter.js b/build/dist/clicktripzBidAdapter.js new file mode 100644 index 00000000000..7c03da803a3 --- /dev/null +++ b/build/dist/clicktripzBidAdapter.js @@ -0,0 +1,86 @@ +pbjsChunk([254],{ + +/***/ 325: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(326); + + +/***/ }), + +/***/ 326: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'clicktripz'; +var ENDPOINT_URL = 'https://www.clicktripz.com/x/prebid/v1'; +var spec = { + code: BIDDER_CODE, + aliases: ['ctz'], + // short code + isBidRequestValid: function isBidRequestValid(bid) { + if (bid && bid.params && bid.params.placementId && bid.params.siteId) { + return true; + } + + return false; + }, + buildRequests: function buildRequests(validBidRequests) { + var bidRequests = []; + + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"])(validBidRequests, function (bid) { + bidRequests.push({ + bidId: bid.bidId, + placementId: bid.params.placementId, + siteId: bid.params.siteId, + sizes: bid.sizes.map(function (size) { + return size.join('x'); + }) + }); + }); + + return { + method: 'POST', + url: ENDPOINT_URL, + data: bidRequests + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var bidResponses = []; + + if (serverResponse && serverResponse.body) { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"])(serverResponse.body, function (bid) { + if (bid.errors) { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"])(bid.errors); + return; + } + + var size = bid.size.split('x'); + bidResponses.push({ + requestId: bid.bidId, + cpm: bid.cpm, + width: size[0], + height: size[1], + creativeId: bid.creativeId, + currency: bid.currency, + netRevenue: bid.netRevenue, + ttl: bid.ttl, + adUrl: bid.adUrl + }); + }); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[325]); \ No newline at end of file diff --git a/build/dist/coinzillaBidAdapter.js b/build/dist/coinzillaBidAdapter.js new file mode 100644 index 00000000000..24586679a4a --- /dev/null +++ b/build/dist/coinzillaBidAdapter.js @@ -0,0 +1,114 @@ +pbjsChunk([253],{ + +/***/ 327: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(328); + + +/***/ }), + +/***/ 328: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + +var BIDDER_CODE = 'coinzilla'; +var ENDPOINT_URL = 'https://request.czilladx.com/serve/request.php'; +var spec = { + code: BIDDER_CODE, + aliases: ['czlla'], + // 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.placementId; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @return Array Info describing the request to the server. + * @param validBidRequests + * @param bidderRequest + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (validBidRequests.length === 0) { + return []; + } + + return validBidRequests.map(function (bidRequest) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.params.size || bidRequest.sizes)[0]; + var width = sizes.split('x')[0]; + var height = sizes.split('x')[1]; + var payload = { + placementId: bidRequest.params.placementId, + width: width, + height: height, + bidId: bidRequest.bidId, + referer: bidderRequest.refererInfo.referer + }; + return { + method: 'POST', + url: ENDPOINT_URL, + data: payload + }; + }); + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {ServerResponse} 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 = []; + var response = serverResponse.body; + var creativeId = response.creativeId || 0; + var width = response.width || 0; + var height = response.height || 0; + var cpm = response.cpm || 0; + + if (width !== 0 && height !== 0 && cpm !== 0 && creativeId !== 0) { + var dealId = response.dealid || ''; + var currency = response.currency || 'EUR'; + var netRevenue = response.netRevenue === undefined ? true : response.netRevenue; + var referrer = bidRequest.data.referer; + var bidResponse = { + requestId: response.requestId, + cpm: cpm, + width: response.width, + height: response.height, + creativeId: creativeId, + dealId: dealId, + currency: currency, + netRevenue: netRevenue, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'), + referrer: referrer, + ad: response.ad + }; + bidResponses.push(bidResponse); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[327]); \ No newline at end of file diff --git a/build/dist/collectcentBidAdapter.js b/build/dist/collectcentBidAdapter.js new file mode 100644 index 00000000000..01e1ec5d922 --- /dev/null +++ b/build/dist/collectcentBidAdapter.js @@ -0,0 +1,113 @@ +pbjsChunk([252],{ + +/***/ 329: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(330); + + +/***/ }), + +/***/ 330: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'collectcent'; +var URL_MULTI = 'https://publishers.motionspots.com/?c=o&m=multi'; +var URL_SYNC = 'https://publishers.motionspots.com/?c=o&m=cookie'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* 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 Boolean(bid.bidId && bid.params && !isNaN(bid.params.placementId) && spec.supportedMediaTypes.indexOf(bid.params.traffic) !== -1); + }, + + /** + * 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, bidderRequest) { + var winTop; + + try { + winTop = window.top; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + winTop = window; + } + + ; + var placements = []; + var location = bidderRequest ? new URL(bidderRequest.refererInfo.referer) : winTop.location; + var request = { + 'secure': location.protocol === 'https:' ? 1 : 0, + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + + for (var i = 0; i < validBidRequests.length; i++) { + var bid = validBidRequests[i]; + var params = bid.params; + placements.push({ + placementId: params.placementId, + bidId: bid.bidId, + sizes: bid.sizes, + traffic: params.traffic + }); + } + + return { + method: 'POST', + url: URL_MULTI, + 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) { + try { + serverResponse = serverResponse.body; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + return serverResponse; + }, + getUserSyncs: function getUserSyncs() { + return [{ + type: 'image', + url: URL_SYNC + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[329]); \ No newline at end of file diff --git a/build/dist/colombiaBidAdapter.js b/build/dist/colombiaBidAdapter.js new file mode 100644 index 00000000000..13fc050110c --- /dev/null +++ b/build/dist/colombiaBidAdapter.js @@ -0,0 +1,110 @@ +pbjsChunk([251],{ + +/***/ 331: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(332); + + +/***/ }), + +/***/ 332: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'colombia'; +var ENDPOINT_URL = 'https://ade.clmbtech.com/cde/prebid.htm'; +var HOST_NAME = document.location.protocol + '//' + window.location.host; +var spec = { + code: BIDDER_CODE, + aliases: ['clmb'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placementId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bidRequest) { + var params = bidRequest.params; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.sizes)[0]; + var width = sizes.split('x')[0]; + var height = sizes.split('x')[1]; + var placementId = params.placementId; + var cb = Math.floor(Math.random() * 99999999999); + var bidId = bidRequest.bidId; + var referrer = bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : ''; + var payload = { + v: 'hb1', + p: placementId, + w: width, + h: height, + cb: cb, + r: referrer, + uid: bidId, + t: 'i', + d: HOST_NAME + }; + return { + method: 'POST', + url: ENDPOINT_URL, + data: payload + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + var crid = response.creativeId || 0; + var width = response.width || 0; + var height = response.height || 0; + var cpm = response.cpm || 0; + + if (width == 300 && height == 250) { + cpm = cpm * 0.2; + } + + if (width == 320 && height == 50) { + cpm = cpm * 0.55; + } + + if (cpm <= 0) { + return bidResponses; + } + + if (width !== 0 && height !== 0 && cpm !== 0 && crid !== 0) { + var dealId = response.dealid || ''; + var currency = response.currency || 'USD'; + var netRevenue = response.netRevenue === undefined ? true : response.netRevenue; + var bidResponse = { + requestId: bidRequest.data.uid, + cpm: cpm, + width: response.width, + height: response.height, + creativeId: crid, + dealId: dealId, + currency: currency, + netRevenue: netRevenue, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'), + referrer: bidRequest.data.r, + ad: response.ad + }; + bidResponses.push(bidResponse); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[331]); \ No newline at end of file diff --git a/build/dist/colossussspBidAdapter.js b/build/dist/colossussspBidAdapter.js new file mode 100644 index 00000000000..d8b80ac7404 --- /dev/null +++ b/build/dist/colossussspBidAdapter.js @@ -0,0 +1,190 @@ +pbjsChunk([250],{ + +/***/ 333: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(334); + + +/***/ }), + +/***/ 334: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'colossusssp'; +var G_URL = 'https://colossusssp.com/?c=o&m=multi'; +var G_URL_SYNC = 'https://colossusssp.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 __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + return Boolean(bid.native); + + default: + return false; + } +} + +function getUserId(eids, id, source, uidExt) { + if (id) { + var uid = { + id: id + }; + + if (uidExt) { + uid.ext = uidExt; + } + + eids.push({ + source: source, + uids: [uid] + }); + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* 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 Boolean(bid.bidId && bid.params && !isNaN(bid.params.placement_id)); + }, + + /** + * 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, bidderRequest) { + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + 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 + }; + + if (bidderRequest) { + if (bidderRequest.uspConsent) { + request.ccpa = bidderRequest.uspConsent; + } + + if (bidderRequest.gdprConsent) { + request.gdpr_consent = bidderRequest.gdprConsent.consentString || 'ALL'; + request.gdpr_require = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + } + + for (var i = 0; i < validBidRequests.length; i++) { + var bid = validBidRequests[i]; + var traff = bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + var placement = { + placementId: bid.params.placement_id, + bidId: bid.bidId, + sizes: bid.mediaTypes[traff].sizes, + traffic: traff, + eids: [] + }; + + if (bid.schain) { + placement.schain = bid.schain; + } + + if (bid.userId) { + getUserId(placement.eids, bid.userId.britepoolid, 'britepool.com'); + getUserId(placement.eids, bid.userId.idl_env, 'identityLink'); + getUserId(placement.eids, bid.userId.id5id, 'id5-sync.com'); + getUserId(placement.eids, bid.userId.tdid, 'adserver.org', { + rtiPartner: 'TDID' + }); + } + + placements.push(placement); + } + + return { + method: 'POST', + url: G_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 (isBidResponseValid(resItem)) { + response.push(resItem); + } + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + return response; + }, + getUserSyncs: function getUserSyncs() { + return [{ + type: 'image', + url: G_URL_SYNC + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[333]); \ No newline at end of file diff --git a/build/dist/connectadBidAdapter.js b/build/dist/connectadBidAdapter.js new file mode 100644 index 00000000000..c65a87d0178 --- /dev/null +++ b/build/dist/connectadBidAdapter.js @@ -0,0 +1,282 @@ +pbjsChunk([249],{ + +/***/ 335: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(336); + + +/***/ }), + +/***/ 336: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var BIDDER_CODE = 'connectad'; +var BIDDER_CODE_ALIAS = 'connectadrealtime'; +var ENDPOINT_URL = 'https://i.connectad.io/api/v2'; +var SUPPORTED_MEDIA_TYPES = [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]]; +var spec = { + code: BIDDER_CODE, + aliases: [BIDDER_CODE_ALIAS], + supportedMediaTypes: SUPPORTED_MEDIA_TYPES, + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.networkId && bid.params.siteId); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var digitrust; + var ret = { + method: 'POST', + url: '', + data: '', + bidRequest: [] + }; + + if (validBidRequests.length < 1) { + return ret; + } + + var data = _extends({ + placements: [], + time: Date.now(), + user: {}, + url: bidderRequest.refererInfo && bidderRequest.refererInfo.referer ? bidderRequest.refererInfo.referer : window.location.href, + referrer: window.document.referrer, + referrer_info: bidderRequest.refererInfo, + screensize: getScreenSize(), + dnt: navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1' ? 1 : 0, + language: navigator.language, + ua: navigator.userAgent + }); // coppa compliance + + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.coppa', 1); + } // adding schain object + + + if (validBidRequests[0].schain) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'source.ext.schain', validBidRequests[0].schain); + } // Attaching GDPR Consent Params + + + if (bidderRequest.gdprConsent) { + var gdprApplies; + + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + gdprApplies = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.gdpr', gdprApplies); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + } // CCPA + + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.us_privacy', bidderRequest.uspConsent); + } // Digitrust Support + + + var bidRequestDigitrust = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'userId.digitrustid.data'); + + if (bidRequestDigitrust && (!bidRequestDigitrust.privacy || !bidRequestDigitrust.privacy.optout)) { + digitrust = { + id: bidRequestDigitrust.id, + keyv: bidRequestDigitrust.keyv + }; + } + + if (digitrust) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.digitrust', { + id: digitrust.id, + keyv: digitrust.keyv + }); + } + + if (validBidRequests[0].userId && _typeof(validBidRequests[0].userId) === 'object' && (validBidRequests[0].userId.tdid || validBidRequests[0].userId.pubcid || validBidRequests[0].userId.lipb || validBidRequests[0].userId.id5id || validBidRequests[0].userId.parrableId)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.eids', []); + + if (validBidRequests[0].userId.tdid) { + data.user.ext.eids.push({ + source: 'adserver.org', + uids: [{ + id: validBidRequests[0].userId.tdid, + ext: { + rtiPartner: 'TDID' + } + }] + }); + } + + if (validBidRequests[0].userId.pubcid) { + data.user.ext.eids.push({ + source: 'pubcommon', + uids: [{ + id: validBidRequests[0].userId.pubcid + }] + }); + } + + if (validBidRequests[0].userId.id5id) { + data.user.ext.eids.push({ + source: 'id5-sync.com', + uids: [{ + id: validBidRequests[0].userId.id5id + }] + }); + } + + if (validBidRequests[0].userId.parrableId) { + data.user.ext.eids.push({ + source: 'parrable.com', + uids: [{ + id: validBidRequests[0].userId.parrableId.eid + }] + }); + } + + if (validBidRequests[0].userId.lipb && validBidRequests[0].userId.lipb.lipbid) { + data.user.ext.eids.push({ + source: 'liveintent.com', + uids: [{ + id: validBidRequests[0].userId.lipb.lipbid + }] + }); + } + } + + validBidRequests.map(function (bid) { + var placement = _extends({ + id: bid.transactionId, + divName: bid.bidId, + sizes: bid.mediaTypes.banner.sizes, + adTypes: getSize(bid.mediaTypes.banner.sizes || 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; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest, bidderRequest) { + var bid; + var bids; + var bidId; + var bidObj; + 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.dealid = decision.dealid || null; + bid.ad = retrieveAd(decision); + bid.currency = 'USD'; + bid.creativeId = decision.adId; + bid.ttl = 360; + bid.netRevenue = true; + bidResponses.push(bid); + } + } + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + var syncEndpoint = 'https://cdn.connectad.io/connectmyusers.php?'; + + if (gdprConsent) { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'gdpr', gdprConsent.gdprApplies ? 1 : 0); + } + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'gdpr_consent', gdprConsent.consentString); + } + + if (uspConsent) { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'us_privacy', uspConsent); + } + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') === true) { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'coppa', 1); + } + + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: syncEndpoint + }]; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Bidder ConnectAd: Please activate iFrame Sync'); + } + } +}; +var sizeMap = [null, '120x90', '200x200', '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', '980x120', '980x150', '320x150', '300x300', '200x600', '320x500', '320x320']; +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; +} + +function getScreenSize() { + return [window.screen.width, window.screen.height].join('x'); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[335]); \ No newline at end of file diff --git a/build/dist/consentManagement.js b/build/dist/consentManagement.js new file mode 100644 index 00000000000..be132780938 --- /dev/null +++ b/build/dist/consentManagement.js @@ -0,0 +1,537 @@ +pbjsChunk([248],{ + +/***/ 337: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(338); + + +/***/ }), + +/***/ 338: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "allowAuction", function() { return allowAuction; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "userCMP", function() { return userCMP; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "consentTimeout", function() { return consentTimeout; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gdprScope", function() { return gdprScope; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticConsentData", function() { return staticConsentData; }); +/* harmony export (immutable) */ __webpack_exports__["requestBidsHook"] = requestBidsHook; +/* harmony export (immutable) */ __webpack_exports__["resetConsentData"] = resetConsentData; +/* harmony export (immutable) */ __webpack_exports__["setConsentConfig"] = setConsentConfig; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js__ = __webpack_require__(339); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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; } + +/** + * This module adds GDPR consentManagement support to prebid.js. It interacts with + * supported CMPs (Consent Management Platforms) to grab the user's consent information + * and make it available for any GDPR supported adapters to read/pass this information to + * their system. + */ + + + + + +var DEFAULT_CMP = 'iab'; +var DEFAULT_CONSENT_TIMEOUT = 10000; +var DEFAULT_ALLOW_AUCTION_WO_CONSENT = true; +var allowAuction = { + value: DEFAULT_ALLOW_AUCTION_WO_CONSENT, + definedInConfig: false +}; +var userCMP; +var consentTimeout; +var gdprScope; +var staticConsentData; +var cmpVersion = 0; +var consentData; +var addedConsentHook = false; // add new CMPs here, with their dedicated lookup function + +var cmpCallMap = { + 'iab': lookupIabConsent, + 'static': lookupStaticConsentData +}; +/** + * This function reads the consent string from the config to obtain the consent information of the user. + * @param {function(string)} cmpSuccess acts as a success callback when the value is read from config; pass along consentObject (string) from CMP + * @param {function(string)} cmpError acts as an error callback while interacting with the config string; pass along an error message (string) + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + +function lookupStaticConsentData(cmpSuccess, cmpError, hookConfig) { + cmpSuccess(staticConsentData, hookConfig); +} +/** + * This function handles interacting with an IAB compliant CMP to obtain the consent information of the user. + * Given the async nature of the CMP's API, we pass in acting success/error callback functions to exit this function + * based on the appropriate result. + * @param {function(string)} cmpSuccess acts as a success callback when CMP returns a value; pass along consentObject (string) from CMP + * @param {function(string)} cmpError acts as an error callback while interacting with CMP; pass along an error message (string) + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + + +function lookupIabConsent(cmpSuccess, cmpError, hookConfig) { + function findCMP() { + var f = window; + var cmpFrame; + var cmpFunction; + + while (!cmpFrame) { + try { + if (typeof f.__tcfapi === 'function' || typeof f.__cmp === 'function') { + if (typeof f.__tcfapi === 'function') { + cmpVersion = 2; + cmpFunction = f.__tcfapi; + } else { + cmpVersion = 1; + cmpFunction = f.__cmp; + } + + cmpFrame = f; + break; + } + } catch (e) {} // need separate try/catch blocks due to the exception errors thrown when trying to check for a frame that doesn't exist in 3rd party env + + + try { + if (f.frames['__tcfapiLocator']) { + cmpVersion = 2; + cmpFrame = f; + break; + } + } catch (e) {} + + try { + if (f.frames['__cmpLocator']) { + cmpVersion = 1; + cmpFrame = f; + break; + } + } catch (e) {} + + if (f === window.top) break; + f = f.parent; + } + + return { + cmpFrame: cmpFrame, + cmpFunction: cmpFunction + }; + } + + function v2CmpResponseCallback(tcfData, success) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Received a response from CMP', tcfData); + + if (success) { + if (tcfData.eventStatus === 'tcloaded' || tcfData.eventStatus === 'useractioncomplete') { + cmpSuccess(tcfData, hookConfig); + } else if (tcfData.eventStatus === 'cmpuishown' && tcfData.tcString && tcfData.purposeOneTreatment === true) { + cmpSuccess(tcfData, hookConfig); + } + } else { + cmpError('CMP unable to register callback function. Please check CMP setup.', hookConfig); + } + } + + function handleV1CmpResponseCallbacks() { + var cmpResponse = {}; + + function afterEach() { + if (cmpResponse.getConsentData && cmpResponse.getVendorConsents) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Received all requested responses from CMP', cmpResponse); + cmpSuccess(cmpResponse, hookConfig); + } + } + + return { + consentDataCallback: function consentDataCallback(consentResponse) { + cmpResponse.getConsentData = consentResponse; + afterEach(); + }, + vendorConsentsCallback: function vendorConsentsCallback(consentResponse) { + cmpResponse.getVendorConsents = consentResponse; + afterEach(); + } + }; + } + + var v1CallbackHandler = handleV1CmpResponseCallbacks(); + var cmpCallbacks = {}; + + var _findCMP = findCMP(), + cmpFrame = _findCMP.cmpFrame, + cmpFunction = _findCMP.cmpFunction; + + if (!cmpFrame) { + return cmpError('CMP not found.', hookConfig); + } // to collect the consent information from the user, we perform two calls to the CMP in parallel: + // first to collect the user's consent choices represented in an encoded string (via getConsentData) + // second to collect the user's full unparsed consent information (via getVendorConsents) + // the following code also determines where the CMP is located and uses the proper workflow to communicate with it: + // check to see if CMP is found on the same window level as prebid and call it directly if so + // check to see if prebid is in a safeframe (with CMP support) + // else assume prebid may be inside an iframe and use the IAB CMP locator code to see if CMP's located in a higher parent window. this works in cross domain iframes + // if the CMP is not found, the iframe function will call the cmpError exit callback to abort the rest of the CMP workflow + + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](cmpFunction)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Detected CMP API is directly accessible, calling it now...'); + + if (cmpVersion === 1) { + cmpFunction('getConsentData', null, v1CallbackHandler.consentDataCallback); + cmpFunction('getVendorConsents', null, v1CallbackHandler.vendorConsentsCallback); + } else if (cmpVersion === 2) { + cmpFunction('addEventListener', cmpVersion, v2CmpResponseCallback); + } + } else if (cmpVersion === 1 && inASafeFrame() && typeof window.$sf.ext.cmp === 'function') { + // this safeframe workflow is only supported with TCF v1 spec; the v2 recommends to use the iframe postMessage route instead (even if you are in a safeframe). + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Detected Prebid.js is encased in a SafeFrame and CMP is registered, calling it now...'); + callCmpWhileInSafeFrame('getConsentData', v1CallbackHandler.consentDataCallback); + callCmpWhileInSafeFrame('getVendorConsents', v1CallbackHandler.vendorConsentsCallback); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Detected CMP is outside the current iframe where Prebid.js is located, calling it now...'); + + if (cmpVersion === 1) { + callCmpWhileInIframe('getConsentData', cmpFrame, v1CallbackHandler.consentDataCallback); + callCmpWhileInIframe('getVendorConsents', cmpFrame, v1CallbackHandler.vendorConsentsCallback); + } else if (cmpVersion === 2) { + callCmpWhileInIframe('addEventListener', cmpFrame, v2CmpResponseCallback); + } + } + + function inASafeFrame() { + return !!(window.$sf && window.$sf.ext); + } + + function callCmpWhileInSafeFrame(commandName, callback) { + function sfCallback(msgName, data) { + if (msgName === 'cmpReturn') { + var responseObj = commandName === 'getConsentData' ? data.vendorConsentData : data.vendorConsents; + callback(responseObj); + } + } // find sizes from adUnits object + + + var adUnits = hookConfig.adUnits; + var width = 1; + var height = 1; + + if (Array.isArray(adUnits) && adUnits.length > 0) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getAdUnitSizes"](adUnits[0]); + width = sizes[0][0]; + height = sizes[0][1]; + } + + window.$sf.ext.register(width, height, sfCallback); + window.$sf.ext.cmp(commandName); + } + + function callCmpWhileInIframe(commandName, cmpFrame, moduleCallback) { + var apiName = cmpVersion === 2 ? '__tcfapi' : '__cmp'; + /* Setup up a __cmp function to do the postMessage and stash the callback. + This function behaves (from the caller's perspective identicially to the in-frame __cmp call */ + + window[apiName] = function (cmd, arg, callback) { + var callId = Math.random() + ''; + var callName = "".concat(apiName, "Call"); + + var msg = _defineProperty({}, callName, { + command: cmd, + parameter: arg, + callId: callId + }); + + if (cmpVersion !== 1) msg[callName].version = cmpVersion; + cmpCallbacks[callId] = callback; + cmpFrame.postMessage(msg, '*'); + }; + /** when we get the return message, call the stashed callback */ + + + window.addEventListener('message', readPostMessageResponse, false); // call CMP + + window[apiName](commandName, null, moduleCallback); + + function readPostMessageResponse(event) { + var cmpDataPkgName = "".concat(apiName, "Return"); + var json = typeof event.data === 'string' && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js___default()(event.data, cmpDataPkgName) ? JSON.parse(event.data) : event.data; + + if (json[cmpDataPkgName] && json[cmpDataPkgName].callId) { + var payload = json[cmpDataPkgName]; // TODO - clean up this logic (move listeners?); we have duplicate messages responses because 2 eventlisteners are active from the 2 cmp requests running in parallel + + if (typeof cmpCallbacks[payload.callId] !== 'undefined') { + cmpCallbacks[payload.callId](payload.returnValue, payload.success); + } + } + } + } +} +/** + * If consentManagement module is enabled (ie included in setConfig), this hook function will attempt to fetch the + * user's encoded consent string from the supported CMP. Once obtained, the module will store this + * data as part of a gdprConsent object which gets transferred to adapterManager's gdprDataHandler object. + * This information is later added into the bidRequest object for any supported adapters to read/pass along to their system. + * @param {object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids. + * @param {function} fn required; The next function in the chain, used by hook.js + */ + + +function requestBidsHook(fn, reqBidsConfigObj) { + // preserves all module related variables for the current auction instance (used primiarily for concurrent auctions) + var hookConfig = { + context: this, + args: [reqBidsConfigObj], + nextFn: fn, + adUnits: reqBidsConfigObj.adUnits || pbjs.adUnits, + bidsBackHandler: reqBidsConfigObj.bidsBackHandler, + haveExited: false, + timer: null + }; // in case we already have consent (eg during bid refresh) + + if (consentData) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('User consent information already known. Pulling internally stored information...'); + return exitModule(null, hookConfig); + } + + if (!__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(Object.keys(cmpCallMap), userCMP)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("CMP framework (".concat(userCMP, ") is not a supported framework. Aborting consentManagement module and resuming auction.")); + return hookConfig.nextFn.apply(hookConfig.context, hookConfig.args); + } + + cmpCallMap[userCMP].call(this, processCmpData, cmpFailed, hookConfig); // only let this code run if module is still active (ie if the callbacks used by CMPs haven't already finished) + + if (!hookConfig.haveExited) { + if (consentTimeout === 0) { + processCmpData(undefined, hookConfig); + } else { + hookConfig.timer = setTimeout(cmpTimedOut.bind(null, hookConfig), consentTimeout); + } + } +} +/** + * This function checks the consent data provided by CMP to ensure it's in an expected state. + * If it's bad, we exit the module depending on config settings. + * If it's good, then we store the value and exits the module. + * @param {object} consentObject required; object returned by CMP that contains user's consent choices + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + +function processCmpData(consentObject, hookConfig) { + function checkV1Data(consentObject) { + var gdprApplies = consentObject && consentObject.getConsentData && consentObject.getConsentData.gdprApplies; + return !!(typeof gdprApplies !== 'boolean' || gdprApplies === true && !(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](consentObject.getConsentData.consentData) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](consentObject.getVendorConsents) && Object.keys(consentObject.getVendorConsents).length > 1)); + } + + function checkV2Data() { + // if CMP does not respond with a gdprApplies boolean, use defaultGdprScope (gdprScope) + var gdprApplies = consentObject && typeof consentObject.gdprApplies === 'boolean' ? consentObject.gdprApplies : gdprScope; + var tcString = consentObject && consentObject.tcString; + return !!(typeof gdprApplies !== 'boolean' || gdprApplies === true && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](tcString)); + } // do extra things for static config + + + if (userCMP === 'static') { + cmpVersion = consentObject.getConsentData ? 1 : consentObject.getTCData ? 2 : 0; // remove extra layer in static v2 data object so it matches normal v2 CMP object for processing step + + if (cmpVersion === 2) { + consentObject = consentObject.getTCData; + } + } // determine which set of checks to run based on cmpVersion + + + var checkFn = cmpVersion === 1 ? checkV1Data : cmpVersion === 2 ? checkV2Data : null; // Raise deprecation warning if 'allowAuctionWithoutConsent' is used with TCF 2. + + if (allowAuction.definedInConfig && cmpVersion === 2) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("'allowAuctionWithoutConsent' ignored for TCF 2"); + } else if (!allowAuction.definedInConfig && cmpVersion === 1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("'allowAuctionWithoutConsent' using system default: (".concat(DEFAULT_ALLOW_AUCTION_WO_CONSENT, ").")); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](checkFn)) { + if (checkFn(consentObject)) { + cmpFailed("CMP returned unexpected value during lookup process.", hookConfig, consentObject); + } else { + clearTimeout(hookConfig.timer); + storeConsentData(consentObject); + exitModule(null, hookConfig); + } + } else { + cmpFailed('Unable to derive CMP version to process data. Consent object does not conform to TCF v1 or v2 specs.', hookConfig, consentObject); + } +} +/** + * General timeout callback when interacting with CMP takes too long. + */ + + +function cmpTimedOut(hookConfig) { + cmpFailed('CMP workflow exceeded timeout threshold.', hookConfig); +} +/** + * This function contains the controlled steps to perform when there's a problem with CMP. + * @param {string} errMsg required; should be a short descriptive message for why the failure/issue happened. + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + * @param {object} extraArgs contains additional data that's passed along in the error/warning messages for easier debugging +*/ + + +function cmpFailed(errMsg, hookConfig, extraArgs) { + clearTimeout(hookConfig.timer); // still set the consentData to undefined when there is a problem as per config options + + if (allowAuction.value && cmpVersion === 1) { + storeConsentData(undefined); + } + + exitModule(errMsg, hookConfig, extraArgs); +} +/** + * Stores CMP data locally in module and then invokes gdprDataHandler.setConsentData() to make information available in adaptermanger.js for later in the auction + * @param {object} cmpConsentObject required; an object representing user's consent choices (can be undefined in certain use-cases for this function only) + */ + + +function storeConsentData(cmpConsentObject) { + if (cmpVersion === 1) { + consentData = { + consentString: cmpConsentObject ? cmpConsentObject.getConsentData.consentData : undefined, + vendorData: cmpConsentObject ? cmpConsentObject.getVendorConsents : undefined, + gdprApplies: cmpConsentObject ? cmpConsentObject.getConsentData.gdprApplies : gdprScope + }; + } else { + consentData = { + consentString: cmpConsentObject ? cmpConsentObject.tcString : undefined, + vendorData: cmpConsentObject || undefined, + gdprApplies: cmpConsentObject && typeof cmpConsentObject.gdprApplies === 'boolean' ? cmpConsentObject.gdprApplies : gdprScope + }; + } + + consentData.apiVersion = cmpVersion; + __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["gdprDataHandler"].setConsentData(consentData); +} +/** + * This function handles the exit logic for the module. + * While there are several paths in the module's logic to call this function, we only allow 1 of the 3 potential exits to happen before suppressing others. + * + * We prevent multiple exits to avoid conflicting messages in the console depending on certain scenarios. + * One scenario could be auction was canceled due to timeout with CMP being reached. + * While the timeout is the accepted exit and runs first, the CMP's callback still tries to process the user's data (which normally leads to a good exit). + * In this case, the good exit will be suppressed since we already decided to cancel the auction. + * + * Three exit paths are: + * 1. good exit where auction runs (CMP data is processed normally). + * 2. bad exit but auction still continues (warning message is logged, CMP data is undefined and still passed along). + * 3. bad exit with auction canceled (error message is logged). + * @param {string} errMsg optional; only to be used when there was a 'bad' exit. String is a descriptive message for the failure/issue encountered. + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + * @param {object} extraArgs contains additional data that's passed along in the error/warning messages for easier debugging + */ + + +function exitModule(errMsg, hookConfig, extraArgs) { + if (hookConfig.haveExited === false) { + hookConfig.haveExited = true; + var context = hookConfig.context; + var args = hookConfig.args; + var nextFn = hookConfig.nextFn; + + if (errMsg) { + if (allowAuction.value && cmpVersion === 1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](errMsg + " 'allowAuctionWithoutConsent' activated.", extraArgs); + nextFn.apply(context, args); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errMsg + ' Canceling auction as per consentManagement config.', extraArgs); + + if (typeof hookConfig.bidsBackHandler === 'function') { + hookConfig.bidsBackHandler(); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error executing bidsBackHandler'); + } + } + } else { + nextFn.apply(context, args); + } + } +} +/** + * Simply resets the module's consentData variable back to undefined, mainly for testing purposes + */ + + +function resetConsentData() { + consentData = undefined; + userCMP = undefined; + cmpVersion = 0; + __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["gdprDataHandler"].setConsentData(null); +} +/** + * A configuration function that initializes some module variables, as well as add a hook into the requestBids function + * @param {{cmp:string, timeout:number, allowAuctionWithoutConsent:boolean, defaultGdprScope:boolean}} config required; consentManagement module config settings; cmp (string), timeout (int), allowAuctionWithoutConsent (boolean) + */ + +function setConsentConfig(config) { + // if `config.gdpr` or `config.usp` exist, assume new config format. + // else for backward compatability, just use `config` + config = config.gdpr || config.usp ? config.gdpr : config; + + if (!config || _typeof(config) !== 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('consentManagement config not defined, exiting consent manager'); + return; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](config.cmpApi)) { + userCMP = config.cmpApi; + } else { + userCMP = DEFAULT_CMP; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("consentManagement config did not specify cmp. Using system default setting (".concat(DEFAULT_CMP, ").")); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](config.timeout)) { + consentTimeout = config.timeout; + } else { + consentTimeout = DEFAULT_CONSENT_TIMEOUT; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("consentManagement config did not specify timeout. Using system default setting (".concat(DEFAULT_CONSENT_TIMEOUT, ").")); + } + + if (typeof config.allowAuctionWithoutConsent === 'boolean') { + allowAuction.value = config.allowAuctionWithoutConsent; + allowAuction.definedInConfig = true; + } // if true, then gdprApplies should be set to true + + + gdprScope = config.defaultGdprScope === true; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('consentManagement module has been activated...'); + + if (userCMP === 'static') { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](config.consentData)) { + staticConsentData = config.consentData; + consentTimeout = 0; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("consentManagement config with cmpApi: 'static' did not specify consentData. No consents will be available to adapters."); + } + } + + if (!addedConsentHook) { + pbjs.requestBids.before(requestBidsHook, 50); + } + + addedConsentHook = true; +} +__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('consentManagement', function (config) { + return setConsentConfig(config.consentManagement); +}); + +/***/ }) + +},[337]); \ No newline at end of file diff --git a/build/dist/consentManagementUsp.js b/build/dist/consentManagementUsp.js new file mode 100644 index 00000000000..8c2d4242c82 --- /dev/null +++ b/build/dist/consentManagementUsp.js @@ -0,0 +1,347 @@ +pbjsChunk([247],{ + +/***/ 345: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(346); + + +/***/ }), + +/***/ 346: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "consentAPI", function() { return consentAPI; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "consentTimeout", function() { return consentTimeout; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticConsentData", function() { return staticConsentData; }); +/* harmony export (immutable) */ __webpack_exports__["requestBidsHook"] = requestBidsHook; +/* harmony export (immutable) */ __webpack_exports__["resetConsentData"] = resetConsentData; +/* harmony export (immutable) */ __webpack_exports__["setConsentConfig"] = setConsentConfig; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/** + * This module adds USPAPI (CCPA) consentManagement support to prebid.js. It + * interacts with supported USP Consent APIs to grab the user's consent + * information and make it available for any USP (CCPA) supported adapters to + * read/pass this information to their system. + */ + + + +var DEFAULT_CONSENT_API = 'iab'; +var DEFAULT_CONSENT_TIMEOUT = 50; +var USPAPI_VERSION = 1; +var consentAPI; +var consentTimeout; +var staticConsentData; +var consentData; +var addedConsentHook = false; // consent APIs + +var uspCallMap = { + 'iab': lookupUspConsent, + 'static': lookupStaticConsentData +}; +/** + * This function reads the consent string from the config to obtain the consent information of the user. + * @param {function(string)} cmpSuccess acts as a success callback when the value is read from config; pass along consentObject (string) from CMP + * @param {function(string)} cmpError acts as an error callback while interacting with the config string; pass along an error message (string) + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + +function lookupStaticConsentData(cmpSuccess, cmpError, hookConfig) { + cmpSuccess(staticConsentData, hookConfig); +} +/** + * This function handles interacting with an USP compliant consent manager to obtain the consent information of the user. + * Given the async nature of the USP's API, we pass in acting success/error callback functions to exit this function + * based on the appropriate result. + * @param {function(string)} uspSuccess acts as a success callback when USPAPI returns a value; pass along consentObject (string) from USPAPI + * @param {function(string)} uspError acts as an error callback while interacting with USPAPI; pass along an error message (string) + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + + +function lookupUspConsent(uspSuccess, uspError, hookConfig) { + function handleUspApiResponseCallbacks() { + var uspResponse = {}; + + function afterEach() { + if (uspResponse.usPrivacy) { + uspSuccess(uspResponse, hookConfig); + } else { + uspError('Unable to get USP consent string.', hookConfig); + } + } + + return { + consentDataCallback: function consentDataCallback(consentResponse, success) { + if (success && consentResponse.uspString) { + uspResponse.usPrivacy = consentResponse.uspString; + } + + afterEach(); + } + }; + } + + var callbackHandler = handleUspApiResponseCallbacks(); + var uspapiCallbacks = {}; // to collect the consent information from the user, we perform a call to USPAPI + // to collect the user's consent choices represented as a string (via getUSPData) + // the following code also determines where the USPAPI is located and uses the proper workflow to communicate with it: + // - use the USPAPI locator code to see if USP's located in the current window or an ancestor window. This works in friendly or cross domain iframes + // - if USPAPI is not found, the iframe function will call the uspError exit callback to abort the rest of the USPAPI workflow + // - try to call the __uspapi() function directly, otherwise use the postMessage() api + // find the CMP frame/window + + try { + // try to call __uspapi directly + window.__uspapi('getUSPData', USPAPI_VERSION, callbackHandler.consentDataCallback); + } catch (e) { + // must not have been accessible, try using postMessage() api + var f = window; + var uspapiFrame; + + while (!uspapiFrame) { + try { + if (f.frames['__uspapiLocator']) uspapiFrame = f; + } catch (e) {} + + if (f === window.top) break; + f = f.parent; + } + + if (!uspapiFrame) { + return uspError('USP CMP not found.', hookConfig); + } + + callUspApiWhileInIframe('getUSPData', uspapiFrame, callbackHandler.consentDataCallback); + } + + function callUspApiWhileInIframe(commandName, uspapiFrame, moduleCallback) { + /* Setup up a __uspapi function to do the postMessage and stash the callback. + This function behaves, from the caller's perspective, identicially to the in-frame __uspapi call (although it is not synchronous) */ + window.__uspapi = function (cmd, ver, callback) { + var callId = Math.random() + ''; + var msg = { + __uspapiCall: { + command: cmd, + version: ver, + callId: callId + } + }; + uspapiCallbacks[callId] = callback; + uspapiFrame.postMessage(msg, '*'); + }; + /** when we get the return message, call the stashed callback */ + + + window.addEventListener('message', readPostMessageResponse, false); // call uspapi + + window.__uspapi(commandName, USPAPI_VERSION, uspapiCallback); + + function readPostMessageResponse(event) { + var res = event && event.data && event.data.__uspapiReturn; + + if (res && res.callId) { + if (typeof uspapiCallbacks[res.callId] !== 'undefined') { + uspapiCallbacks[res.callId](res.returnValue, res.success); + delete uspapiCallbacks[res.callId]; + } + } + } + + function uspapiCallback(consentObject, success) { + window.removeEventListener('message', readPostMessageResponse, false); + moduleCallback(consentObject, success); + } + } +} +/** + * If consentManagementUSP module is enabled (ie included in setConfig), this hook function will attempt to fetch the + * user's encoded consent string from the supported USPAPI. Once obtained, the module will store this + * data as part of a uspConsent object which gets transferred to adapterManager's uspDataHandler object. + * This information is later added into the bidRequest object for any supported adapters to read/pass along to their system. + * @param {object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids. + * @param {function} fn required; The next function in the chain, used by hook.js + */ + + +function requestBidsHook(fn, reqBidsConfigObj) { + // preserves all module related variables for the current auction instance (used primiarily for concurrent auctions) + var hookConfig = { + context: this, + args: [reqBidsConfigObj], + nextFn: fn, + adUnits: reqBidsConfigObj.adUnits || pbjs.adUnits, + bidsBackHandler: reqBidsConfigObj.bidsBackHandler, + haveExited: false, + timer: null + }; + + if (!uspCallMap[consentAPI]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("USP framework (".concat(consentAPI, ") is not a supported framework. Aborting consentManagement module and resuming auction.")); + return hookConfig.nextFn.apply(hookConfig.context, hookConfig.args); + } + + uspCallMap[consentAPI].call(this, processUspData, uspapiFailed, hookConfig); // only let this code run if module is still active (ie if the callbacks used by USPs haven't already finished) + + if (!hookConfig.haveExited) { + if (consentTimeout === 0) { + processUspData(undefined, hookConfig); + } else { + hookConfig.timer = setTimeout(uspapiTimeout.bind(null, hookConfig), consentTimeout); + } + } +} +/** + * This function checks the consent data provided by USPAPI to ensure it's in an expected state. + * If it's bad, we exit the module depending on config settings. + * If it's good, then we store the value and exits the module. + * @param {object} consentObject required; object returned by USPAPI that contains user's consent choices + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + +function processUspData(consentObject, hookConfig) { + var valid = !!(consentObject && consentObject.usPrivacy); + + if (!valid) { + uspapiFailed("USPAPI returned unexpected value during lookup process.", hookConfig, consentObject); + return; + } + + clearTimeout(hookConfig.timer); + storeUspConsentData(consentObject); + exitModule(null, hookConfig); +} +/** + * General timeout callback when interacting with USPAPI takes too long. + */ + + +function uspapiTimeout(hookConfig) { + uspapiFailed('USPAPI workflow exceeded timeout threshold.', hookConfig); +} +/** + * This function contains the controlled steps to perform when there's a problem with USPAPI. + * @param {string} errMsg required; should be a short descriptive message for why the failure/issue happened. + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + * @param {object} extraArgs contains additional data that's passed along in the error/warning messages for easier debugging +*/ + + +function uspapiFailed(errMsg, hookConfig, extraArgs) { + clearTimeout(hookConfig.timer); + exitModule(errMsg, hookConfig, extraArgs); +} +/** + * Stores USP data locally in module and then invokes uspDataHandler.setConsentData() to make information available in adaptermanger.js for later in the auction + * @param {object} cmpConsentObject required; an object representing user's consent choices (can be undefined in certain use-cases for this function only) + */ + + +function storeUspConsentData(consentObject) { + if (consentObject && consentObject.usPrivacy) { + consentData = consentObject.usPrivacy; + __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["uspDataHandler"].setConsentData(consentData); + } +} +/** + * This function handles the exit logic for the module. + * There are a couple paths in the module's logic to call this function and we only allow 1 of the 2 potential exits to happen before suppressing others. + * + * We prevent multiple exits to avoid conflicting messages in the console depending on certain scenarios. + * One scenario could be auction was canceled due to timeout with USPAPI being reached. + * While the timeout is the accepted exit and runs first, the USP's callback still tries to process the user's data (which normally leads to a good exit). + * In this case, the good exit will be suppressed since we already decided to cancel the auction. + * + * Three exit paths are: + * 1. good exit where auction runs (USPAPI data is processed normally). + * 2. bad exit but auction still continues (warning message is logged, USPAPI data is undefined and still passed along). + * @param {string} errMsg optional; only to be used when there was a 'bad' exit. String is a descriptive message for the failure/issue encountered. + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + * @param {object} extraArgs contains additional data that's passed along in the error/warning messages for easier debugging + */ + + +function exitModule(errMsg, hookConfig, extraArgs) { + if (hookConfig.haveExited === false) { + hookConfig.haveExited = true; + var context = hookConfig.context; + var args = hookConfig.args; + var nextFn = hookConfig.nextFn; + + if (errMsg) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](errMsg + ' Resuming auction without consent data as per consentManagement config.', extraArgs); + } + + nextFn.apply(context, args); + } +} +/** + * Simply resets the module's consentData variable back to undefined, mainly for testing purposes + */ + + +function resetConsentData() { + consentData = undefined; + consentAPI = undefined; + __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["uspDataHandler"].setConsentData(null); +} +/** + * A configuration function that initializes some module variables, as well as add a hook into the requestBids function + * @param {object} config required; consentManagementUSP module config settings; usp (string), timeout (int), allowAuctionWithoutConsent (boolean) + */ + +function setConsentConfig(config) { + config = config.usp; + + if (!config || _typeof(config) !== 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('consentManagement.usp config not defined, exiting usp consent manager'); + return; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](config.cmpApi)) { + consentAPI = config.cmpApi; + } else { + consentAPI = DEFAULT_CONSENT_API; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("consentManagement.usp config did not specify cmpApi. Using system default setting (".concat(DEFAULT_CONSENT_API, ").")); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](config.timeout)) { + consentTimeout = config.timeout; + } else { + consentTimeout = DEFAULT_CONSENT_TIMEOUT; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("consentManagement.usp config did not specify timeout. Using system default setting (".concat(DEFAULT_CONSENT_TIMEOUT, ").")); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('USPAPI consentManagement module has been activated...'); + + if (consentAPI === 'static') { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](config.consentData) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](config.consentData.getUSPData)) { + if (config.consentData.getUSPData.uspString) staticConsentData = { + usPrivacy: config.consentData.getUSPData.uspString + }; + consentTimeout = 0; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("consentManagement config with cmpApi: 'static' did not specify consentData. No consents will be available to adapters."); + } + } + + if (!addedConsentHook) { + pbjs.requestBids.before(requestBidsHook, 50); + } + + addedConsentHook = true; +} +__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('consentManagement', function (config) { + return setConsentConfig(config.consentManagement); +}); + +/***/ }) + +},[345]); \ No newline at end of file diff --git a/build/dist/consumableBidAdapter.js b/build/dist/consumableBidAdapter.js new file mode 100644 index 00000000000..54538699c22 --- /dev/null +++ b/build/dist/consumableBidAdapter.js @@ -0,0 +1,197 @@ +pbjsChunk([246],{ + +/***/ 347: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(348); + + +/***/ }), + +/***/ 348: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + +var BIDDER_CODE = 'consumable'; +var BASE_URI = 'https://e.serverbid.com/api/v2'; +var siteId = 0; +var bidder = 'consumable'; +var 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 && bid.params.unitId && bid.params.unitName); + }, + + /** + * 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 ret = { + method: 'POST', + url: '', + data: '', + bidRequest: [] + }; + + if (validBidRequests.length < 1) { + return ret; + } // These variables are used in creating the user sync URL. + + + siteId = validBidRequests[0].params.siteId; + bidder = validBidRequests[0].bidder; + + var data = _extends({ + placements: [], + time: Date.now(), + url: bidderRequest.refererInfo.referer, + referrer: document.referrer, + source: [{ + 'name': 'prebidjs', + 'version': "4.2.0" + }] + }, validBidRequests[0].params); + + if (bidderRequest && bidderRequest.gdprConsent) { + data.gdpr = { + consent: bidderRequest.gdprConsent.consentString, + applies: typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies : true + }; + } + + if (bidderRequest && bidderRequest.uspConsent) { + data.ccpa = bidderRequest.uspConsent; + } + + validBidRequests.map(function (bid) { + var sizes = bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes || bid.sizes || []; + + var placement = _extends({ + divName: bid.bidId, + adTypes: bid.adTypes || getSize(sizes) + }, bid.params); + + if (placement.networkId && placement.siteId && placement.unitId && placement.unitName) { + data.placements.push(placement); + } + }); + ret.data = JSON.stringify(data); + ret.bidRequest = validBidRequests; + ret.bidderRequest = bidderRequest; + ret.url = BASE_URI; + 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; + var bids; + var bidId; + var bidObj; + 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.unitId = bidObj.params.unitId; + bid.unitName = bidObj.params.unitName; + bid.ad = retrieveAd(decision, bid.unitId, bid.unitName); + bid.currency = 'USD'; + bid.creativeId = decision.adId; + bid.ttl = 30; + bid.netRevenue = true; + bid.referrer = bidRequest.bidderRequest.refererInfo.referer; + bidResponses.push(bid); + } + } + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: 'https://sync.serverbid.com/ss/' + siteId + '.html' + }]; + } + + if (syncOptions.pixelEnabled && serverResponses.length > 0) { + return serverResponses[0].body.pixels; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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, unitId, unitName) { + var ad = decision.contents && decision.contents[0] && decision.contents[0].body + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"](decision.impressionUrl); + return ad; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[347]); \ No newline at end of file diff --git a/build/dist/convergeBidAdapter.js b/build/dist/convergeBidAdapter.js new file mode 100644 index 00000000000..37f8df4fea0 --- /dev/null +++ b/build/dist/convergeBidAdapter.js @@ -0,0 +1,364 @@ +pbjsChunk([245],{ + +/***/ 349: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(350); + + +/***/ }), + +/***/ 350: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony export (immutable) */ __webpack_exports__["getSyncUrl"] = getSyncUrl; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'converge'; +var ENDPOINT_URL = 'https://tech.convergd.com/hb'; +var TIME_TO_LIVE = 360; +var SYNC_URL = 'https://tech.convergd.com/push_sync'; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; +var hasSynced = false; +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 = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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.uid; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - an array of bids + * @param {bidderRequest} bidderRequest - bidder request object + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var auids = []; + var bidsMap = {}; + var slotsMapByUid = {}; + var sizeMap = {}; + var bids = validBidRequests || []; + var priceType = 'net'; + var pageKeywords; + var reqId; + bids.forEach(function (bid) { + if (bid.params.priceType === 'gross') { + priceType = 'gross'; + } + + reqId = bid.bidderRequestId; + var uid = bid.params.uid, + adUnitCode = bid.adUnitCode; + auids.push(uid); + var sizesId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes); + + if (!pageKeywords && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.params.keywords)) { + var keywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"](bid.params.keywords); + + if (keywords.length > 0) { + keywords.forEach(deleteValues); + } + + pageKeywords = keywords; + } + + if (!slotsMapByUid[uid]) { + slotsMapByUid[uid] = {}; + } + + var slotsMap = slotsMapByUid[uid]; + + if (!slotsMap[adUnitCode]) { + slotsMap[adUnitCode] = { + adUnitCode: adUnitCode, + bids: [bid], + parents: [] + }; + } else { + slotsMap[adUnitCode].bids.push(bid); + } + + var slot = slotsMap[adUnitCode]; + sizesId.forEach(function (sizeId) { + sizeMap[sizeId] = true; + + if (!bidsMap[uid]) { + bidsMap[uid] = {}; + } + + if (!bidsMap[uid][sizeId]) { + bidsMap[uid][sizeId] = [slot]; + } else { + bidsMap[uid][sizeId].push(slot); + } + + slot.parents.push({ + parent: bidsMap[uid], + key: sizeId, + uid: uid + }); + }); + }); + var payload = { + pt: priceType, + auids: auids.join(','), + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](sizeMap).join(','), + r: reqId, + wrapperType: 'Prebid_js', + wrapperVersion: "4.2.0" + }; + + if (pageKeywords) { + payload.keywords = JSON.stringify(pageKeywords); + } + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + payload.u = bidderRequest.refererInfo.referer; + } + + if (bidderRequest.timeout) { + payload.wtimeout = bidderRequest.timeout; + } + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + } + + payload.gdpr_applies = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? Number(bidderRequest.gdprConsent.gdprApplies) : 1; + } + + if (bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + } + + return { + method: 'GET', + url: ENDPOINT_URL, + data: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](payload).replace(/\&$/, ''), + bidsMap: bidsMap + }; + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {*} serverResponse A successful response from the server. + * @param {*} bidRequest + * @param {Renderer} RendererConst + * @return {Bid[]} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var RendererConst = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */]; + serverResponse = serverResponse && serverResponse.body; + var bidResponses = []; + var bidsMap = bidRequest.bidsMap; + var priceType = bidRequest.data.pt; + var errorMessage; + 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, RendererConst); + }); + } + + if (errorMessage) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + if (!hasSynced && syncOptions.pixelEnabled) { + var params = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += "&gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + params += "&gdpr_consent=".concat(gdprConsent.consentString); + } + } + + if (uspConsent) { + params += "&us_privacy=".concat(uspConsent); + } + + hasSynced = true; + return { + type: 'image', + url: SYNC_URL + params + }; + } + } +}; + +function isPopulatedArray(arr) { + return !!(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](arr) && arr.length > 0); +} + +function deleteValues(keyPairObj) { + if (isPopulatedArray(keyPairObj.value) && keyPairObj.value[0] === '') { + delete keyPairObj.value; + } +} + +function _getBidFromResponse(respItem) { + if (!respItem) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.emptySeatbid); + } else if (!respItem.bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); + } else if (!respItem.bid[0]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.noBid); + } + + return respItem && respItem.bid && respItem.bid[0]; +} + +function _addBidResponse(serverBid, bidsMap, priceType, bidResponses, RendererConst) { + if (!serverBid) return; + var errorMessage; + 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) { + var sizeId = "".concat(serverBid.w, "x").concat(serverBid.h); + + if (awaitingBids[sizeId]) { + var slot = awaitingBids[sizeId][0]; + var bid = slot.bids.shift(); + var bidResponse = { + requestId: bid.bidId, + // bid.bidderRequestId, + bidderCode: spec.code, + cpm: serverBid.price, + width: serverBid.w, + height: serverBid.h, + creativeId: serverBid.auid, + // bid.bidId, + currency: 'EUR', + netRevenue: priceType !== 'gross', + ttl: TIME_TO_LIVE, + dealId: serverBid.dealid + }; + + if (serverBid.content_type === 'video' || !serverBid.content_type && bid.mediaTypes && bid.mediaTypes.video) { + bidResponse.vastXml = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.adResponse = { + content: bidResponse.vastXml + }; + + if (!bid.renderer && (!bid.mediaTypes || !bid.mediaTypes.video || bid.mediaTypes.video.context === 'outstream')) { + bidResponse.renderer = createRenderer(bidResponse, { + id: bid.bidId, + url: RENDERER_URL + }, RendererConst); + } + } else { + bidResponse.ad = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + } + + bidResponses.push(bidResponse); + + if (!slot.bids.length) { + slot.parents.forEach(function (_ref) { + var parent = _ref.parent, + key = _ref.key, + uid = _ref.uid; + var index = parent[key].indexOf(slot); + + if (index > -1) { + parent[key].splice(index, 1); + } + + if (!parent[key].length) { + delete parent[key]; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](parent).length) { + delete bidsMap[uid]; + } + } + }); + } + } + } else { + errorMessage = LOG_ERROR_MESS.noPlacementCode + serverBid.auid; + } + } + + if (errorMessage) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + } +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + targetId: bid.adUnitCode, + adResponse: bid.adResponse + }); + }); +} + +function createRenderer(bid, rendererParams, RendererConst) { + var rendererInst = RendererConst.install({ + id: rendererParams.id, + url: rendererParams.url, + loaded: false + }); + + try { + rendererInst.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return rendererInst; +} + +function resetUserSync() { + hasSynced = false; +} +function getSyncUrl() { + return SYNC_URL; +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[349]); \ No newline at end of file diff --git a/build/dist/conversantBidAdapter.js b/build/dist/conversantBidAdapter.js new file mode 100644 index 00000000000..c2fe86bb83b --- /dev/null +++ b/build/dist/conversantBidAdapter.js @@ -0,0 +1,423 @@ +pbjsChunk([244],{ + +/***/ 351: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(352); + + +/***/ }), + +/***/ 352: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); + + + + +var GVLID = 24; +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(GVLID); +var BIDDER_CODE = 'conversant'; +var URL = 'https://web.hb.ad.cpe.dotomi.com/cvx/client/hb/ortb/25'; +var spec = { + code: BIDDER_CODE, + gvlid: GVLID, + aliases: ['cnvr'], + // short code + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Missing bid parameters'); + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.site_id)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': mimes should be specified for videos'); + } else if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.params.mimes) || !bid.params.mimes.every(function (s) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](s); + })) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 + * @param bidderRequest + * @return {ServerRequest} Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var page = bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : ''; + var siteId = ''; + var requestId = ''; + var pubcid = null; + var pubcidName = '_pubcid'; + var bidurl = URL; + var conversantImps = validBidRequests.map(function (bid) { + var bidfloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidfloor', bid.params); + siteId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('site_id', bid.params) || siteId; + pubcidName = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('pubcid_name', bid.params) || pubcidName; + requestId = bid.auctionId; + var imp = { + id: bid.bidId, + secure: 1, + bidfloor: bidfloor || 0, + displaymanager: 'Prebid.js', + displaymanagerver: "4.2.0" + }; + copyOptProperty(bid.params.tag_id, imp, 'tagid'); + + if (isVideoRequest(bid)) { + var videoData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video') || {}; + var format = convertSizes(videoData.playerSize || bid.sizes); + var video = {}; + + if (format && format[0]) { + copyOptProperty(format[0].w, video, 'w'); + copyOptProperty(format[0].h, video, 'h'); + } + + copyOptProperty(bid.params.position, video, 'pos'); + copyOptProperty(bid.params.mimes || videoData.mimes, video, 'mimes'); + copyOptProperty(bid.params.maxduration, video, 'maxduration'); + copyOptProperty(bid.params.protocols || videoData.protocols, video, 'protocols'); + copyOptProperty(bid.params.api || videoData.api, video, 'api'); + imp.video = video; + } else { + var bannerData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner') || {}; + + var _format = convertSizes(bannerData.sizes || bid.sizes); + + var banner = { + format: _format + }; + copyOptProperty(bid.params.position, banner, 'pos'); + imp.banner = banner; + } + + if (bid.userId && bid.userId.pubcid) { + pubcid = bid.userId.pubcid; + } else if (bid.crumbs && bid.crumbs.pubcid) { + pubcid = bid.crumbs.pubcid; + } + + if (bid.params.white_label_url) { + bidurl = bid.params.white_label_url; + } + + 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 + }; + var userExt = {}; + + if (bidderRequest) { + // Add GDPR flag and consent string + if (bidderRequest.gdprConsent) { + userExt.consent = bidderRequest.gdprConsent.consentString; + + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + } + + if (!pubcid) { + pubcid = readStoredValue(pubcidName); + } // Add common id if available + + + if (pubcid) { + userExt.fpc = pubcid; + } // Add Eids if available + + + var eids = collectEids(validBidRequests); + + if (eids.length > 0) { + userExt.eids = eids; + } // Only add the user object if it's not empty + + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userExt)) { + payload.user = { + ext: userExt + }; + } + + return { + method: 'POST', + url: bidurl, + data: payload + }; + }, + + /** + * 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 = []; + var requestMap = {}; + serverResponse = serverResponse.body; + + if (bidRequest && bidRequest.data && bidRequest.data.imp) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidRequest.data.imp, function (imp) { + return requestMap[imp.id] = imp; + }); + } + + if (serverResponse && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverResponse.seatbid)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.seatbid, function (bidList) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_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) { + if (responseAd.charAt(0) === '<') { + bid.vastXml = responseAd; + } else { + bid.vastUrl = responseAd; + } + + bid.mediaType = 'video'; + bid.width = request.video.w; + bid.height = request.video.h; + } else { + bid.ad = responseAd + ''; + bid.width = conversantBid.w; + bid.height = conversantBid.h; + } + + bidResponses.push(bid); + } + }); + }); + } + + return bidResponses; + }, + + /** + * Covert bid param types for S2S + * @param {Object} params bid params + * @param {Boolean} isOpenRtb boolean to check openrtb2 protocol + * @return {Object} params bid params + */ + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'site_id': 'string', + 'secure': 'number', + 'mobile': 'number' + }, params); + } +}; +/** + * 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 {Array.>} bidSizes - arrays of widths and heights + * @returns {object[]} Array of objects with w and h + */ + + +function convertSizes(bidSizes) { + var format; + + if (Array.isArray(bidSizes)) { + if (bidSizes.length === 2 && typeof bidSizes[0] === 'number' && typeof bidSizes[1] === 'number') { + format = [{ + w: bidSizes[0], + h: bidSizes[1] + }]; + } else { + format = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_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' || !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} +/** + * Copy property if exists from src to dst + * + * @param {object} src - source object + * @param {object} dst - destination object + * @param {string} dstName - destination property name + */ + + +function copyOptProperty(src, dst, dstName) { + if (src) { + dst[dstName] = src; + } +} +/** + * Collect IDs from validBidRequests and store them as an extended id array + * @param bidRequests valid bid requests + */ + + +function collectEids(bidRequests) { + var request = bidRequests[0]; // bidRequests have the same userId object + + var eids = []; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](request.userIdAsEids) && request.userIdAsEids.length > 0) { + // later following white-list can be converted to block-list if needed + var requiredSourceValues = { + 'adserver.org': 1, + 'liveramp.com': 1, + 'criteo.com': 1, + 'id5-sync.com': 1, + 'parrable.com': 1, + 'digitru.st': 1, + 'liveintent.com': 1 + }; + request.userIdAsEids.forEach(function (eid) { + if (requiredSourceValues.hasOwnProperty(eid.source)) { + eids.push(eid); + } + }); + } + + return eids; +} +/** + * Look for a stored value from both cookie and local storage and return the first value found. + * @param key Key for the search + * @return {string} Stored value + */ + + +function readStoredValue(key) { + var storedValue; + + try { + // check cookies first + storedValue = storage.getCookie(key); + + if (!storedValue) { + // check expiration time before reading local storage + var storedValueExp = storage.getDataFromLocalStorage("".concat(key, "_exp")); + + if (storedValueExp === '' || storedValueExp && new Date(storedValueExp).getTime() - Date.now() > 0) { + storedValue = storage.getDataFromLocalStorage(key); + storedValue = storedValue ? decodeURIComponent(storedValue) : storedValue; + } + } // deserialize JSON if needed + + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](storedValue) && storedValue.charAt(0) === '{') { + storedValue = JSON.parse(storedValue); + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e); + } + + return storedValue; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[351]); \ No newline at end of file diff --git a/build/dist/cosmosBidAdapter.js b/build/dist/cosmosBidAdapter.js new file mode 100644 index 00000000000..4071a3e3727 --- /dev/null +++ b/build/dist/cosmosBidAdapter.js @@ -0,0 +1,465 @@ +pbjsChunk([243],{ + +/***/ 353: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(354); + + +/***/ }), + +/***/ 354: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'cosmos'; +var BID_ENDPOINT = 'https://bid.cosmoshq.com/openrtb2/bids'; +var USER_SYNC_ENDPOINT = 'https://sync.cosmoshq.com/js/v1/usersync.html'; +var HTTP_POST = 'POST'; +var LOG_PREFIX = 'COSMOS: '; +var DEFAULT_CURRENCY = 'USD'; +var HTTPS = 'https:'; +var MEDIA_TYPES = 'mediaTypes'; +var MIMES = 'mimes'; +var DEFAULT_NET_REVENUE = false; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]], + + /** + * generate UUID + **/ + _createUUID: function _createUUID() { + return '' + new Date().getTime(); + }, + + /** + * copy object if not null + **/ + _copyObject: function _copyObject(src, dst) { + if (src) { + // copy complete object + Object.keys(src).forEach(function (param) { + return dst[param] = src[param]; + }); + } + }, + + /** + * parse object + **/ + _parse: function _parse(rawPayload) { + try { + if (rawPayload) { + return JSON.parse(rawPayload); + } + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](LOG_PREFIX, 'Exception: ', ex); + } + + return null; + }, + + /** + * 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) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](LOG_PREFIX, 'nil/empty bid object'); + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](bid.params.publisherId) || !__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isNumber"](bid.params.publisherId)) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](LOG_PREFIX, 'publisherId is mandatory and must be numeric. Ad Unit: ', JSON.stringify(bid)); + return false; + } // video bid request validation + + + if (bid.hasOwnProperty(MEDIA_TYPES) && bid.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */])) { + if (!bid.mediaTypes.video.hasOwnProperty(MIMES) || !__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](bid.mediaTypes.video.mimes) || bid.mediaTypes.video.mimes.length === 0) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](LOG_PREFIX, 'mimes are mandatory for video bid request. Ad Unit: ', JSON.stringify(bid)); + 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, bidderRequest) { + if (validBidRequests.length === 0) { + return []; + } + + var refererInfo; + + if (bidderRequest && bidderRequest.refererInfo) { + refererInfo = bidderRequest.refererInfo; + } + + var clonedBidRequests = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepClone"](validBidRequests); + return clonedBidRequests.map(function (bidRequest) { + var oRequest = spec._createRequest(bidRequest, refererInfo); + + if (oRequest) { + spec._setGDPRParams(bidderRequest, oRequest); + + return { + method: HTTP_POST, + url: BID_ENDPOINT, + data: JSON.stringify(oRequest) + }; + } + }); + }, + + /** + * 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, request) { + var response = serverResponse.body; + var bidResponses = []; + + try { + if (response.seatbid) { + var currency = response.cur ? response.cur : DEFAULT_CURRENCY; + response.seatbid.forEach(function (seatbid) { + var bids = seatbid.bid ? seatbid.bid : []; + bids.forEach(function (bid) { + var bidResponse = { + requestId: bid.impid, + cpm: (parseFloat(bid.price) || 0).toFixed(2), + width: bid.w, + height: bid.h, + creativeId: bid.crid, + currency: currency, + netRevenue: DEFAULT_NET_REVENUE, + ttl: 300 + }; + + if (bid.dealid) { + bidResponse.dealId = bid.dealid; + } + + var req = spec._parse(request.data); + + if (req.imp && req.imp.length > 0) { + req.imp.forEach(function (impr) { + if (impr.id === bid.impid) { + if (impr.banner) { + bidResponse.ad = bid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + } else { + bidResponse.width = bid.hasOwnProperty('w') ? bid.w : impr.video.w; + bidResponse.height = bid.hasOwnProperty('h') ? bid.h : impr.video.h; + bidResponse.vastXml = bid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + } + } + }); + } + + bidResponses.push(bidResponse); + }); + }); + } + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](LOG_PREFIX, 'Exception: ', ex); + } + + 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) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: USER_SYNC_ENDPOINT + }]; + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"](LOG_PREFIX + 'Please enable iframe based user sync.'); + } + }, + + /** + * create IAB standard OpenRTB bid request + **/ + _createRequest: function _createRequest(bidRequests, refererInfo) { + var oRequest = {}; + + try { + oRequest = { + id: spec._createUUID(), + imp: spec._createImpressions(bidRequests), + user: {}, + ext: {} + }; + + var site = spec._createSite(bidRequests, refererInfo); + + var app = spec._createApp(bidRequests); + + var device = spec._createDevice(bidRequests); + + if (app) { + oRequest.app = app; + } + + if (site) { + oRequest.site = site; + } + + if (device) { + oRequest.device = device; + } + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](LOG_PREFIX, 'Exception: ', ex); + oRequest = null; + } + + return oRequest; + }, + + /** + * create impression array objects + **/ + _createImpressions: function _createImpressions(request) { + var impressions = []; + + var impression = spec._creatImpression(request); + + if (impression) { + impressions.push(impression); + } + + return impressions; + }, + + /** + * create impression (single) object + **/ + _creatImpression: function _creatImpression(request) { + if (!request.hasOwnProperty(MEDIA_TYPES)) { + return undefined; + } + + var params = request && request.params ? request.params : null; + var impression = { + id: request.bidId ? request.bidId : spec._createUUID(), + secure: window.location.protocol === HTTPS ? 1 : 0, + bidfloorcur: request.params.currency ? request.params.currency : DEFAULT_CURRENCY + }; + + if (params.bidFloor) { + impression.bidfloor = params.bidFloor; + } + + if (params.tagId) { + impression.tagid = params.tagId.toString(); + } + + var banner; + var video; + var mediaType; + + for (mediaType in request.mediaTypes) { + switch (mediaType) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + banner = spec._createBanner(request); + + if (banner) { + impression.banner = banner; + } + + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + video = spec._createVideo(request); + + if (video) { + impression.video = video; + } + + break; + } + } + + return impression.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]) || impression.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]) ? impression : undefined; + }, + + /** + * create the banner object + **/ + _createBanner: function _createBanner(request) { + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](request, 'mediaTypes.banner')) { + var banner = {}; + var sizes = request.mediaTypes.banner.sizes; + + if (sizes && __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](sizes) && sizes.length > 0) { + var format = []; + banner.w = sizes[0][0]; + banner.h = sizes[0][1]; + sizes.forEach(function (size) { + format.push({ + w: size[0], + h: size[1] + }); + }); + banner.format = format; + } + + spec._copyObject(request.mediaTypes.banner, banner); + + spec._copyObject(request.params.banner, banner); + + return banner; + } + + return undefined; + }, + + /** + * create video object + **/ + _createVideo: function _createVideo(request) { + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](request, 'mediaTypes.video')) { + var video = {}; + var sizes = request.mediaTypes.video.playerSize; + + if (sizes && __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](sizes) && sizes.length > 1) { + video.w = sizes[0]; + video.h = sizes[1]; + } + + spec._copyObject(request.mediaTypes.video, video); + + spec._copyObject(request.params.video, video); + + return video; + } + + return undefined; + }, + + /** + * create site object + **/ + _createSite: function _createSite(request, refererInfo) { + var rSite = request.params.site; + + if (rSite || !request.params.app) { + var site = {}; + + spec._copyObject(rSite, site); + + if (refererInfo) { + if (refererInfo.referer) { + site.ref = encodeURIComponent(refererInfo.referer); + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](refererInfo.stack) && refererInfo.stack.length > 0) { + site.page = encodeURIComponent(refererInfo.stack[0]); + var anchrTag = document.createElement('a'); + anchrTag.href = site.page; + site.domain = anchrTag.hostname; + } + } // override publisher object + + + site.publisher = { + id: request.params.publisherId.toString() + }; + return site; + } + + return undefined; + }, + + /** + * create app object + **/ + _createApp: function _createApp(request) { + var rApp = request.params.app; + + if (rApp) { + var app = {}; + + spec._copyObject(rApp, app); // override publisher object + + + app.publisher = { + id: request.params.publisherId.toString() + }; + return app; + } + + return undefined; + }, + + /** + * create device obejct + **/ + _createDevice: function _createDevice(request) { + var device = {}; + var rDevice = request.params.device; + + spec._copyObject(rDevice, device); + + device.dnt = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getDNT"]() ? 1 : 0; + device.ua = navigator.userAgent; + device.language = navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage; + device.w = window.screen.width || window.innerWidth; + device.h = window.screen.height || window.innerHeigh; + return device; + }, + + /** + * set GDPR parameters + **/ + _setGDPRParams: function _setGDPRParams(bidderRequest, oRequest) { + if (!bidderRequest || !bidderRequest.gdprConsent) { + return; + } + + oRequest.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0 + } + }; + oRequest.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[353]); \ No newline at end of file diff --git a/build/dist/cpmstarBidAdapter.js b/build/dist/cpmstarBidAdapter.js new file mode 100644 index 00000000000..b5af9dd8635 --- /dev/null +++ b/build/dist/cpmstarBidAdapter.js @@ -0,0 +1,155 @@ +pbjsChunk([242],{ + +/***/ 355: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(356); + + +/***/ }), + +/***/ 356: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); + + + + +var BIDDER_CODE = 'cpmstar'; +var ENDPOINT_DEV = 'https://dev.server.cpmstar.com/view.aspx'; +var ENDPOINT_STAGING = 'https://staging.server.cpmstar.com/view.aspx'; +var ENDPOINT_PRODUCTION = 'https://server.cpmstar.com/view.aspx'; +var DEFAULT_TTL = 300; +var DEFAULT_CURRENCY = 'USD'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + pageID: Math.floor(Math.random() * 10e6), + getMediaType: function getMediaType(bidRequest) { + if (bidRequest == null) return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + return !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') ? __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */] : __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + }, + getPlayerSize: function getPlayerSize(bidRequest) { + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize'); + if (playerSize == null) return [640, 440]; + if (playerSize[0] != null) playerSize = playerSize[0]; + if (playerSize == null || playerSize[0] == null || playerSize[1] == null) return [640, 440]; + return playerSize; + }, + isBidRequestValid: function isBidRequestValid(bid) { + return typeof bid.params.placementId === 'string' && !!bid.params.placementId.length || typeof bid.params.placementId === 'number'; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var requests = []; // This reference to window.top can cause issues when loaded in an iframe if not protected with a try/catch. + + for (var i = 0; i < validBidRequests.length; i++) { + var bidRequest = validBidRequests[i]; + var referer = encodeURIComponent(bidderRequest.refererInfo.referer); + var e = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('endpoint', bidRequest.params); + var ENDPOINT = e == 'dev' ? ENDPOINT_DEV : e == 'staging' ? ENDPOINT_STAGING : ENDPOINT_PRODUCTION; + var mediaType = spec.getMediaType(bidRequest); + var playerSize = spec.getPlayerSize(bidRequest); + var videoArgs = '&fv=0' + (playerSize ? '&w=' + playerSize[0] + '&h=' + playerSize[1] : ''); + var url = ENDPOINT + '?media=' + mediaType + (mediaType == __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] ? videoArgs : '') + '&json=c_b&mv=1&poolid=' + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('placementId', bidRequest.params) + '&reachedTop=' + encodeURIComponent(bidderRequest.refererInfo.reachedTop) + '&requestid=' + bidRequest.bidId + '&referer=' + encodeURIComponent(referer); + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString != null) { + url += '&gdpr_consent=' + bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest.gdprConsent.gdprApplies != null) { + url += '&gdpr=' + (bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } + } + + if (bidderRequest.uspConsent != null) { + url += '&us_privacy=' + bidderRequest.uspConsent; + } + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa')) { + url += '&tfcd=' + (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') ? 1 : 0); + } + + requests.push({ + method: 'GET', + url: url, + bidRequest: bidRequest + }); + } + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidRequest = request.bidRequest; + var mediaType = spec.getMediaType(bidRequest); + var bidResponses = []; + + if (!Array.isArray(serverResponse.body)) { + serverResponse.body = [serverResponse.body]; + } + + for (var i = 0; i < serverResponse.body.length; i++) { + var raw = serverResponse.body[i]; + var rawBid = raw.creatives[0]; + + if (!rawBid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('cpmstarBidAdapter: server response failed check'); + return; + } + + var cpm = parseFloat(rawBid.cpm) || 0; + + if (!cpm) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('cpmstarBidAdapter: server response failed check. Missing cpm'); + return; + } + + var bidResponse = { + requestId: rawBid.requestid, + cpm: cpm, + width: rawBid.width || 0, + height: rawBid.height || 0, + currency: rawBid.currency ? rawBid.currency : DEFAULT_CURRENCY, + netRevenue: rawBid.netRevenue ? rawBid.netRevenue : true, + ttl: rawBid.ttl ? rawBid.ttl : DEFAULT_TTL, + creativeId: rawBid.creativeid || 0 + }; + + if (rawBid.hasOwnProperty('dealId')) { + bidResponse.dealId = rawBid.dealId; + } + + if (mediaType == __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */] && rawBid.code) { + bidResponse.ad = rawBid.code + (rawBid.px_cr ? "\n" : ''); + } else if (mediaType == __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] && rawBid.creativemacros && rawBid.creativemacros.HTML5VID_VASTSTRING) { + var playerSize = spec.getPlayerSize(bidRequest); + + if (playerSize != null) { + bidResponse.width = playerSize[0]; + bidResponse.height = playerSize[1]; + } + + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.vastXml = rawBid.creativemacros.HTML5VID_VASTSTRING; + } else { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('bad response', rawBid); + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[355]); \ No newline at end of file diff --git a/build/dist/craftBidAdapter.js b/build/dist/craftBidAdapter.js new file mode 100644 index 00000000000..a3c937c6b70 --- /dev/null +++ b/build/dist/craftBidAdapter.js @@ -0,0 +1,312 @@ +pbjsChunk([241],{ + +/***/ 357: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(358); + + +/***/ }), + +/***/ 358: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_storageManager_js__ = __webpack_require__(9); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + + +var BIDDER_CODE = 'craft'; +var URL = 'https://gacraft.jp/prebid-v3'; +var TTL = 360; +var storage = Object(__WEBPACK_IMPORTED_MODULE_6__src_storageManager_js__["b" /* getStorageManager */])(); +var spec = { + code: BIDDER_CODE, + aliases: ['craft'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.sitekey && !!bid.params.placementId && !isAmp(); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var tags = bidRequests.map(bidToTag); + var schain = bidRequests[0].schain; + var payload = { + tags: _toConsumableArray(tags), + ua: navigator.userAgent, + sdk: { + version: "4.2.0" + }, + schain: schain + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.refererInfo) { + var refererinfo = { + rd_ref: bidderRequest.refererInfo.referer, + rd_top: bidderRequest.refererInfo.reachedTop, + rd_ifs: bidderRequest.refererInfo.numIframes + }; + + if (bidderRequest.refererInfo.stack) { + refererinfo.rd_stk = bidderRequest.refererInfo.stack.join(','); + } + + payload.referrer_detection = refererinfo; + } + + var request = formatRequest(payload, bidderRequest); + return request; + }, + interpretResponse: function interpretResponse(serverResponse, _ref) { + var _this = this; + + var bidderRequest = _ref.bidderRequest; + + try { + serverResponse = serverResponse.body; + var bids = []; + + if (!serverResponse) { + return []; + } + + if (serverResponse.error) { + var errorMessage = "in response for ".concat(bidderRequest.bidderCode, " adapter"); + + if (serverResponse.error) { + errorMessage += ": ".concat(serverResponse.error); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bids; + } + + if (serverResponse.tags) { + serverResponse.tags.forEach(function (serverBid) { + var rtbBid = getRtbBid(serverBid); + + if (rtbBid) { + if (rtbBid.cpm !== 0 && __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default()(_this.supportedMediaTypes, rtbBid.ad_type)) { + var bid = newBid(serverBid, rtbBid, bidderRequest); + bid.mediaType = parseMediaType(rtbBid); + bids.push(bid); + } + } + }); + } + + return bids; + } catch (e) { + return []; + } + }, + transformBidParams: function transformBidParams(params, isOpenRtb) { + params = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'sitekey': 'string', + 'placementId': 'string', + 'keywords': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"] + }, params); + + if (isOpenRtb) { + if (isPopulatedArray(params.keywords)) { + params.keywords.forEach(deleteValues); + } + + Object.keys(params).forEach(function (paramKey) { + var convertedKey = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertCamelToUnderscore"](paramKey); + + if (convertedKey !== paramKey) { + params[convertedKey] = params[paramKey]; + delete params[paramKey]; + } + }); + } + + return params; + }, + onBidWon: function onBidWon(bid) { + var xhr = new XMLHttpRequest(); + xhr.open('POST', bid._prebidWon); + xhr.send(); + } +}; + +function isPopulatedArray(arr) { + return !!(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](arr) && arr.length > 0); +} + +function deleteValues(keyPairObj) { + if (isPopulatedArray(keyPairObj.value) && keyPairObj.value[0] === '') { + delete keyPairObj.value; + } +} + +function hasPurpose1Consent(bidderRequest) { + var result = true; + + if (bidderRequest && bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.gdprApplies && bidderRequest.gdprConsent.apiVersion === 2) { + result = !!(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest.gdprConsent, 'vendorData.purpose.consents.1') === true); + } + } + + return result; +} + +function formatRequest(payload, bidderRequest) { + var options = {}; + + if (!hasPurpose1Consent(bidderRequest)) { + options = { + withCredentials: false + }; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: URL, + data: payloadString, + bidderRequest: bidderRequest, + options: options + }; +} + +function newBid(serverBid, rtbBid, bidderRequest) { + var bidRequest = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidRequest"](serverBid.uuid, [bidderRequest]); + var bid = { + requestId: serverBid.uuid, + cpm: rtbBid.cpm, + currency: 'JPY', + width: rtbBid.rtb.banner.width, + height: rtbBid.rtb.banner.height, + ad: rtbBid.rtb.banner.content, + ttl: TTL, + creativeId: rtbBid.creative_id, + netRevenue: false, + // ??? + dealId: rtbBid.deal_id, + meta: null, + _adUnitCode: bidRequest.adUnitCode, + _bidKey: serverBid.bid_key, + _prebidWon: serverBid.won_url + }; + return bid; +} + +function bidToTag(bid) { + var tag = {}; + + for (var k in bid.params) { + tag[k] = bid.params[k]; + } + + try { + if (storage.hasLocalStorage()) { + tag.uid = JSON.parse(storage.getDataFromLocalStorage("".concat(bid.params.sitekey, "_uid"))); + } + } catch (e) {} + + tag.sizes = bid.sizes; + tag.primary_size = tag.sizes[0]; + tag.ad_types = []; + tag.uuid = bid.bidId; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.params.keywords)) { + var keywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"](bid.params.keywords); + + if (keywords.length > 0) { + keywords.forEach(deleteValues); + } + + tag.keywords = keywords; + } + + var adUnit = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(__WEBPACK_IMPORTED_MODULE_3__src_auctionManager_js__["a" /* auctionManager */].getAdUnits(), function (au) { + return bid.transactionId === au.transactionId; + }); + + if (adUnit && adUnit.mediaTypes && adUnit.mediaTypes.banner) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]); + } + + if (tag.ad_types.length === 0) { + delete tag.ad_types; + } + + return tag; +} + +function getRtbBid(tag) { + return tag && tag.ads && tag.ads.length && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(tag.ads, function (ad) { + return ad.rtb; + }); +} + +function parseMediaType(rtbBid) { + var adType = rtbBid.ad_type; + + if (adType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]) { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + } else if (adType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]) { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + } else { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } +} + +function isAmp() { + try { + var ampContext = window.context || window.parent.context; + + if (ampContext && ampContext.pageViewId) { + return ampContext; + } + + return false; + } catch (e) { + return false; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[357]); \ No newline at end of file diff --git a/build/dist/criteoBidAdapter.js b/build/dist/criteoBidAdapter.js new file mode 100644 index 00000000000..fb63b705c94 --- /dev/null +++ b/build/dist/criteoBidAdapter.js @@ -0,0 +1,1344 @@ +pbjsChunk([0],{ + +/***/ 359: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(360); + + +/***/ }), + +/***/ 360: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ADAPTER_VERSION", function() { return ADAPTER_VERSION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PROFILE_ID_PUBLISHERTAG", function() { return PROFILE_ID_PUBLISHERTAG; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["tryGetCriteoFastBid"] = tryGetCriteoFastBid; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adloader_js__ = __webpack_require__(39); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_criteo_direct_rsa_validate_build_verify_js__ = __webpack_require__(361); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_criteo_direct_rsa_validate_build_verify_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_criteo_direct_rsa_validate_build_verify_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_storageManager_js__ = __webpack_require__(9); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + + +var GVLID = 91; +var ADAPTER_VERSION = 32; +var BIDDER_CODE = 'criteo'; +var CDB_ENDPOINT = 'https://bidder.criteo.com/cdb'; +var PROFILE_ID_INLINE = 207; +var PROFILE_ID_PUBLISHERTAG = 185; +var storage = Object(__WEBPACK_IMPORTED_MODULE_7__src_storageManager_js__["b" /* getStorageManager */])(GVLID); +var LOG_PREFIX = 'Criteo: '; // Unminified source code can be found in: https://github.com/Prebid-org/prebid-js-external-js-criteo/blob/master/dist/prod.js + +var PUBLISHER_TAG_URL = 'https://static.criteo.net/js/ld/publishertag.prebid.js'; +var FAST_BID_PUBKEY_E = 65537; +var FAST_BID_PUBKEY_N = 'ztQYwCE5BU7T9CDM5he6rKoabstXRmkzx54zFPZkWbK530dwtLBDeaWBMxHBUT55CYyboR/EZ4efghPi3CoNGfGWezpjko9P6p2EwGArtHEeS4slhu/SpSIFMjG6fdrpRoNuIAMhq1Z+Pr/+HOd1pThFKeGFr2/NhtAg+TXAzaU='; +/** @type {BidderSpec} */ + +var spec = { + code: BIDDER_CODE, + gvlid: GVLID, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]], + + /** + * @param {object} bid + * @return {boolean} + */ + isBidRequestValid: function isBidRequestValid(bid) { + // either one of zoneId or networkId should be set + if (!(bid && bid.params && (bid.params.zoneId || bid.params.networkId))) { + return false; + } // video media types requires some mandatory params + + + if (hasVideoMediaType(bid)) { + if (!hasValidVideoMediaType(bid)) { + return false; + } + } + + return true; + }, + + /** + * @param {BidRequest[]} bidRequests + * @param {*} bidderRequest + * @return {ServerRequest} + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var url; + var data; + + _extends(bidderRequest, { + publisherExt: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context'), + userExt: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user'), + ceh: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('criteo.ceh') + }); // If publisher tag not already loaded try to get it from fast bid + + + if (!publisherTagAvailable()) { + window.Criteo = window.Criteo || {}; + window.Criteo.usePrebidEvents = false; + tryGetCriteoFastBid(); // Reload the PublisherTag after the timeout to ensure FastBid is up-to-date and tracking done properly + + setTimeout(function () { + Object(__WEBPACK_IMPORTED_MODULE_0__src_adloader_js__["a" /* loadExternalScript */])(PUBLISHER_TAG_URL, BIDDER_CODE); + }, bidderRequest.timeout); + } + + if (publisherTagAvailable()) { + // eslint-disable-next-line no-undef + var adapter = new Criteo.PubTag.Adapters.Prebid(PROFILE_ID_PUBLISHERTAG, ADAPTER_VERSION, bidRequests, bidderRequest, "4.2.0"); + var enableSendAllBids = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('enableSendAllBids'); + + if (adapter.setEnableSendAllBids && typeof adapter.setEnableSendAllBids === 'function' && typeof enableSendAllBids === 'boolean') { + adapter.setEnableSendAllBids(enableSendAllBids); + } + + url = adapter.buildCdbUrl(); + data = adapter.buildCdbRequest(); + } else { + var context = buildContext(bidRequests, bidderRequest); + url = buildCdbUrl(context); + data = buildCdbRequest(context, bidRequests, bidderRequest); + } + + if (data) { + return { + method: 'POST', + url: url, + data: data, + bidRequests: bidRequests + }; + } + }, + + /** + * @param {*} response + * @param {ServerRequest} request + * @return {Bid[]} + */ + interpretResponse: function interpretResponse(response, request) { + var body = response.body || response; + + if (publisherTagAvailable()) { + // eslint-disable-next-line no-undef + var adapter = Criteo.PubTag.Adapters.Prebid.GetAdapter(request); + + if (adapter) { + return adapter.interpretResponse(body, request); + } + } + + var bids = []; + + if (body && body.slots && __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isArray"](body.slots)) { + body.slots.forEach(function (slot) { + var bidRequest = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(request.bidRequests, function (b) { + return b.adUnitCode === slot.impid && (!b.params.zoneId || parseInt(b.params.zoneId) === slot.zoneid); + }); + var bidId = bidRequest.bidId; + var bid = { + requestId: bidId, + adId: slot.bidId || __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["getUniqueIdentifierStr"](), + cpm: slot.cpm, + currency: slot.currency, + netRevenue: true, + ttl: slot.ttl || 60, + creativeId: bidId, + width: slot.width, + height: slot.height, + dealId: slot.dealCode + }; + + if (slot.native) { + if (bidRequest.params.nativeCallback) { + bid.ad = createNativeAd(bidId, slot.native, bidRequest.params.nativeCallback); + } else if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('enableSendAllBids') === true) { + return; + } else { + bid.native = createPrebidNativeAd(slot.native); + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]; + } + } else if (slot.video) { + bid.vastUrl = slot.displayurl; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + } else { + bid.ad = slot.creative; + } + + bids.push(bid); + }); + } + + return bids; + }, + + /** + * @param {TimedOutBid} timeoutData + */ + onTimeout: function onTimeout(timeoutData) { + if (publisherTagAvailable() && Array.isArray(timeoutData)) { + var auctionsIds = []; + timeoutData.forEach(function (bid) { + if (auctionsIds.indexOf(bid.auctionId) === -1) { + auctionsIds.push(bid.auctionId); // eslint-disable-next-line no-undef + + var adapter = Criteo.PubTag.Adapters.Prebid.GetAdapter(bid.auctionId); + adapter.handleBidTimeout(); + } + }); + } + }, + + /** + * @param {Bid} bid + */ + onBidWon: function onBidWon(bid) { + if (publisherTagAvailable() && bid) { + // eslint-disable-next-line no-undef + var adapter = Criteo.PubTag.Adapters.Prebid.GetAdapter(bid.auctionId); + adapter.handleBidWon(bid); + } + }, + + /** + * @param {Bid} bid + */ + onSetTargeting: function onSetTargeting(bid) { + if (publisherTagAvailable()) { + // eslint-disable-next-line no-undef + var adapter = Criteo.PubTag.Adapters.Prebid.GetAdapter(bid.auctionId); + adapter.handleSetTargeting(bid); + } + } +}; +/** + * @return {boolean} + */ + +function publisherTagAvailable() { + // eslint-disable-next-line no-undef + return typeof Criteo !== 'undefined' && Criteo.PubTag && Criteo.PubTag.Adapters && Criteo.PubTag.Adapters.Prebid; +} +/** + * @param {BidRequest[]} bidRequests + * @param bidderRequest + */ + + +function buildContext(bidRequests, bidderRequest) { + var referrer = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + referrer = bidderRequest.refererInfo.referer; + } + + var queryString = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["parseUrl"](referrer).search; + var context = { + url: referrer, + debug: queryString['pbt_debug'] === '1', + noLog: queryString['pbt_nolog'] === '1', + amp: false + }; + bidRequests.forEach(function (bidRequest) { + if (bidRequest.params.integrationMode === 'amp') { + context.amp = true; + } + }); + return context; +} +/** + * @param {CriteoContext} context + * @return {string} + */ + + +function buildCdbUrl(context) { + var url = CDB_ENDPOINT; + url += '?profileId=' + PROFILE_ID_INLINE; + url += '&av=' + String(ADAPTER_VERSION); + url += '&wv=' + encodeURIComponent("4.2.0"); + url += '&cb=' + String(Math.floor(Math.random() * 99999999999)); + + if (context.amp) { + url += '&im=1'; + } + + if (context.debug) { + url += '&debug=1'; + } + + if (context.noLog) { + url += '&nolog=1'; + } + + return url; +} + +function checkNativeSendId(bidRequest) { + return !(bidRequest.nativeParams && (bidRequest.nativeParams.image && bidRequest.nativeParams.image.sendId !== true || bidRequest.nativeParams.icon && bidRequest.nativeParams.icon.sendId !== true || bidRequest.nativeParams.clickUrl && bidRequest.nativeParams.clickUrl.sendId !== true || bidRequest.nativeParams.displayUrl && bidRequest.nativeParams.displayUrl.sendId !== true || bidRequest.nativeParams.privacyLink && bidRequest.nativeParams.privacyLink.sendId !== true || bidRequest.nativeParams.privacyIcon && bidRequest.nativeParams.privacyIcon.sendId !== true)); +} +/** + * @param {CriteoContext} context + * @param {BidRequest[]} bidRequests + * @param bidderRequest + * @return {*} + */ + + +function buildCdbRequest(context, bidRequests, bidderRequest) { + var networkId; + var request = { + publisher: { + url: context.url, + ext: bidderRequest.publisherExt + }, + slots: bidRequests.map(function (bidRequest) { + networkId = bidRequest.params.networkId || networkId; + var slot = { + impid: bidRequest.adUnitCode, + transactionid: bidRequest.transactionId, + auctionId: bidRequest.auctionId + }; + + if (bidRequest.params.zoneId) { + slot.zoneid = bidRequest.params.zoneId; + } + + if (bidRequest.fpd && bidRequest.fpd.context) { + slot.ext = bidRequest.fpd.context; + } + + if (bidRequest.params.ext) { + slot.ext = _extends({}, slot.ext, bidRequest.params.ext); + } + + if (bidRequest.params.publisherSubId) { + slot.publishersubid = bidRequest.params.publisherSubId; + } + + if (bidRequest.params.nativeCallback || __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidRequest, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]))) { + slot.native = true; + + if (!checkNativeSendId(bidRequest)) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"](LOG_PREFIX + 'all native assets containing URL should be sent as placeholders with sendId(icon, image, clickUrl, displayUrl, privacyLink, privacyIcon)'); + } + + slot.sizes = parseSizes(retrieveBannerSizes(bidRequest), parseNativeSize); + } else { + slot.sizes = parseSizes(retrieveBannerSizes(bidRequest), parseSize); + } + + if (hasVideoMediaType(bidRequest)) { + var video = { + playersizes: parseSizes(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize'), parseSize), + mimes: bidRequest.mediaTypes.video.mimes, + protocols: bidRequest.mediaTypes.video.protocols, + maxduration: bidRequest.mediaTypes.video.maxduration, + api: bidRequest.mediaTypes.video.api + }; + video.skip = bidRequest.params.video.skip; + video.placement = bidRequest.params.video.placement; + video.minduration = bidRequest.params.video.minduration; + video.playbackmethod = bidRequest.params.video.playbackmethod; + video.startdelay = bidRequest.params.video.startdelay; + slot.video = video; + } + + return slot; + }) + }; + + if (networkId) { + request.publisher.networkid = networkId; + } + + request.user = { + ext: bidderRequest.userExt + }; + + if (bidderRequest && bidderRequest.ceh) { + request.user.ceh = bidderRequest.ceh; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + request.gdprConsent = {}; + + if (typeof bidderRequest.gdprConsent.gdprApplies !== 'undefined') { + request.gdprConsent.gdprApplies = !!bidderRequest.gdprConsent.gdprApplies; + } + + request.gdprConsent.version = bidderRequest.gdprConsent.apiVersion; + + if (typeof bidderRequest.gdprConsent.consentString !== 'undefined') { + request.gdprConsent.consentData = bidderRequest.gdprConsent.consentString; + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + request.user.uspIab = bidderRequest.uspConsent; + } + + return request; +} + +function retrieveBannerSizes(bidRequest) { + return __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes; +} + +function parseSizes(sizes, parser) { + if (Array.isArray(sizes[0])) { + // is there several sizes ? (ie. [[728,90],[200,300]]) + return sizes.map(function (size) { + return parser(size); + }); + } + + return [parser(sizes)]; // or a single one ? (ie. [728,90]) +} + +function parseSize(size) { + return size[0] + 'x' + size[1]; +} + +function parseNativeSize(size) { + if (size[0] === undefined && size[1] === undefined) { + return '2x2'; + } + + return size[0] + 'x' + size[1]; +} + +function hasVideoMediaType(bidRequest) { + if (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidRequest, 'params.video') === undefined) { + return false; + } + + return __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') !== undefined; +} + +function hasValidVideoMediaType(bidRequest) { + var isValid = true; + var requiredMediaTypesParams = ['mimes', 'playerSize', 'maxduration', 'protocols', 'api']; + requiredMediaTypesParams.forEach(function (param) { + if (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.' + param) === undefined) { + isValid = false; + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"]('Criteo Bid Adapter: mediaTypes.video.' + param + ' is required'); + } + }); + var requiredParams = ['skip', 'placement', 'playbackmethod']; + requiredParams.forEach(function (param) { + if (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"](bidRequest, 'params.video.' + param) === undefined) { + isValid = false; + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"]('Criteo Bid Adapter: params.video.' + param + ' is required'); + } + }); + + if (isValid) { + // We do not support long form for now, also we have to check that context & placement are consistent + if (bidRequest.mediaTypes.video.context == 'instream' && bidRequest.params.video.placement === 1) { + return true; + } else if (bidRequest.mediaTypes.video.context == 'outstream' && bidRequest.params.video.placement !== 1) { + return true; + } + } + + return false; +} +/** + * Create prebid compatible native ad with native payload + * @param {*} payload + * @returns prebid native ad assets + */ + + +function createPrebidNativeAd(payload) { + return { + title: payload.products[0].title, + body: payload.products[0].description, + sponsoredBy: payload.advertiser.description, + icon: payload.advertiser.logo, + image: payload.products[0].image, + clickUrl: payload.products[0].click_url, + privacyLink: payload.privacy.optout_click_url, + privacyIcon: payload.privacy.optout_image_url, + cta: payload.products[0].call_to_action, + price: payload.products[0].price, + impressionTrackers: payload.impression_pixels.map(function (pix) { + return pix.url; + }) + }; +} +/** + * @param {string} id + * @param {*} payload + * @param {*} callback + * @return {string} + */ + + +function createNativeAd(id, payload, callback) { + // Store the callback and payload in a global object to be later accessed from the creative + var slotsName = 'criteo_prebid_native_slots'; + window[slotsName] = window[slotsName] || {}; + window[slotsName][id] = { + callback: callback, + payload: payload + }; // The creative is in an iframe so we have to get the callback and payload + // from the parent window (doesn't work with safeframes) + + return "\n"); +} + +function tryGetCriteoFastBid() { + try { + var fastBidStorageKey = 'criteo_fast_bid'; + var hashPrefix = '// Hash: '; + var fastBidFromStorage = storage.getDataFromLocalStorage(fastBidStorageKey); + + if (fastBidFromStorage !== null) { + // The value stored must contain the file's encrypted hash as first line + var firstLineEndPosition = fastBidFromStorage.indexOf('\n'); + var firstLine = fastBidFromStorage.substr(0, firstLineEndPosition).trim(); + + if (firstLine.substr(0, hashPrefix.length) !== hashPrefix) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"]('No hash found in FastBid'); + storage.removeDataFromLocalStorage(fastBidStorageKey); + } else { + // Remove the hash part from the locally stored value + var publisherTagHash = firstLine.substr(hashPrefix.length); + var publisherTag = fastBidFromStorage.substr(firstLineEndPosition + 1); + + if (Object(__WEBPACK_IMPORTED_MODULE_6_criteo_direct_rsa_validate_build_verify_js__["verify"])(publisherTag, publisherTagHash, FAST_BID_PUBKEY_N, FAST_BID_PUBKEY_E)) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('Using Criteo FastBid'); + eval(publisherTag); // eslint-disable-line no-eval + } else { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"]('Invalid Criteo FastBid found'); + storage.removeDataFromLocalStorage(fastBidStorageKey); + } + } + } + } catch (e) {// Unable to get fast bid + } +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }), + +/***/ 361: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var jsbnLite_1 = __webpack_require__(362); +var sha256_1 = __webpack_require__(363); +function verify(code, hash, nStrPubKey, ePubKey) { + var x = new jsbnLite_1.BigInteger(jsbnLite_1.b64toHex(hash)); + var m = new jsbnLite_1.BigInteger(jsbnLite_1.b64toHex(nStrPubKey)); + var r = x.modPowInt(ePubKey, m); + return jsbnLite_1.removeExtraSymbols(r.toHexString()) === sha256_1.Sha256.hash(code); +} +exports.verify = verify; + + +/***/ }), + +/***/ 362: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +// Bits per digit +var dbits; +// JavaScript engine analysis +var canary = 0xdeadbeefcafe; +var j_lm = ((canary & 0xffffff) == 0xefcafe); +var BigInteger = /** @class */ (function () { + function BigInteger(a) { + if (a !== null) { + this.fromHexString(a); + } + } + BigInteger.prototype.toHexString = function () { + if (this.s < 0) { + return "-" + this.negate().toHexString(); + } + var k = 4; + var km = (1 << k) - 1; + var d; + var m = false; + var r = ""; + var i = this.t; + var p = this.DB - (i * this.DB) % k; + if (i-- > 0) { + if (p < this.DB && (d = this[i] >> p) > 0) { + m = true; + r = int2char(d); + } + while (i >= 0) { + if (p < k) { + d = (this[i] & ((1 << p) - 1)) << (k - p); + d |= this[--i] >> (p += this.DB - k); + } + else { + d = (this[i] >> (p -= k)) & km; + if (p <= 0) { + p += this.DB; + --i; + } + } + if (d > 0) { + m = true; + } + if (m) { + r += int2char(d); + } + } + } + return m ? r : "0"; + }; + BigInteger.prototype.fromHexString = function (s) { + if (s === null) { + return; + } + var k = 4; + this.t = 0; + this.s = 0; + var i = s.length; + var mi = false; + var sh = 0; + while (--i >= 0) { + var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i); + if (x < 0) { + if (s.charAt(i) == "-") { + mi = true; + } + continue; + } + mi = false; + if (sh == 0) { + this[this.t++] = x; + } + else if (sh + k > this.DB) { + this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh; + this[this.t++] = (x >> (this.DB - sh)); + } + else { + this[this.t - 1] |= x << sh; + } + sh += k; + if (sh >= this.DB) { + sh -= this.DB; + } + } + if (k == 8 && ((+s[0]) & 0x80) != 0) { + this.s = -1; + if (sh > 0) { + this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh; + } + } + this.clamp(); + if (mi) { + BigInteger.ZERO.subTo(this, this); + } + }; + BigInteger.prototype.negate = function () { + var r = nbi(); + BigInteger.ZERO.subTo(this, r); + return r; + }; + BigInteger.prototype.abs = function () { + return (this.s < 0) ? this.negate() : this; + }; + BigInteger.prototype.mod = function (a) { + var r = nbi(); + this.abs().divRemTo(a, null, r); + if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { + a.subTo(r, r); + } + return r; + }; + BigInteger.prototype.copyTo = function (r) { + for (var i = this.t - 1; i >= 0; --i) { + r[i] = this[i]; + } + r.t = this.t; + r.s = this.s; + }; + BigInteger.prototype.lShiftTo = function (n, r) { + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << cbs) - 1; + var ds = Math.floor(n / this.DB); + var c = (this.s << bs) & this.DM; + for (var i = this.t - 1; i >= 0; --i) { + r[i + ds + 1] = (this[i] >> cbs) | c; + c = (this[i] & bm) << bs; + } + for (var i = ds - 1; i >= 0; --i) { + r[i] = 0; + } + r[ds] = c; + r.t = this.t + ds + 1; + r.s = this.s; + r.clamp(); + }; + BigInteger.prototype.invDigit = function () { + if (this.t < 1) { + return 0; + } + var x = this[0]; + if ((x & 1) == 0) { + return 0; + } + var y = x & 3; // y == 1/x mod 2^2 + y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4 + y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8 + y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16 + // last step - calculate inverse mod DV directly; + // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints + y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits + // we really want the negative inverse, and -DV < y < DV + return (y > 0) ? this.DV - y : -y; + }; + BigInteger.prototype.dlShiftTo = function (n, r) { + var i; + for (i = this.t - 1; i >= 0; --i) { + r[i + n] = this[i]; + } + for (i = n - 1; i >= 0; --i) { + r[i] = 0; + } + r.t = this.t + n; + r.s = this.s; + }; + BigInteger.prototype.squareTo = function (r) { + var x = this.abs(); + var i = r.t = 2 * x.t; + while (--i >= 0) { + r[i] = 0; + } + for (i = 0; i < x.t - 1; ++i) { + var c = x.am(i, x[i], r, 2 * i, 0, 1); + if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { + r[i + x.t] -= x.DV; + r[i + x.t + 1] = 1; + } + } + if (r.t > 0) { + r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); + } + r.s = 0; + r.clamp(); + }; + BigInteger.prototype.multiplyTo = function (a, r) { + var x = this.abs(); + var y = a.abs(); + var i = x.t; + r.t = i + y.t; + while (--i >= 0) { + r[i] = 0; + } + for (i = 0; i < y.t; ++i) { + r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); + } + r.s = 0; + r.clamp(); + if (this.s != a.s) { + BigInteger.ZERO.subTo(r, r); + } + }; + BigInteger.prototype.divRemTo = function (m, q, r) { + var pm = m.abs(); + if (pm.t <= 0) { + return; + } + var pt = this.abs(); + if (pt.t < pm.t) { + if (q != null) { + q.fromHexString("0"); + } + if (r != null) { + this.copyTo(r); + } + return; + } + if (r == null) { + r = nbi(); + } + var y = nbi(); + var ts = this.s; + var ms = m.s; + var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus + if (nsh > 0) { + pm.lShiftTo(nsh, y); + pt.lShiftTo(nsh, r); + } + else { + pm.copyTo(y); + pt.copyTo(r); + } + var ys = y.t; + var y0 = y[ys - 1]; + if (y0 == 0) { + return; + } + var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0); + var d1 = this.FV / yt; + var d2 = (1 << this.F1) / yt; + var e = 1 << this.F2; + var i = r.t; + var j = i - ys; + var t = (q == null) ? nbi() : q; + y.dlShiftTo(j, t); + if (r.compareTo(t) >= 0) { + r[r.t++] = 1; + r.subTo(t, r); + } + BigInteger.ONE.dlShiftTo(ys, t); + t.subTo(y, y); // "negative" y so we can replace sub with am later + while (y.t < ys) { + y[y.t++] = 0; + } + while (--j >= 0) { + // Estimate quotient digit + var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); + if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out + y.dlShiftTo(j, t); + r.subTo(t, r); + while (r[i] < --qd) { + r.subTo(t, r); + } + } + } + if (q != null) { + r.drShiftTo(ys, q); + if (ts != ms) { + BigInteger.ZERO.subTo(q, q); + } + } + r.t = ys; + r.clamp(); + if (nsh > 0) { + r.rShiftTo(nsh, r); + } // Denormalize remainder + if (ts < 0) { + BigInteger.ZERO.subTo(r, r); + } + }; + BigInteger.prototype.rShiftTo = function (n, r) { + r.s = this.s; + var ds = Math.floor(n / this.DB); + if (ds >= this.t) { + r.t = 0; + return; + } + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << bs) - 1; + r[0] = this[ds] >> bs; + for (var i = ds + 1; i < this.t; ++i) { + r[i - ds - 1] |= (this[i] & bm) << cbs; + r[i - ds] = this[i] >> bs; + } + if (bs > 0) { + r[this.t - ds - 1] |= (this.s & bm) << cbs; + } + r.t = this.t - ds; + r.clamp(); + }; + BigInteger.prototype.drShiftTo = function (n, r) { + for (var i = n; i < this.t; ++i) { + r[i - n] = this[i]; + } + r.t = Math.max(this.t - n, 0); + r.s = this.s; + }; + BigInteger.prototype.subTo = function (a, r) { + var i = 0; + var c = 0; + var m = Math.min(a.t, this.t); + while (i < m) { + c += this[i] - a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + if (a.t < this.t) { + c -= a.s; + while (i < this.t) { + c += this[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while (i < a.t) { + c -= a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = (c < 0) ? -1 : 0; + if (c < -1) { + r[i++] = this.DV + c; + } + else if (c > 0) { + r[i++] = c; + } + r.t = i; + r.clamp(); + }; + BigInteger.prototype.clamp = function () { + var c = this.s & this.DM; + while (this.t > 0 && this[this.t - 1] == c) { + --this.t; + } + }; + BigInteger.prototype.modPowInt = function (e, m) { + var z; + if (e < 256 || m.isEven()) { + z = new Classic(m); + } + else { + z = new Montgomery(m); + } + return this.exp(e, z); + }; + BigInteger.prototype.exp = function (e, z) { + if (e > 0xffffffff || e < 1) { + return BigInteger.ONE; + } + var r = nbi(); + var r2 = nbi(); + var g = z.convert(this); + var i = nbits(e) - 1; + g.copyTo(r); + while (--i >= 0) { + z.sqrTo(r, r2); + if ((e & (1 << i)) > 0) { + z.mulTo(r2, g, r); + } + else { + var t = r; + r = r2; + r2 = t; + } + } + return z.revert(r); + }; + BigInteger.prototype.isEven = function () { + return ((this.t > 0) ? (this[0] & 1) : this.s) == 0; + }; + BigInteger.prototype.compareTo = function (a) { + var r = this.s - a.s; + if (r != 0) { + return r; + } + var i = this.t; + r = i - a.t; + if (r != 0) { + return (this.s < 0) ? -r : r; + } + while (--i >= 0) { + if ((r = this[i] - a[i]) != 0) { + return r; + } + } + return 0; + }; + BigInteger.prototype.am1 = function (i, x, w, j, c, n) { + while (--n >= 0) { + var v = x * this[i++] + w[j] + c; + c = Math.floor(v / 0x4000000); + w[j++] = v & 0x3ffffff; + } + return c; + }; + // am2 avoids a big mult-and-extract completely. + // Max digit bits should be <= 30 because we do bitwise ops + // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) + BigInteger.prototype.am2 = function (i, x, w, j, c, n) { + var xl = x & 0x7fff; + var xh = x >> 15; + while (--n >= 0) { + var l = this[i] & 0x7fff; + var h = this[i++] >> 15; + var m = xh * l + h * xl; + l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff); + c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); + w[j++] = l & 0x3fffffff; + } + return c; + }; + // Alternately, set max digit bits to 28 since some + // browsers slow down when dealing with 32-bit numbers. + BigInteger.prototype.am3 = function (i, x, w, j, c, n) { + var xl = x & 0x3fff; + var xh = x >> 14; + while (--n >= 0) { + var l = this[i] & 0x3fff; + var h = this[i++] >> 14; + var m = xh * l + h * xl; + l = xl * l + ((m & 0x3fff) << 14) + w[j] + c; + c = (l >> 28) + (m >> 14) + xh * h; + w[j++] = l & 0xfffffff; + } + return c; + }; + return BigInteger; +}()); +exports.BigInteger = BigInteger; +function nbi() { return new BigInteger(null); } +exports.nbi = nbi; +function nbits(x) { + var r = 1; + var t; + if ((t = x >>> 16) != 0) { + x = t; + r += 16; + } + if ((t = x >> 8) != 0) { + x = t; + r += 8; + } + if ((t = x >> 4) != 0) { + x = t; + r += 4; + } + if ((t = x >> 2) != 0) { + x = t; + r += 2; + } + if ((t = x >> 1) != 0) { + x = t; + r += 1; + } + return r; +} +exports.nbits = nbits; +var BI_RC = []; +var rr; +var vv; +rr = "0".charCodeAt(0); +for (vv = 0; vv <= 9; ++vv) { + BI_RC[rr++] = vv; +} +rr = "a".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) { + BI_RC[rr++] = vv; +} +rr = "A".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) { + BI_RC[rr++] = vv; +} +function intAt(s, i) { + var c = BI_RC[s.charCodeAt(i)]; + return (c == null) ? -1 : c; +} +exports.intAt = intAt; +var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; +function int2char(n) { + return BI_RM.charAt(n); +} +exports.int2char = int2char; +var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var b64pad = "="; +function b64toHex(s) { + var ret = ""; + var i; + var k = 0; // b64 state, 0-3 + var slop = 0; + for (i = 0; i < s.length; ++i) { + if (s.charAt(i) == b64pad) { + break; + } + var v = b64map.indexOf(s.charAt(i)); + if (v < 0) { + continue; + } + if (k == 0) { + ret += int2char(v >> 2); + slop = v & 3; + k = 1; + } + else if (k == 1) { + ret += int2char((slop << 2) | (v >> 4)); + slop = v & 0xf; + k = 2; + } + else if (k == 2) { + ret += int2char(slop); + ret += int2char(v >> 2); + slop = v & 3; + k = 3; + } + else { + ret += int2char((slop << 2) | (v >> 4)); + ret += int2char(v & 0xf); + k = 0; + } + } + if (k == 1) { + ret += int2char(slop << 2); + } + return ret; +} +exports.b64toHex = b64toHex; +function removeExtraSymbols(s) { + return s + .replace(/^1f+00/, "") + .replace("3031300d060960864801650304020105000420", ""); +} +exports.removeExtraSymbols = removeExtraSymbols; +var Classic = /** @class */ (function () { + function Classic(m) { + this.m = m; + } + // Classic.prototype.convert = cConvert; + Classic.prototype.convert = function (x) { + if (x.s < 0 || x.compareTo(this.m) >= 0) { + return x.mod(this.m); + } + else { + return x; + } + }; + // Classic.prototype.revert = cRevert; + Classic.prototype.revert = function (x) { + return x; + }; + // Classic.prototype.reduce = cReduce; + Classic.prototype.reduce = function (x) { + x.divRemTo(this.m, null, x); + }; + // Classic.prototype.mulTo = cMulTo; + Classic.prototype.mulTo = function (x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + }; + // Classic.prototype.sqrTo = cSqrTo; + Classic.prototype.sqrTo = function (x, r) { + x.squareTo(r); + this.reduce(r); + }; + return Classic; +}()); +var Montgomery = /** @class */ (function () { + function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp & 0x7fff; + this.mph = this.mp >> 15; + this.um = (1 << (m.DB - 15)) - 1; + this.mt2 = 2 * m.t; + } + // Montgomery.prototype.convert = montConvert; + // xR mod m + Montgomery.prototype.convert = function (x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t, r); + r.divRemTo(this.m, null, r); + if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { + this.m.subTo(r, r); + } + return r; + }; + // Montgomery.prototype.revert = montRevert; + // x/R mod m + Montgomery.prototype.revert = function (x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; + }; + // Montgomery.prototype.reduce = montReduce; + // x = x/R mod m (HAC 14.32) + Montgomery.prototype.reduce = function (x) { + while (x.t <= this.mt2) { + // pad x so am has enough room later + x[x.t++] = 0; + } + for (var i = 0; i < this.m.t; ++i) { + // faster way of calculating u0 = x[i]*mp mod DV + var j = x[i] & 0x7fff; + var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM; + // use am to combine the multiply-shift-add into one call + j = i + this.m.t; + x[j] += this.m.am(0, u0, x, i, 0, this.m.t); + // propagate carry + while (x[j] >= x.DV) { + x[j] -= x.DV; + x[++j]++; + } + } + x.clamp(); + x.drShiftTo(this.m.t, x); + if (x.compareTo(this.m) >= 0) { + x.subTo(this.m, x); + } + }; + // Montgomery.prototype.mulTo = montMulTo; + // r = "xy/R mod m"; x,y != r + Montgomery.prototype.mulTo = function (x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + }; + // Montgomery.prototype.sqrTo = montSqrTo; + // r = "x^2/R mod m"; x != r + Montgomery.prototype.sqrTo = function (x, r) { + x.squareTo(r); + this.reduce(r); + }; + return Montgomery; +}()); +function nbv(i) { + var r = nbi(); + r.fromHexString(i.toString()); + return r; +} +exports.nbv = nbv; +BigInteger.ZERO = nbv(0); +BigInteger.ONE = nbv(1); +if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = BigInteger.prototype.am2; + dbits = 30; +} +else if (j_lm && (navigator.appName != "Netscape")) { + BigInteger.prototype.am = BigInteger.prototype.am1; + dbits = 26; +} +else { // Mozilla/Netscape seems to prefer am3 + BigInteger.prototype.am = BigInteger.prototype.am3; + dbits = 28; +} +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1 << dbits) - 1); +BigInteger.prototype.DV = (1 << dbits); +var BI_FP = 52; +BigInteger.prototype.FV = Math.pow(2, BI_FP); +BigInteger.prototype.F1 = BI_FP - dbits; +BigInteger.prototype.F2 = 2 * dbits - BI_FP; + + +/***/ }), + +/***/ 363: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var Sha256 = /** @class */ (function () { + function Sha256() { + } + Sha256.hash = function (msg) { + msg = Sha256.utf8Encode(msg || ""); + var K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + ]; + var H = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + msg += String.fromCharCode(0x80); + var l = msg.length / 4 + 2; + var N = Math.ceil(l / 16); + var M = new Array(N); + for (var i = 0; i < N; i++) { + M[i] = new Array(16); + for (var j = 0; j < 16; j++) { + M[i][j] = (msg.charCodeAt(i * 64 + j * 4) << 24) | (msg.charCodeAt(i * 64 + j * 4 + 1) << 16) + | (msg.charCodeAt(i * 64 + j * 4 + 2) << 8) | (msg.charCodeAt(i * 64 + j * 4 + 3) << 0); + } + } + var lenHi = ((msg.length - 1) * 8) / Math.pow(2, 32); + var lenLo = ((msg.length - 1) * 8) >>> 0; + M[N - 1][14] = Math.floor(lenHi); + M[N - 1][15] = lenLo; + for (var i = 0; i < N; i++) { + var W = new Array(64); + for (var t = 0; t < 16; t++) + W[t] = M[i][t]; + for (var t = 16; t < 64; t++) { + W[t] = (Sha256.q1(W[t - 2]) + W[t - 7] + Sha256.q0(W[t - 15]) + W[t - 16]) >>> 0; + } + var a = H[0], b = H[1], c = H[2], d = H[3], e = H[4], f = H[5], g = H[6], h = H[7]; + for (var t = 0; t < 64; t++) { + var T1 = h + Sha256.z1(e) + Sha256.Ch(e, f, g) + K[t] + W[t]; + var T2 = Sha256.z0(a) + Sha256.Maj(a, b, c); + h = g; + g = f; + f = e; + e = (d + T1) >>> 0; + d = c; + c = b; + b = a; + a = (T1 + T2) >>> 0; + } + H[0] = (H[0] + a) >>> 0; + H[1] = (H[1] + b) >>> 0; + H[2] = (H[2] + c) >>> 0; + H[3] = (H[3] + d) >>> 0; + H[4] = (H[4] + e) >>> 0; + H[5] = (H[5] + f) >>> 0; + H[6] = (H[6] + g) >>> 0; + H[7] = (H[7] + h) >>> 0; + } + var R = new Array(H.length); + for (var h = 0; h < H.length; h++) + R[h] = ('00000000' + H[h].toString(16)).slice(-8); + return R.join(''); + }; + Sha256.utf8Encode = function (str) { + try { + return new TextEncoder().encode(str).reduce(function (prev, curr) { return prev + String.fromCharCode(curr); }, ''); + } + catch (e) { + return unescape(encodeURIComponent(str)); + } + }; + Sha256.ROTR = function (n, x) { + return (x >>> n) | (x << (32 - n)); + }; + Sha256.z0 = function (x) { return Sha256.ROTR(2, x) ^ Sha256.ROTR(13, x) ^ Sha256.ROTR(22, x); }; + Sha256.z1 = function (x) { return Sha256.ROTR(6, x) ^ Sha256.ROTR(11, x) ^ Sha256.ROTR(25, x); }; + Sha256.q0 = function (x) { return Sha256.ROTR(7, x) ^ Sha256.ROTR(18, x) ^ (x >>> 3); }; + Sha256.q1 = function (x) { return Sha256.ROTR(17, x) ^ Sha256.ROTR(19, x) ^ (x >>> 10); }; + Sha256.Ch = function (x, y, z) { return (x & y) ^ (~x & z); }; + Sha256.Maj = function (x, y, z) { return (x & y) ^ (x & z) ^ (y & z); }; + return Sha256; +}()); +exports.Sha256 = Sha256; + + +/***/ }) + +},[359]); \ No newline at end of file diff --git a/build/dist/criteoIdSystem.js b/build/dist/criteoIdSystem.js new file mode 100644 index 00000000000..365113dc1b6 --- /dev/null +++ b/build/dist/criteoIdSystem.js @@ -0,0 +1,151 @@ +pbjsChunk([240],{ + +/***/ 364: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(365); + + +/***/ }), + +/***/ 365: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "criteoIdSubmodule", function() { return criteoIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_refererDetection_js__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +/** + * This module adds Criteo Real Time User Sync to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/criteoIdSystem + * @requires module:modules/userId + */ + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); +var bididStorageKey = 'cto_bidid'; +var bundleStorageKey = 'cto_bundle'; +var cookieWriteableKey = 'cto_test_cookie'; +var cookiesMaxAge = 13 * 30 * 24 * 60 * 60 * 1000; +var pastDateString = new Date(0).toString(); +var expirationString = new Date(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"]() + cookiesMaxAge).toString(); + +function areCookiesWriteable() { + storage.setCookie(cookieWriteableKey, '1'); + var canWrite = storage.getCookie(cookieWriteableKey) === '1'; + storage.setCookie(cookieWriteableKey, '', pastDateString); + return canWrite; +} + +function extractProtocolHost(url) { + var returnOnlyHost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var parsedUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](url); + return returnOnlyHost ? "".concat(parsedUrl.hostname) : "".concat(parsedUrl.protocol, "://").concat(parsedUrl.hostname).concat(parsedUrl.port ? ':' + parsedUrl.port : '', "/"); +} + +function getFromAllStorages(key) { + return storage.getCookie(key) || storage.getDataFromLocalStorage(key); +} + +function saveOnAllStorages(key, value) { + if (key && value) { + storage.setCookie(key, value, expirationString); + storage.setDataInLocalStorage(key, value); + } +} + +function deleteFromAllStorages(key) { + storage.setCookie(key, '', pastDateString); + storage.removeDataFromLocalStorage(key); +} + +function getCriteoDataFromAllStorages() { + return { + bundle: getFromAllStorages(bundleStorageKey), + bidId: getFromAllStorages(bididStorageKey) + }; +} + +function buildCriteoUsersyncUrl(topUrl, domain, bundle, areCookiesWriteable, isPublishertagPresent, gdprString) { + var url = 'https://gum.criteo.com/sid/json?origin=prebid' + "".concat(topUrl ? '&topUrl=' + encodeURIComponent(topUrl) : '') + "".concat(domain ? '&domain=' + encodeURIComponent(domain) : '') + "".concat(bundle ? '&bundle=' + encodeURIComponent(bundle) : '') + "".concat(gdprString ? '&gdprString=' + encodeURIComponent(gdprString) : '') + "".concat(areCookiesWriteable ? '&cw=1' : '') + "".concat(isPublishertagPresent ? '&pbt=1' : ''); + return url; +} + +function callCriteoUserSync(parsedCriteoData, gdprString) { + var cw = areCookiesWriteable(); + var topUrl = extractProtocolHost(Object(__WEBPACK_IMPORTED_MODULE_2__src_refererDetection_js__["a" /* getRefererInfo */])().referer); + var domain = extractProtocolHost(document.location.href, true); + var isPublishertagPresent = typeof criteo_pubtag !== 'undefined'; // eslint-disable-line camelcase + + var url = buildCriteoUsersyncUrl(topUrl, domain, parsedCriteoData.bundle, cw, isPublishertagPresent, gdprString); + __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["b" /* ajaxBuilder */]()(url, function (response) { + var jsonResponse = JSON.parse(response); + + if (jsonResponse.bidId) { + saveOnAllStorages(bididStorageKey, jsonResponse.bidId); + } else { + deleteFromAllStorages(bididStorageKey); + } + + if (jsonResponse.acwsUrl) { + var urlsToCall = typeof jsonResponse.acwsUrl === 'string' ? [jsonResponse.acwsUrl] : jsonResponse.acwsUrl; + urlsToCall.forEach(function (url) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](url); + }); + } else if (jsonResponse.bundle) { + saveOnAllStorages(bundleStorageKey, jsonResponse.bundle); + } + }); +} +/** @type {Submodule} */ + + +var criteoIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: 'criteo', + + /** + * decode the stored id value for passing to bid requests + * @function + * @returns {{criteoId: string} | undefined} + */ + decode: function decode(bidId) { + return bidId; + }, + + /** + * get the Criteo Id from local storages and initiate a new user sync + * @function + * @param {SubmoduleParams} [configParams] + * @param {ConsentData} [consentData] + * @returns {{id: {criteoId: string} | undefined}}} + */ + getId: function getId(configParams, consentData) { + var hasGdprData = consentData && typeof consentData.gdprApplies === 'boolean' && consentData.gdprApplies; + var gdprConsentString = hasGdprData ? consentData.consentString : undefined; + var localData = getCriteoDataFromAllStorages(); + callCriteoUserSync(localData, gdprConsentString); + return { + id: localData.bidId ? { + criteoId: localData.bidId + } : undefined + }; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_3__src_hook_js__["e" /* submodule */])('userId', criteoIdSubmodule); + +/***/ }) + +},[364]); \ No newline at end of file diff --git a/build/dist/currency.js b/build/dist/currency.js new file mode 100644 index 00000000000..12c95230b19 --- /dev/null +++ b/build/dist/currency.js @@ -0,0 +1,347 @@ +pbjsChunk([239],{ + +/***/ 366: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(367); + + +/***/ }), + +/***/ 367: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "currencySupportEnabled", function() { return currencySupportEnabled; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "currencyRates", function() { return currencyRates; }); +/* harmony export (immutable) */ __webpack_exports__["setConfig"] = setConfig; +/* harmony export (immutable) */ __webpack_exports__["addBidResponseHook"] = addBidResponseHook; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_hook_js__ = __webpack_require__(13); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + + +var DEFAULT_CURRENCY_RATE_URL = 'https://cdn.jsdelivr.net/gh/prebid/currency-file@1/latest.json?date=$$TODAY$$'; +var CURRENCY_RATE_PRECISION = 4; +var bidResponseQueue = []; +var conversionCache = {}; +var currencyRatesLoaded = false; +var needToCallForCurrencyFile = true; +var adServerCurrency = 'USD'; +var currencySupportEnabled = false; +var 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 = 'URL pointing to conversion file'] + * 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; + needToCallForCurrencyFile = false; // don't call if rates are already specified + } + + if (_typeof(config.defaultRates) === 'object') { + defaultRates = config.defaultRates; // set up the default rates to be used if the rate file doesn't get loaded in time + + currencyRates.conversions = defaultRates; + currencyRatesLoaded = true; + } + + if (typeof config.adServerCurrency === 'string') { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('enabling currency support', arguments); + adServerCurrency = config.adServerCurrency; + + if (config.conversionRateFile) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('currency using override conversionRateFile:', config.conversionRateFile); + url = config.conversionRateFile; + } // see if the url contains a date macro + // this is a workaround to the fact that jsdelivr doesn't currently support setting a 24-hour HTTP cache header + // So this is an approach to let the browser cache a copy of the file each day + // We should remove the macro once the CDN support a day-level HTTP cache setting + + + var macroLocation = url.indexOf('$$TODAY$$'); + + if (macroLocation !== -1) { + // get the date to resolve the macro + var d = new Date(); + var month = "".concat(d.getMonth() + 1); + var day = "".concat(d.getDate()); + if (month.length < 2) month = "0".concat(month); + if (day.length < 2) day = "0".concat(day); + var todaysDate = "".concat(d.getFullYear()).concat(month).concat(day); // replace $$TODAY$$ with todaysDate + + url = "".concat(url.substring(0, macroLocation)).concat(todaysDate).concat(url.substring(macroLocation + 9, url.length)); + } + + initCurrency(url); + } else { + // currency support is disabled, setting defaults + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('disabling currency support'); + resetCurrency(); + } + + if (_typeof(config.bidderCurrencyDefault) === 'object') { + bidderCurrencyDefault = config.bidderCurrencyDefault; + } +} +__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('currency', function (config) { + return setConfig(config.currency); +}); + +function errorSettingsRates(msg) { + if (defaultRates) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"](msg); + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"]('Currency failed loading rates, falling back to currency.defaultRates'); + } else { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"](msg); + } +} + +function initCurrency(url) { + conversionCache = {}; + currencySupportEnabled = true; + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('Installing addBidResponse decorator for currency module', arguments); // Adding conversion function to prebid global for external module and on page use + + Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().convertCurrency = function (cpm, fromCurrency, toCurrency) { + return parseFloat(cpm) * getCurrencyConversion(fromCurrency, toCurrency); + }; + + Object(__WEBPACK_IMPORTED_MODULE_6__src_hook_js__["a" /* getHook */])('addBidResponse').before(addBidResponseHook, 100); // call for the file if we haven't already + + if (needToCallForCurrencyFile) { + needToCallForCurrencyFile = false; + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(url, { + success: function success(response) { + try { + currencyRates = JSON.parse(response); + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('currencyRates set to ' + JSON.stringify(currencyRates)); + currencyRatesLoaded = true; + processBidResponseQueue(); + } catch (e) { + errorSettingsRates('Failed to parse currencyRates response: ' + response); + } + }, + error: errorSettingsRates + }); + } +} + +function resetCurrency() { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('Uninstalling addBidResponse decorator for currency module', arguments); + Object(__WEBPACK_IMPORTED_MODULE_6__src_hook_js__["a" /* getHook */])('addBidResponse').getHooks({ + hook: addBidResponseHook + }).remove(); + delete Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().convertCurrency; + adServerCurrency = 'USD'; + conversionCache = {}; + currencySupportEnabled = false; + currencyRatesLoaded = false; + needToCallForCurrencyFile = true; + currencyRates = {}; + bidderCurrencyDefault = {}; +} + +function addBidResponseHook(fn, adUnitCode, bid) { + if (!bid) { + return fn.call(this, adUnitCode); // 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) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"]("Currency default '".concat(bidder, ": ").concat(currencyDefault, "' ignored. adapter specified '").concat(bid.currency, "'")); + } else { + bid.currency = currencyDefault; + } + } // default to USD if currency not set + + + if (!bid.currency) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"]('Currency not specified on bid. Defaulted to "USD"'); + bid.currency = 'USD'; + } // used for analytics + + + bid.getCpmInNewCurrency = function (toCurrency) { + return (parseFloat(this.cpm) * getCurrencyConversion(this.currency, toCurrency)).toFixed(3); + }; // execute immediately if the bid is already in the desired currency + + + if (bid.currency === adServerCurrency) { + return fn.call(this, adUnitCode, bid); + } + + bidResponseQueue.push(wrapFunction(fn, this, [adUnitCode, bid])); + + 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); + + if (conversion !== 1) { + bid.cpm = (parseFloat(bid.cpm) * conversion).toFixed(4); + bid.currency = adServerCurrency; + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"]('Returning NO_BID, getCurrencyConversion threw error: ', e); + params[1] = Object(__WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__["a" /* createBid */])(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__["STATUS"].NO_BID, { + bidder: bid.bidderCode || bid.bidder, + bidId: bid.requestId + }); + } + } + + return fn.apply(context, params); + }; +} + +function getCurrencyConversion(fromCurrency) { + var toCurrency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : adServerCurrency; + var conversionRate = null; + var rates; + var cacheKey = "".concat(fromCurrency, "->").concat(toCurrency); + + if (cacheKey in conversionCache) { + conversionRate = conversionCache[cacheKey]; + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logMessage"]('Using conversionCache value ' + conversionRate + ' for ' + cacheKey); + } 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 === toCurrency) { + conversionRate = 1; + } else { + 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]; + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["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); + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["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); + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('getCurrencyConversion using intermediate ' + fromCurrency + ' thru ' + anyBaseCurrency + ' to ' + toCurrency + ' conversionRate ' + conversionRate); + } + } + + if (!(cacheKey in conversionCache)) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logMessage"]('Adding conversionCache value ' + conversionRate + ' for ' + cacheKey); + conversionCache[cacheKey] = 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; +} + +/***/ }) + +},[366]); \ No newline at end of file diff --git a/build/dist/dailyhuntBidAdapter.js b/build/dist/dailyhuntBidAdapter.js new file mode 100644 index 00000000000..23a995efde4 --- /dev/null +++ b/build/dist/dailyhuntBidAdapter.js @@ -0,0 +1,454 @@ +pbjsChunk([238],{ + +/***/ 368: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(369); + + +/***/ }), + +/***/ 369: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_video_js__ = __webpack_require__(36); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + +var BIDDER_CODE = 'dailyhunt'; +var BIDDER_ALIAS = 'dh'; +var SUPPORTED_MEDIA_TYPES = [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]]; +var PROD_PREBID_ENDPOINT_URL = 'https://pbs.dailyhunt.in/openrtb2/auction?partner='; +var PROD_PREBID_TEST_ENDPOINT_URL = 'https://qa-pbs-van.dailyhunt.in/openrtb2/auction?partner='; +var ORTB_NATIVE_TYPE_MAPPING = { + img: { + '3': 'image', + '1': 'icon' + }, + data: { + '1': 'sponsoredBy', + '2': 'body', + '3': 'rating', + '4': 'likes', + '5': 'downloads', + '6': 'price', + '7': 'salePrice', + '8': 'phone', + '9': 'address', + '10': 'body2', + '11': 'displayUrl', + '12': 'cta' + } +}; +var ORTB_NATIVE_PARAMS = { + title: { + id: 0, + name: 'title' + }, + icon: { + id: 1, + type: 1, + name: 'img' + }, + image: { + id: 2, + type: 3, + name: 'img' + }, + sponsoredBy: { + id: 3, + name: 'data', + type: 1 + }, + body: { + id: 4, + name: 'data', + type: 2 + }, + cta: { + id: 5, + type: 12, + name: 'data' + }, + body2: { + id: 4, + name: 'data', + type: 10 + } +}; // Encode URI. + +var _encodeURIComponent = function _encodeURIComponent(a) { + var b = window.encodeURIComponent(a); + b = b.replace(/'/g, '%27'); + return b; +}; // Extract key from collections. + + +var extractKeyInfo = function extractKeyInfo(collection, key) { + for (var i = 0, result; i < collection.length; i++) { + result = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](collection[i].params, key); + + if (result) { + return result; + } + } + + return undefined; +}; // Flattern Array. + + +var flatten = function flatten(arr) { + var _ref; + + return (_ref = []).concat.apply(_ref, _toConsumableArray(arr)); +}; + +var createOrtbRequest = function createOrtbRequest(validBidRequests, bidderRequest) { + var device = createOrtbDeviceObj(validBidRequests); + var user = createOrtbUserObj(validBidRequests); + var site = createOrtbSiteObj(validBidRequests, bidderRequest.refererInfo.referer); + return { + id: bidderRequest.auctionId, + imp: [], + site: site, + device: device, + user: user + }; +}; + +var createOrtbDeviceObj = function createOrtbDeviceObj(validBidRequests) { + var device = _objectSpread({}, extractKeyInfo(validBidRequests, "device")); + + device.ua = navigator.userAgent; + return device; +}; + +var createOrtbUserObj = function createOrtbUserObj(validBidRequests) { + return _objectSpread({}, extractKeyInfo(validBidRequests, "user")); +}; + +var createOrtbSiteObj = function createOrtbSiteObj(validBidRequests, page) { + var site = _objectSpread(_objectSpread({}, extractKeyInfo(validBidRequests, "site")), {}, { + page: page + }); + + var publisher = createOrtbPublisherObj(validBidRequests); + + if (publisher) { + site.publisher = publisher; + } + + return site; +}; + +var createOrtbPublisherObj = function createOrtbPublisherObj(validBidRequests) { + return _objectSpread({}, extractKeyInfo(validBidRequests, "publisher")); +}; + +var createOrtbImpObj = function createOrtbImpObj(bid) { + var params = bid.params; + var testMode = !!bid.params.test_mode; // Validate Banner Request. + + var bannerObj = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid.mediaTypes, "banner"); + var nativeObj = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid.mediaTypes, "native"); + var videoObj = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid.mediaTypes, "video"); + var imp = { + id: bid.bidId, + bidfloor: params.bidfloor ? params.bidfloor : 0, + ext: { + dailyhunt: { + placement_id: params.placement_id, + publisher_id: params.publisher_id, + partner: params.partner_name + } + } + }; // Test Mode Campaign. + + if (testMode) { + imp.ext.test_mode = testMode; + } + + if (bannerObj) { + imp.banner = _objectSpread({}, createOrtbImpBannerObj(bid, bannerObj)); + } else if (nativeObj) { + imp.native = _objectSpread({}, createOrtbImpNativeObj(bid, nativeObj)); + } else if (videoObj) { + imp.video = _objectSpread({}, createOrtbImpVideoObj(bid, videoObj)); + } + + return imp; +}; + +var createOrtbImpBannerObj = function createOrtbImpBannerObj(bid, bannerObj) { + var format = []; + bannerObj.sizes.forEach(function (size) { + return format.push({ + w: size[0], + h: size[1] + }); + }); + return { + id: 'banner-' + bid.bidId, + format: format + }; +}; + +var createOrtbImpNativeObj = function createOrtbImpNativeObj(bid, nativeObj) { + var assets = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_map"](bid.nativeParams, function (bidParams, key) { + var props = ORTB_NATIVE_PARAMS[key]; + var asset = { + required: bidParams.required & 1 + }; + + if (props) { + var h = 0; + var w = 0; + asset.id = props.id; + + if (bidParams.sizes) { + var sizes = flatten(bidParams.sizes); + w = sizes[0]; + h = sizes[1]; + } + + asset[props.name] = { + len: bidParams.len ? bidParams.len : 20, + type: props.type, + w: w, + h: h + }; + return asset; + } + }).filter(Boolean); + + var request = { + assets: assets, + ver: '1,0' + }; + return { + request: JSON.stringify(request) + }; +}; + +var createOrtbImpVideoObj = function createOrtbImpVideoObj(bid, videoObj) { + var obj = {}; + var params = bid.params; + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](bid.params.video)) { + obj = _objectSpread({}, params.video); + } else { + obj = { + mimes: ['video/mp4'] + }; + } + + obj.ext = _objectSpread({}, videoObj); + return obj; +}; + +var createServerRequest = function createServerRequest(ortbRequest, validBidRequests) { + var isTestMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'false'; + return { + method: 'POST', + url: isTestMode === 'true' ? PROD_PREBID_TEST_ENDPOINT_URL + validBidRequests[0].params.partner_name : PROD_PREBID_ENDPOINT_URL + validBidRequests[0].params.partner_name, + data: JSON.stringify(ortbRequest), + options: { + contentType: 'application/json', + withCredentials: true + }, + bids: validBidRequests + }; +}; + +var createPrebidBannerBid = function createPrebidBannerBid(bid, bidResponse) { + return { + requestId: bid.bidId, + cpm: bidResponse.price.toFixed(2), + creativeId: bidResponse.crid, + width: bidResponse.w, + height: bidResponse.h, + ttl: 360, + netRevenue: bid.netRevenue === 'net', + currency: 'USD', + ad: bidResponse.adm, + mediaType: 'banner', + winUrl: bidResponse.nurl + }; +}; + +var createPrebidNativeBid = function createPrebidNativeBid(bid, bidResponse) { + return { + requestId: bid.bidId, + cpm: bidResponse.price.toFixed(2), + creativeId: bidResponse.crid, + currency: 'USD', + ttl: 360, + netRevenue: bid.netRevenue === 'net', + native: parseNative(bidResponse), + mediaType: 'native', + winUrl: bidResponse.nurl, + width: bidResponse.w, + height: bidResponse.h + }; +}; + +var parseNative = function parseNative(bid) { + var adm = JSON.parse(bid.adm); + var _adm$native = adm.native, + assets = _adm$native.assets, + link = _adm$native.link, + imptrackers = _adm$native.imptrackers, + jstracker = _adm$native.jstracker; + var result = { + clickUrl: _encodeURIComponent(link.url), + clickTrackers: link.clicktrackers || [], + impressionTrackers: imptrackers || [], + javascriptTrackers: jstracker ? [jstracker] : [] + }; + assets.forEach(function (asset) { + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](asset.title)) { + result.title = asset.title.text; + } else if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](asset.img)) { + result[ORTB_NATIVE_TYPE_MAPPING.img[asset.img.type]] = { + url: asset.img.url, + height: asset.img.h, + width: asset.img.w + }; + } else if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](asset.data)) { + result[ORTB_NATIVE_TYPE_MAPPING.data[asset.data.type]] = asset.data.value; + } + }); + return result; +}; + +var createPrebidVideoBid = function createPrebidVideoBid(bid, bidResponse) { + var videoBid = { + requestId: bid.bidId, + cpm: bidResponse.price.toFixed(2), + creativeId: bidResponse.crid, + width: bidResponse.w, + height: bidResponse.h, + ttl: 360, + netRevenue: bid.netRevenue === 'net', + currency: 'USD', + mediaType: 'video', + winUrl: bidResponse.nurl + }; + var videoContext = bid.mediaTypes.video.context; + + switch (videoContext) { + case __WEBPACK_IMPORTED_MODULE_5__src_video_js__["b" /* OUTSTREAM */]: + videoBid.vastXml = bidResponse.adm; + break; + + case __WEBPACK_IMPORTED_MODULE_5__src_video_js__["a" /* INSTREAM */]: + videoBid.videoCacheKey = bidResponse.ext.bidder.cacheKey; + videoBid.vastUrl = bidResponse.ext.bidder.vastUrl; + break; + } + + return videoBid; +}; + +var getQueryVariable = function getQueryVariable(variable) { + var query = window.location.search.substring(1); + var vars = query.split('&'); + + for (var i = 0; i < vars.length; i++) { + var pair = vars[i].split('='); + + if (decodeURIComponent(pair[0]) == variable) { + return decodeURIComponent(pair[1]); + } + } + + return false; +}; + +var spec = { + code: BIDDER_CODE, + aliases: [BIDDER_ALIAS], + supportedMediaTypes: SUPPORTED_MEDIA_TYPES, + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placement_id && !!bid.params.publisher_id && !!bid.params.partner_name; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var serverRequests = []; // ORTB Request. + + var ortbReq = createOrtbRequest(validBidRequests, bidderRequest); + validBidRequests.forEach(function (bid) { + var imp = createOrtbImpObj(bid); + ortbReq.imp.push(imp); + }); + serverRequests.push(_objectSpread({}, createServerRequest(ortbReq, validBidRequests, getQueryVariable('dh_test')))); + return serverRequests; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var seatbid = serverResponse.body.seatbid; + var bids = request.bids; + var prebidResponse = []; + var seatBids = seatbid[0].bid; + seatBids.forEach(function (ortbResponseBid) { + var bidId = ortbResponseBid.impid; + var actualBid = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(bids, function (bid) { + return bid.bidId === bidId; + }); + var bidMediaType = ortbResponseBid.ext.prebid.type; + + switch (bidMediaType) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + prebidResponse.push(createPrebidBannerBid(actualBid, ortbResponseBid)); + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + prebidResponse.push(createPrebidNativeBid(actualBid, ortbResponseBid)); + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + prebidResponse.push(createPrebidVideoBid(actualBid, ortbResponseBid)); + break; + } + }); + return prebidResponse; + }, + onBidWon: function onBidWon(bid) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(bid.winUrl, null, null, { + method: 'GET' + }); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[368]); \ No newline at end of file diff --git a/build/dist/datablocksAnalyticsAdapter.js b/build/dist/datablocksAnalyticsAdapter.js new file mode 100644 index 00000000000..27c4a431893 --- /dev/null +++ b/build/dist/datablocksAnalyticsAdapter.js @@ -0,0 +1,295 @@ +pbjsChunk([37],{ + +/***/ 370: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(371); + + +/***/ }), + +/***/ 371: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/** + * Analytics Adapter for Datablocks + */ + + +var datablocksAdapter = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + global: 'datablocksAnalytics', + handler: 'on', + analyticsType: 'bundle' +}); +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: datablocksAdapter, + code: 'datablocks' +}); +/* harmony default export */ __webpack_exports__["default"] = (datablocksAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[370]); \ No newline at end of file diff --git a/build/dist/datablocksBidAdapter.js b/build/dist/datablocksBidAdapter.js new file mode 100644 index 00000000000..991074f74e9 --- /dev/null +++ b/build/dist/datablocksBidAdapter.js @@ -0,0 +1,402 @@ +pbjsChunk([237],{ + +/***/ 372: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(373); + + +/***/ }), + +/***/ 373: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + +var NATIVE_MAP = { + 'body': 2, + 'body2': 10, + 'price': 6, + 'displayUrl': 11, + 'cta': 12 +}; +var NATIVE_IMAGE = [{ + id: 1, + required: 1, + title: { + len: 140 + } +}, { + id: 2, + required: 1, + img: { + type: 3 + } +}, { + id: 3, + required: 1, + data: { + type: 11 + } +}, { + id: 4, + required: 0, + data: { + type: 2 + } +}, { + id: 5, + required: 0, + img: { + type: 1 + } +}, { + id: 6, + required: 0, + data: { + type: 12 + } +}]; +var VIDEO_PARAMS = ['mimes', 'minduration', 'maxduration', 'protocols', 'w', 'h', 'startdelay', 'placement', 'linearity', 'skip', 'skipmin', 'skipafter', 'sequence', 'battr', 'maxextended', 'minbitrate', 'maxbitrate', 'boxingallowed', 'playbackmethod', 'playbackend', 'delivery', 'pos', 'companionad', 'api', 'companiontype', 'ext']; +var spec = { + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + code: 'datablocks', + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.host && bid.params.sourceId && bid.mediaTypes && (bid.mediaTypes.banner || bid.mediaTypes.native || bid.mediaTypes.video)); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (!validBidRequests.length) { + return []; + } + + var imps = {}; + var site = {}; + var device = {}; + var refurl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](bidderRequest.referrer); + var requests = []; + validBidRequests.forEach(function (bidRequest) { + var imp = { + id: bidRequest.bidId, + tagid: bidRequest.adUnitCode, + secure: window.location.protocol == 'https:' + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "mediaTypes.banner")) { + var sizes = bidRequest.mediaTypes.banner.sizes; + + if (sizes.length == 1) { + imp.banner = { + w: sizes[0][0], + h: sizes[0][1] + }; + } else if (sizes.length > 1) { + imp.banner = { + format: sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }) + }; + } else { + return; + } + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.native')) { + var nativeImp = bidRequest.mediaTypes.native; + + if (nativeImp.type) { + var nativeAssets = []; + + switch (nativeImp.type) { + case 'image': + nativeAssets = NATIVE_IMAGE; + break; + + default: + return; + } + + imp.native = JSON.stringify({ + assets: nativeAssets + }); + } else { + var _nativeAssets = []; + var nativeKeys = Object.keys(nativeImp); + nativeKeys.forEach(function (nativeKey, index) { + var required = !!nativeImp[nativeKey].required; + var assetId = index + 1; + + switch (nativeKey) { + case 'title': + _nativeAssets.push({ + id: assetId, + required: required, + title: { + len: nativeImp[nativeKey].len || 140 + } + }); + + break; + + case 'body': // desc + + case 'body2': // desc2 + + case 'price': + case 'display_url': + var data = { + id: assetId, + required: required, + data: { + type: NATIVE_MAP[nativeKey] + } + }; + + if (nativeImp[nativeKey].data && nativeImp[nativeKey].data.len) { + data.data.len = nativeImp[nativeKey].data.len; + } + + _nativeAssets.push(data); + + break; + + case 'image': + if (nativeImp[nativeKey].sizes && nativeImp[nativeKey].sizes.length) { + _nativeAssets.push({ + id: assetId, + required: required, + image: { + type: 3, + w: nativeImp[nativeKey].sizes[0], + h: nativeImp[nativeKey].sizes[1] + } + }); + } + + } + }); + imp.native = { + request: JSON.stringify({ + native: { + assets: _nativeAssets + } + }) + }; + } + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video')) { + var video = bidRequest.mediaTypes.video; + + var _sizes = video.playerSize || bidRequest.sizes || []; + + if (_sizes.length && Array.isArray(_sizes[0])) { + imp.video = { + w: _sizes[0][0], + h: _sizes[0][1] + }; + } else if (_sizes.length == 2 && !Array.isArray(_sizes[0])) { + imp.video = { + w: _sizes[0], + h: _sizes[1] + }; + } else { + return; + } + + if (video.durationRangeSec) { + if (Array.isArray(video.durationRangeSec)) { + if (video.durationRangeSec.length == 1) { + imp.video.maxduration = video.durationRangeSec[0]; + } else if (video.durationRangeSec.length == 2) { + imp.video.minduration = video.durationRangeSec[0]; + imp.video.maxduration = video.durationRangeSec[1]; + } + } else { + imp.video.maxduration = video.durationRangeSec; + } + } + + if (bidRequest.params.video) { + Object.keys(bidRequest.params.video).forEach(function (k) { + if (VIDEO_PARAMS.indexOf(k) > -1) { + imp.video[k] = bidRequest.params.video[k]; + } + }); + } + } + + var host = bidRequest.params.host; + var sourceId = bidRequest.params.sourceId; + imps[host] = imps[host] || {}; + var hostImp = imps[host][sourceId] = imps[host][sourceId] || { + imps: [] + }; + hostImp.imps.push(imp); + hostImp.subid = hostImp.imps.subid || bidRequest.params.subid || 'blank'; + hostImp.path = 'search'; + hostImp.idParam = 'sid'; + hostImp.protocol = '//'; + }); // Generate Site obj + + site.domain = refurl.hostname; + site.page = refurl.protocol + '://' + refurl.hostname + refurl.pathname; + + if (self === top && document.referrer) { + site.ref = document.referrer; + } + + var keywords = document.getElementsByTagName('meta')['keywords']; + + if (keywords && keywords.content) { + site.keywords = keywords.content; + } // Generate Device obj. + + + device.ip = 'peer'; + device.ua = window.navigator.userAgent; + device.js = 1; + device.language = (navigator.language || navigator.userLanguage || '').split('-')[0] || 'en'; + RtbRequest(device, site, imps).forEach(function (formatted) { + requests.push({ + method: 'POST', + url: formatted.url, + data: formatted.body, + options: { + withCredentials: false + } + }); + }); + return requests; + + function RtbRequest(device, site, imps) { + var collection = []; + Object.keys(imps).forEach(function (host) { + var sourceIds = imps[host]; + Object.keys(sourceIds).forEach(function (sourceId) { + var impObj = sourceIds[sourceId]; + collection.push({ + url: "https://".concat(host, "/").concat(impObj.path, "/?").concat(impObj.idParam, "=").concat(sourceId), + body: { + id: bidderRequest.auctionId, + imp: impObj.imps, + site: _extends({ + id: impObj.subid || 'blank' + }, site), + device: _extends({}, device) + } + }); + }); + }); + return collection; + } + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + if (!serverResponse || !serverResponse.body || !serverResponse.body.seatbid) { + return []; + } + + var body = serverResponse.body; + var bids = body.seatbid.map(function (seatbid) { + return seatbid.bid; + }).reduce(function (memo, bid) { + return memo.concat(bid); + }, []); + var req = bidRequest.data; + var reqImps = req.imp; + return bids.map(function (rtbBid) { + var imp; + + for (var i in reqImps) { + var testImp = reqImps[i]; + + if (testImp.id == rtbBid.impid) { + imp = testImp; + break; + } + } + + var br = { + requestId: rtbBid.impid, + cpm: rtbBid.price, + creativeId: rtbBid.crid, + currency: rtbBid.currency || 'USD', + netRevenue: true, + ttl: 360 + }; + + if (!imp) { + return br; + } else if (imp.banner) { + br.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + br.width = rtbBid.w; + br.height = rtbBid.h; + br.ad = rtbBid.adm; + } else if (imp.native) { + br.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + var reverseNativeMap = {}; + var nativeKeys = Object.keys(NATIVE_MAP); + nativeKeys.forEach(function (k) { + reverseNativeMap[NATIVE_MAP[k]] = k; + }); + var idMap = {}; + var nativeReq = JSON.parse(imp.native.request); + + if (nativeReq.native && nativeReq.native.assets) { + nativeReq.native.assets.forEach(function (asset) { + if (asset.data) { + idMap[asset.id] = reverseNativeMap[asset.data.type]; + } + }); + } + + var nativeResponse = JSON.parse(rtbBid.adm); + var _nativeResponse$nativ = nativeResponse.native, + assets = _nativeResponse$nativ.assets, + link = _nativeResponse$nativ.link, + imptrackers = _nativeResponse$nativ.imptrackers, + jstrackers = _nativeResponse$nativ.jstrackers; + var result = { + clickUrl: link.url, + clickTrackers: link.clicktrackers || undefined, + impressionTrackers: imptrackers || undefined, + javascriptTrackers: jstrackers ? [jstrackers] : undefined + }; + assets.forEach(function (asset) { + if (asset.title) { + result.title = asset.title.text; + } else if (asset.img) { + result.image = asset.img.url; + } else if (idMap[asset.id]) { + result[idMap[asset.id]] = asset.data.value; + } + }); + br.native = result; + } else if (imp.video) { + br.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + br.width = rtbBid.w; + br.height = rtbBid.h; + + if (rtbBid.adm) { + br.vastXml = rtbBid.adm; + } else if (rtbBid.nurl) { + br.vastUrl = rtbBid.nurl; + } + } + + return br; + }); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[372]); \ No newline at end of file diff --git a/build/dist/deepintentBidAdapter.js b/build/dist/deepintentBidAdapter.js new file mode 100644 index 00000000000..3767b117012 --- /dev/null +++ b/build/dist/deepintentBidAdapter.js @@ -0,0 +1,218 @@ +pbjsChunk([236],{ + +/***/ 374: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(375); + + +/***/ }), + +/***/ 375: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'deepintent'; +var BIDDER_ENDPOINT = 'https://prebid.deepintent.com/prebid'; +var USER_SYNC_URL = 'https://cdn.deepintent.com/syncpixel.html'; +var DI_M_V = '1.0.0'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + aliases: [], + // tagId is mandatory param + isBidRequestValid: function isBidRequestValid(bid) { + var valid = false; + + if (bid && bid.params && bid.params.tagId) { + if (typeof bid.params.tagId === 'string' || bid.params.tagId instanceof String) { + valid = true; + } + } + + return valid; + }, + interpretResponse: function interpretResponse(bidResponse, request) { + var responses = []; + + if (bidResponse && bidResponse.body) { + var bids = bidResponse.body.seatbid && bidResponse.body.seatbid[0] ? bidResponse.body.seatbid[0].bid : []; + responses = bids.map(function (bid) { + return formatResponse(bid); + }); + } + + return responses; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var user = validBidRequests.map(function (bid) { + return buildUser(bid); + }); + clean(user); + var openRtbBidRequest = { + id: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["generateUUID"](), + at: 1, + imp: validBidRequests.map(function (bid) { + return buildImpression(bid); + }), + site: buildSite(bidderRequest), + device: buildDevice(), + user: user && user.length === 1 ? user[0] : {} + }; + + if (bidderRequest && bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](openRtbBidRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](openRtbBidRequest, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](openRtbBidRequest, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } + + return { + method: 'POST', + url: BIDDER_ENDPOINT, + data: JSON.stringify(openRtbBidRequest), + options: { + contentType: 'application/json' + } + }; + }, + + /** + * Register User Sync. + */ + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: USER_SYNC_URL + }]; + } + } +}; + +function clean(obj) { + for (var propName in obj) { + if (obj[propName] === null || obj[propName] === undefined) { + delete obj[propName]; + } + } +} + +function formatResponse(bid) { + return { + requestId: bid && bid.impid ? bid.impid : undefined, + cpm: bid && bid.price ? bid.price : 0.0, + width: bid && bid.w ? bid.w : 0, + height: bid && bid.h ? bid.h : 0, + ad: bid && bid.adm ? bid.adm : '', + creativeId: bid && bid.crid ? bid.crid : undefined, + netRevenue: false, + currency: bid && bid.cur ? bid.cur : 'USD', + ttl: 300, + dealId: bid && bid.dealId ? bid.dealId : undefined + }; +} + +function buildImpression(bid) { + return { + id: bid.bidId, + tagid: bid.params.tagId || '', + secure: window.location.protocol === 'https' ? 1 : 0, + banner: buildBanner(bid), + displaymanager: 'di_prebid', + displaymanagerver: DI_M_V, + ext: buildCustomParams(bid) + }; +} + +function buildCustomParams(bid) { + if (bid.params && bid.params.custom) { + return { + deepintent: bid.params.custom + }; + } else { + return {}; + } +} + +function buildUser(bid) { + if (bid && bid.params && bid.params.user) { + return { + id: bid.params.user.id && typeof bid.params.user.id == 'string' ? bid.params.user.id : undefined, + buyeruid: bid.params.user.buyeruid && typeof bid.params.user.buyeruid == 'string' ? bid.params.user.buyeruid : undefined, + yob: bid.params.user.yob && typeof bid.params.user.yob == 'number' ? bid.params.user.yob : null, + gender: bid.params.user.gender && typeof bid.params.user.gender == 'string' ? bid.params.user.gender : undefined, + keywords: bid.params.user.keywords && typeof bid.params.user.keywords == 'string' ? bid.params.user.keywords : undefined, + customdata: bid.params.user.customdata && typeof bid.params.user.customdata == 'string' ? bid.params.user.customdata : undefined + }; + } +} + +function buildBanner(bid) { + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner')) { + // Get Sizes from MediaTypes Object, Will always take first size, will be overrided by params for exact w,h + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') && !bid.params.height && !bid.params.width) { + var sizes = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes'); + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](sizes) && sizes.length > 0) { + return { + h: sizes[0][1], + w: sizes[0][0], + pos: bid && bid.params && bid.params.pos ? bid.params.pos : 0 + }; + } + } else { + return { + h: bid.params.height, + w: bid.params.width, + pos: bid && bid.params && bid.params.pos ? bid.params.pos : 0 + }; + } + } +} + +function buildSite(bidderRequest) { + var site = {}; + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + site.page = bidderRequest.refererInfo.referer; + site.domain = getDomain(bidderRequest.refererInfo.referer); + } + + return site; +} + +function getDomain(referer) { + if (referer) { + var domainA = document.createElement('a'); + domainA.href = referer; + return domainA.hostname; + } +} + +function buildDevice() { + return { + ua: navigator.userAgent, + js: 1, + dnt: navigator.doNotTrack == 'yes' || navigator.doNotTrack === '1' ? 1 : 0, + h: screen.height, + w: screen.width, + language: navigator.language + }; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[374]); \ No newline at end of file diff --git a/build/dist/dfpAdServerVideo.js b/build/dist/dfpAdServerVideo.js new file mode 100644 index 00000000000..83705961f06 --- /dev/null +++ b/build/dist/dfpAdServerVideo.js @@ -0,0 +1,309 @@ +pbjsChunk([235],{ + +/***/ 376: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(377); + + +/***/ }), + +/***/ 377: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "adpodUtils", function() { return adpodUtils; }); +/* harmony export (immutable) */ __webpack_exports__["buildDfpVideoUrl"] = buildDfpVideoUrl; +/* harmony export (immutable) */ __webpack_exports__["notifyTranslationModule"] = notifyTranslationModule; +/* harmony export (immutable) */ __webpack_exports__["buildAdpodVideoUrl"] = buildAdpodVideoUrl; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adServerManager_js__ = __webpack_require__(69); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_targeting_js__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_auctionManager_js__ = __webpack_require__(26); +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * This module adds [DFP support]{@link https://www.doubleclickbygoogle.com/} for Video to Prebid. + */ + + + + + + +/** + * @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 +}; +var adpodUtils = {}; +/** + * 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) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"])("A params object or a url is required to use pbjs.adServers.dfp.buildVideoUrl"); + return; + } + + var adUnit = options.adUnit; + var bid = options.bid || __WEBPACK_IMPORTED_MODULE_1__src_targeting_js__["a" /* 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 = Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseUrl"])(options.url, { + noDecodeWholeURL: true + }); + + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"])(options.params)) { + return buildUrlFromAdserverUrlComponents(urlComponents, bid, options); + } + } + + var derivedParams = { + correlator: Date.now(), + sz: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseSizesInput"])(adUnit.sizes).join('|'), + url: encodeURIComponent(location.href) + }; + var encodedCustomParams = getCustParams(bid, options); + + var queryParams = _extends({}, defaultParamConstants, urlComponents.search, derivedParams, options.params, { + cust_params: encodedCustomParams + }); + + var descriptionUrl = getDescriptionUrl(bid, options, 'params'); + + if (descriptionUrl) { + queryParams.description_url = descriptionUrl; + } + + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])({ + protocol: 'https', + host: 'securepubads.g.doubleclick.net', + pathname: '/gampad/ads', + search: queryParams + }); +} +function notifyTranslationModule(fn) { + fn.call(this, 'dfp'); +} +Object(__WEBPACK_IMPORTED_MODULE_4__src_hook_js__["a" /* getHook */])('registerAdserver').before(notifyTranslationModule); +/** + * @typedef {Object} DfpAdpodOptions + * + * @param {string} code Ad Unit code + * @param {Object} params Query params which should be set on the DFP request. + * These will override this module's defaults whenever they conflict. + * @param {function} callback Callback function to execute when master tag is ready + */ + +/** + * Creates master tag url for long-form + * @param {DfpAdpodOptions} options + * @returns {string} A URL which calls DFP with custom adpod targeting key values to compete with rest of the demand in DFP + */ + +function buildAdpodVideoUrl() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + code = _ref.code, + params = _ref.params, + callback = _ref.callback; + + if (!params || !callback) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"])("A params object and a callback is required to use pbjs.adServers.dfp.buildAdpodVideoUrl"); + return; + } + + var derivedParams = { + correlator: Date.now(), + sz: getSizeForAdUnit(code), + url: encodeURIComponent(location.href) + }; + + function getSizeForAdUnit(code) { + var adUnit = __WEBPACK_IMPORTED_MODULE_5__src_auctionManager_js__["a" /* auctionManager */].getAdUnits().filter(function (adUnit) { + return adUnit.code === code; + }); + var sizes = Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(adUnit[0], 'mediaTypes.video.playerSize'); + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseSizesInput"])(sizes).join('|'); + } + + adpodUtils.getTargeting({ + 'codes': [code], + 'callback': createMasterTag + }); + + function createMasterTag(err, targeting) { + var _initialValue; + + if (err) { + callback(err, null); + return; + } + + var initialValue = (_initialValue = {}, _defineProperty(_initialValue, adpodUtils.TARGETING_KEY_PB_CAT_DUR, undefined), _defineProperty(_initialValue, adpodUtils.TARGETING_KEY_CACHE_ID, undefined), _initialValue); + var customParams = {}; + + if (targeting[code]) { + customParams = targeting[code].reduce(function (acc, curValue) { + if (Object.keys(curValue)[0] === adpodUtils.TARGETING_KEY_PB_CAT_DUR) { + acc[adpodUtils.TARGETING_KEY_PB_CAT_DUR] = typeof acc[adpodUtils.TARGETING_KEY_PB_CAT_DUR] !== 'undefined' ? acc[adpodUtils.TARGETING_KEY_PB_CAT_DUR] + ',' + curValue[adpodUtils.TARGETING_KEY_PB_CAT_DUR] : curValue[adpodUtils.TARGETING_KEY_PB_CAT_DUR]; + } else if (Object.keys(curValue)[0] === adpodUtils.TARGETING_KEY_CACHE_ID) { + acc[adpodUtils.TARGETING_KEY_CACHE_ID] = curValue[adpodUtils.TARGETING_KEY_CACHE_ID]; + } + + return acc; + }, initialValue); + } + + var encodedCustomParams = encodeURIComponent(Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["formatQS"])(customParams)); + + var queryParams = _extends({}, defaultParamConstants, derivedParams, params, { + cust_params: encodedCustomParams + }); + + var masterTag = Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])({ + protocol: 'https', + host: 'securepubads.g.doubleclick.net', + pathname: '/gampad/ads', + search: queryParams + }); + callback(null, masterTag); + } +} +/** + * 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 + * @param {Object} options Options which should be used to construct the URL (used for custom params). + * @return {string} video url + */ + +function buildUrlFromAdserverUrlComponents(components, bid, options) { + var descriptionUrl = getDescriptionUrl(bid, components, 'search'); + + if (descriptionUrl) { + components.search.description_url = descriptionUrl; + } + + var encodedCustomParams = getCustParams(bid, options); + components.search.cust_params = components.search.cust_params ? components.search.cust_params + '%26' + encodedCustomParams : encodedCustomParams; + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])(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 (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('cache.url')) { + return; + } + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(components, "".concat(prop, ".description_url"))) { + var vastUrl = bid && bid.vastUrl; + + if (vastUrl) { + return encodeURIComponent(vastUrl); + } + } else { + Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"])("input cannnot contain description_url"); + } +} +/** + * Returns the encoded `cust_params` from the bid.adserverTargeting and adds the `hb_uuid`, and `hb_cache_id`. Optionally the options.params.cust_params + * @param {AdapterBidResponse} bid + * @param {Object} options this is the options passed in from the `buildDfpVideoUrl` function + * @return {Object} Encoded key value pairs for cust_params + */ + + +function getCustParams(bid, options) { + var adserverTargeting = bid && bid.adserverTargeting || {}; + var allTargetingData = {}; + var adUnit = options && options.adUnit; + + if (adUnit) { + var allTargeting = __WEBPACK_IMPORTED_MODULE_1__src_targeting_js__["a" /* targeting */].getAllTargeting(adUnit.code); + allTargetingData = allTargeting ? allTargeting[adUnit.code] : {}; + } + + var optCustParams = Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(options, 'params.cust_params'); + + var customParams = _extends({}, // Why are we adding standard keys here ? Refer https://github.com/prebid/Prebid.js/issues/3664 + { + hb_uuid: bid && bid.videoCacheKey + }, // hb_uuid will be deprecated and replaced by hb_cache_id + { + hb_cache_id: bid && bid.videoCacheKey + }, allTargetingData, adserverTargeting, optCustParams); + + return encodeURIComponent(Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["formatQS"])(customParams)); +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adServerManager_js__["a" /* registerVideoSupport */])('dfp', { + buildVideoUrl: buildDfpVideoUrl, + buildAdpodVideoUrl: buildAdpodVideoUrl, + getAdpodTargeting: function getAdpodTargeting(args) { + return adpodUtils.getTargeting(args); + } +}); +Object(__WEBPACK_IMPORTED_MODULE_4__src_hook_js__["e" /* submodule */])('adpod', adpodUtils); + +/***/ }) + +},[376]); \ No newline at end of file diff --git a/build/dist/districtmDMXBidAdapter.js b/build/dist/districtmDMXBidAdapter.js new file mode 100644 index 00000000000..517a0c9d2d1 --- /dev/null +++ b/build/dist/districtmDMXBidAdapter.js @@ -0,0 +1,405 @@ +pbjsChunk([234],{ + +/***/ 378: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(379); + + +/***/ }), + +/***/ 379: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["cleanSizes"] = cleanSizes; +/* harmony export (immutable) */ __webpack_exports__["shuffle"] = shuffle; +/* harmony export (immutable) */ __webpack_exports__["removeDuplicate"] = removeDuplicate; +/* harmony export (immutable) */ __webpack_exports__["upto5"] = upto5; +/* harmony export (immutable) */ __webpack_exports__["matchRequest"] = matchRequest; +/* harmony export (immutable) */ __webpack_exports__["checkDeepArray"] = checkDeepArray; +/* harmony export (immutable) */ __webpack_exports__["defaultSize"] = defaultSize; +/* harmony export (immutable) */ __webpack_exports__["bindUserId"] = bindUserId; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 = 'districtmDMX'; +var DMXURI = 'https://dmx.districtm.io/b/v1'; +var spec = { + code: BIDDER_CODE, + supportedFormat: ['banner'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.dmxid && bid.params.memberid); + }, + interpretResponse: function interpretResponse(response, bidRequest) { + response = response.body || {}; + + if (response.seatbid) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](response.seatbid)) { + var _response = response, + seatbid = _response.seatbid; + var winners = seatbid.reduce(function (bid, ads) { + var ad = ads.bid.reduce(function (oBid, nBid) { + if (oBid.price < nBid.price) { + var _bid = matchRequest(nBid.impid, bidRequest); + + var _defaultSize = defaultSize(_bid), + width = _defaultSize.width, + height = _defaultSize.height; + + nBid.cpm = parseFloat(nBid.price).toFixed(2); + nBid.bidId = nBid.impid; + nBid.requestId = nBid.impid; + nBid.width = nBid.w || width; + nBid.height = nBid.h || height; + + if (nBid.dealid) { + nBid.dealId = nBid.dealid; + } + + nBid.ad = nBid.adm; + nBid.netRevenue = true; + nBid.creativeId = nBid.crid; + nBid.currency = 'USD'; + nBid.ttl = 60; + return nBid; + } else { + oBid.cpm = oBid.price; + return oBid; + } + }, { + price: 0 + }); + + if (ad.adm) { + bid.push(ad); + } + + return bid; + }, []); + var winnersClean = winners.filter(function (w) { + if (w.bidId) { + return true; + } + + return false; + }); + return winnersClean; + } else { + return []; + } + } else { + return []; + } + }, + buildRequests: function buildRequests(bidRequest, bidderRequest) { + var timeout = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout'); + var schain = null; + var dmxRequest = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"](), + cur: ['USD'], + tmax: timeout - 300, + test: this.test() || 0, + site: { + publisher: { + id: String(bidRequest[0].params.memberid) || null + } + } + }; + + try { + var params = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('dmx'); + dmxRequest.user = params.user || {}; + var site = params.site || {}; + dmxRequest.site = _objectSpread(_objectSpread({}, dmxRequest.site), site); + } catch (e) {} + + var eids = []; + + if (bidRequest && bidRequest.userId) { + bindUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.idl_env"), 'liveramp.com', 1); + bindUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.digitrustid.data.id"), 'digitru.st', 1); + bindUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.id5id"), 'id5-sync.com', 1); + bindUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.pubcid"), 'pubcid.org', 1); + bindUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.tdid"), 'adserver.org', 1); + dmxRequest.user = dmxRequest.user || {}; + dmxRequest.user.ext = dmxRequest.user.ext || {}; + dmxRequest.user.ext.eids = eids; + } + + if (!dmxRequest.test) { + delete dmxRequest.test; + } + + if (bidderRequest.gdprConsent) { + dmxRequest.regs = {}; + dmxRequest.regs.ext = {}; + dmxRequest.regs.ext.gdpr = bidderRequest.gdprConsent.gdprApplies === true ? 1 : 0; + dmxRequest.user = {}; + dmxRequest.user.ext = {}; + dmxRequest.user.ext.consent = bidderRequest.gdprConsent.consentString; + } + + dmxRequest.regs = dmxRequest.regs || {}; + dmxRequest.regs.coppa = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true ? 1 : 0; + + if (bidderRequest && bidderRequest.uspConsent) { + dmxRequest.regs = dmxRequest.regs || {}; + dmxRequest.regs.ext = dmxRequest.regs.ext || {}; + dmxRequest.regs.ext.us_privacy = bidderRequest.uspConsent; + } + + try { + schain = bidRequest[0].schain; + dmxRequest.source = {}; + dmxRequest.source.ext = {}; + dmxRequest.source.ext.schain = schain || {}; + } catch (e) {} + + var tosendtags = bidRequest.map(function (dmx) { + var obj = {}; + obj.id = dmx.bidId; + obj.tagid = String(dmx.params.dmxid); + obj.secure = 1; + obj.banner = { + topframe: 1, + w: cleanSizes(dmx.sizes, 'w'), + h: cleanSizes(dmx.sizes, 'h'), + format: cleanSizes(dmx.sizes).map(function (s) { + return { + w: s[0], + h: s[1] + }; + }).filter(function (obj) { + return typeof obj.w === 'number' && typeof obj.h === 'number'; + }) + }; + return obj; + }); + + if (tosendtags.length <= 5) { + dmxRequest.imp = tosendtags; + return { + method: 'POST', + url: DMXURI, + data: JSON.stringify(dmxRequest), + bidderRequest: bidderRequest + }; + } else { + return upto5(tosendtags, dmxRequest, bidderRequest, DMXURI); + } + }, + test: function test() { + return window.location.href.indexOf('dmTest=true') !== -1 ? 1 : 0; + }, + getUserSyncs: function getUserSyncs(optionsType, serverResponses, gdprConsent, uspConsent) { + var query = []; + var url = 'https://cdn.districtm.io/ids/index.html'; + + if (gdprConsent && gdprConsent.gdprApplies && typeof gdprConsent.consentString === 'string') { + query.push(['gdpr', gdprConsent.consentString]); + } + + if (uspConsent) { + query.push(['ccpa', uspConsent]); + } + + if (query.length > 0) { + url += '?' + query.map(function (q) { + return q.join('='); + }).join('&'); + } + + if (optionsType.iframeEnabled) { + return [{ + type: 'iframe', + url: url + }]; + } + } +}; +function cleanSizes(sizes, value) { + var supportedSize = [{ + size: [300, 250], + s: 100 + }, { + size: [728, 90], + s: 95 + }, { + size: [320, 50], + s: 90 + }, { + size: [160, 600], + s: 88 + }, { + size: [300, 600], + s: 85 + }, { + size: [300, 50], + s: 80 + }, { + size: [970, 250], + s: 75 + }, { + size: [970, 90], + s: 60 + }]; + var newArray = shuffle(sizes, supportedSize); + + switch (value) { + case 'w': + return newArray[0][0] || 0; + + case 'h': + return newArray[0][1] || 0; + + case 'size': + return newArray; + + default: + return newArray; + } +} +function shuffle(sizes, list) { + var removeSizes = sizes.filter(function (size) { + return list.map(function (l) { + return "".concat(l.size[0], "x").concat(l.size[1]); + }).indexOf("".concat(size[0], "x").concat(size[1])) === -1; + }); + var reOrder = sizes.reduce(function (results, current) { + if (results.length === 0) { + results.push(current); + return results; + } + + results.push(current); + results = list.filter(function (l) { + return results.map(function (r) { + return "".concat(r[0], "x").concat(r[1]); + }).indexOf("".concat(l.size[0], "x").concat(l.size[1])) !== -1; + }); + results = results.sort(function (a, b) { + return b.s - a.s; + }); + return results.map(function (r) { + return r.size; + }); + }, []); + return removeDuplicate([].concat(_toConsumableArray(reOrder), _toConsumableArray(removeSizes))); +} +function removeDuplicate(arrayValue) { + return arrayValue.filter(function (elem, index) { + return arrayValue.map(function (e) { + return "".concat(e[0], "x").concat(e[1]); + }).indexOf("".concat(elem[0], "x").concat(elem[1])) === index; + }); +} +function upto5(allimps, dmxRequest, bidderRequest, DMXURI) { + var start = 0; + var step = 5; + var req = []; + + while (allimps.length !== 0) { + if (allimps.length >= 5) { + req.push(allimps.splice(start, step)); + } else { + req.push(allimps.splice(start, allimps.length)); + } + } + + return req.map(function (r) { + dmxRequest.imp = r; + return { + method: 'POST', + url: DMXURI, + data: JSON.stringify(dmxRequest), + bidderRequest: bidderRequest + }; + }); +} +/** + * Function matchRequest(id: string, BidRequest: object) + * @param id + * @type string + * @param bidRequest + * @type Object + * @returns Object + * + */ + +function matchRequest(id, bidRequest) { + var bids = bidRequest.bidderRequest.bids; + + var _bids$filter = bids.filter(function (bid) { + return bid.bidId === id; + }), + _bids$filter2 = _slicedToArray(_bids$filter, 1), + returnValue = _bids$filter2[0]; + + return returnValue; +} +function checkDeepArray(Arr) { + if (Array.isArray(Arr)) { + if (Array.isArray(Arr[0])) { + return Arr[0]; + } else { + return Arr; + } + } else { + return Arr; + } +} +function defaultSize(thebidObj) { + var sizes = thebidObj.sizes; + var returnObject = {}; + returnObject.width = checkDeepArray(sizes)[0]; + returnObject.height = checkDeepArray(sizes)[1]; + return returnObject; +} +function bindUserId(eids, value, source, atype) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value) && Array.isArray(eids)) { + eids.push({ + source: source, + uids: [{ + id: value, + atype: atype + }] + }); + } +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[378]); \ No newline at end of file diff --git a/build/dist/djaxBidAdapter.js b/build/dist/djaxBidAdapter.js new file mode 100644 index 00000000000..bd67c0cbecc --- /dev/null +++ b/build/dist/djaxBidAdapter.js @@ -0,0 +1,160 @@ +pbjsChunk([233],{ + +/***/ 380: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(381); + + +/***/ }), + +/***/ 381: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_Renderer_js__ = __webpack_require__(11); + + + + + + +var SUPPORTED_AD_TYPES = [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]]; +var BIDDER_CODE = 'djax'; +var DOMAIN = 'https://demo.reviveadservermod.com/headerbidding_adminshare/'; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; + +function isBidRequestValid(bid) { + return typeof bid.params !== 'undefined' && parseInt(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getValue"](bid.params, 'publisherId')) > 0; +} + +function buildRequests(validBidRequests) { + return { + method: 'POST', + url: DOMAIN + 'www/admin/plugins/Prebid/getAd.php', + options: { + withCredentials: false, + crossOrigin: true + }, + data: validBidRequests + }; +} + +function interpretResponse(serverResponse, request) { + var response = serverResponse.body; + var bidResponses = []; + var bidRequestResponses = []; + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_each"](response, function (bidAd) { + bidAd.adResponse = { + content: bidAd.vastXml, + height: bidAd.height, + width: bidAd.width + }; + bidAd.ttl = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'); + bidAd.renderer = bidAd.context === 'outstream' ? createRenderer(bidAd, { + id: bidAd.adUnitCode, + url: RENDERER_URL + }, bidAd.adUnitCode) : undefined; + bidResponses.push(bidAd); + }); + + bidRequestResponses.push({ + function: 'saveResponses', + request: request, + response: bidResponses + }); + sendResponseToServer(bidRequestResponses); + return bidResponses; +} + +function outstreamRender(bidAd) { + bidAd.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + sizes: [bidAd.width, bidAd.height], + width: bidAd.width, + height: bidAd.height, + targetId: bidAd.adUnitCode, + adResponse: bidAd.adResponse, + rendererOptions: { + showVolume: false, + allowFullscreen: false + } + }); + }); +} + +function createRenderer(bidAd, rendererParams, adUnitCode) { + var renderer = __WEBPACK_IMPORTED_MODULE_5__src_Renderer_js__["a" /* Renderer */].install({ + id: rendererParams.id, + url: rendererParams.url, + loaded: false, + config: { + 'player_height': bidAd.height, + 'player_width': bidAd.width + }, + adUnitCode: adUnitCode + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function onBidWon(bid) { + var wonBids = []; + wonBids.push(bid); + wonBids[0].function = 'onBidWon'; + sendResponseToServer(wonBids); +} + +function onTimeout(details) { + details.unshift({ + 'function': 'onTimeout' + }); + sendResponseToServer(details); +} + +function sendResponseToServer(data) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])(DOMAIN + 'www/admin/plugins/Prebid/tracking/track.php', null, JSON.stringify(data), { + withCredentials: false, + method: 'POST', + crossOrigin: true + }); +} + +function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: DOMAIN + 'www/admin/plugins/Prebid/userSync.php' + }]; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: SUPPORTED_AD_TYPES, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs, + onBidWon: onBidWon, + onTimeout: onTimeout +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[380]); \ No newline at end of file diff --git a/build/dist/dspxBidAdapter.js b/build/dist/dspxBidAdapter.js new file mode 100644 index 00000000000..dd6348bdbaa --- /dev/null +++ b/build/dist/dspxBidAdapter.js @@ -0,0 +1,200 @@ +pbjsChunk([232],{ + +/***/ 382: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(383); + + +/***/ }), + +/***/ 383: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var BIDDER_CODE = 'dspx'; +var ENDPOINT_URL = 'https://buyer.dspx.tv/request/'; +var ENDPOINT_URL_DEV = 'https://dcbuyer.dspx.tv/request/'; +var DEFAULT_VAST_FORMAT = 'vast2'; +var spec = { + code: BIDDER_CODE, + aliases: ['dspx'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placement; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bidRequest) { + var params = bidRequest.params; + var videoData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') || {}; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](videoData.playerSize || bidRequest.sizes)[0]; + + var _sizes$split = sizes.split('x'), + _sizes$split2 = _slicedToArray(_sizes$split, 2), + width = _sizes$split2[0], + height = _sizes$split2[1]; + + var placementId = params.placement; + var rnd = Math.floor(Math.random() * 99999999999); + var referrer = bidderRequest.refererInfo.referer; + var bidId = bidRequest.bidId; + var isDev = params.devMode || false; + var endpoint = isDev ? ENDPOINT_URL_DEV : ENDPOINT_URL; + var payload = {}; + + if (isVideoRequest(bidRequest)) { + var vastFormat = params.vastFormat || DEFAULT_VAST_FORMAT; + payload = { + _f: vastFormat, + alternative: 'prebid_js', + inventory_item_id: placementId, + srw: width, + srh: height, + idt: 100, + rnd: rnd, + ref: referrer, + bid_id: bidId + }; + } else { + payload = { + _f: 'html', + alternative: 'prebid_js', + inventory_item_id: placementId, + srw: width, + srh: height, + idt: 100, + rnd: rnd, + ref: referrer, + bid_id: bidId + }; + } + + if (params.pfilter !== undefined) { + payload.pfilter = params.pfilter; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + if (payload.pfilter !== undefined) { + if (!payload.pfilter.gdpr_consent) { + payload.pfilter.gdpr_consent = bidderRequest.gdprConsent.consentString; + payload.pfilter.gdpr = bidderRequest.gdprConsent.gdprApplies; + } + } else { + payload.pfilter = { + 'gdpr_consent': bidderRequest.gdprConsent.consentString, + 'gdpr': bidderRequest.gdprConsent.gdprApplies + }; + } + } + + if (params.bcat !== undefined) { + payload.bcat = params.bcat; + } + + if (params.dvt !== undefined) { + payload.dvt = params.dvt; + } + + if (isDev) { + payload.prebidDevMode = 1; + } + + return { + method: 'GET', + url: endpoint, + data: objectToQueryString(payload) + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + var crid = response.crid || 0; + var cpm = response.cpm / 1000000 || 0; + + if (cpm !== 0 && crid !== 0) { + var dealId = response.dealid || ''; + var currency = response.currency || 'EUR'; + var netRevenue = response.netRevenue === undefined ? true : response.netRevenue; + var bidResponse = { + requestId: response.bid_id, + cpm: cpm, + width: response.width, + height: response.height, + creativeId: crid, + dealId: dealId, + currency: currency, + netRevenue: netRevenue, + type: response.type, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout') + }; + + if (response.vastXml) { + bidResponse.vastXml = response.vastXml; + bidResponse.mediaType = 'video'; + } else { + bidResponse.ad = response.adTag; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + } +}; + +function objectToQueryString(obj, prefix) { + var str = []; + var p; + + for (p in obj) { + if (obj.hasOwnProperty(p)) { + var k = prefix ? prefix + '[' + p + ']' : p; + var v = obj[p]; + str.push(v !== null && _typeof(v) === 'object' ? objectToQueryString(v, k) : encodeURIComponent(k) + '=' + encodeURIComponent(v)); + } + } + + return str.join('&'); +} +/** + * 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' || !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[382]); \ No newline at end of file diff --git a/build/dist/e_volutionBidAdapter.js b/build/dist/e_volutionBidAdapter.js new file mode 100644 index 00000000000..6e9713c015d --- /dev/null +++ b/build/dist/e_volutionBidAdapter.js @@ -0,0 +1,142 @@ +pbjsChunk([231],{ + +/***/ 384: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(385); + + +/***/ }), + +/***/ 385: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'e_volution'; +var AD_URL = 'https://service.e-volution.ai/?c=o&m=multi'; +var URL_SYNC = 'https://service.e-volution.ai/?c=o&m=sync'; +var NO_SYNC = true; + +function isBidResponseValid(bid) { + if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { + return false; + } + + switch (bid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + return Boolean(bid.native && bid.native.title && bid.native.image && bid.native.impressionTrackers); + + default: + return false; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + noSync: NO_SYNC, + isBidRequestValid: function isBidRequestValid(bid) { + return Boolean(bid.bidId && bid.params && !isNaN(parseInt(bid.params.placementId))); + }, + buildRequests: function buildRequests() { + var validBidRequests = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var bidderRequest = arguments.length > 1 ? arguments[1] : undefined; + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + var placements = []; + var request = { + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'language': navigator && navigator.language ? navigator.language.split('-')[0] : '', + 'secure': 1, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + + if (bidderRequest) { + if (bidderRequest.uspConsent) { + request.ccpa = bidderRequest.uspConsent; + } + + if (bidderRequest.gdprConsent) { + request.gdpr = bidderRequest.gdprConsent; + } + } + + var len = validBidRequests.length; + + for (var i = 0; i < len; i++) { + var bid = validBidRequests[i]; + var traff = bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + placements.push({ + placementId: bid.params.placementId, + bidId: bid.bidId, + sizes: bid.mediaTypes && bid.mediaTypes[traff] && bid.mediaTypes[traff].sizes ? bid.mediaTypes[traff].sizes : [], + traffic: traff + }); + + if (bid.schain) { + placements.schain = bid.schain; + } + } + + return { + method: 'POST', + url: AD_URL, + data: request + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var response = []; + + for (var i = 0; i < serverResponse.body.length; i++) { + var resItem = serverResponse.body[i]; + + if (isBidResponseValid(resItem)) { + response.push(resItem); + } + } + + return response; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (NO_SYNC) { + return false; + } else { + return [{ + type: 'image', + url: URL_SYNC + }]; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[384]); \ No newline at end of file diff --git a/build/dist/ebdrBidAdapter.js b/build/dist/ebdrBidAdapter.js new file mode 100644 index 00000000000..f05572e1acb --- /dev/null +++ b/build/dist/ebdrBidAdapter.js @@ -0,0 +1,192 @@ +pbjsChunk([230],{ + +/***/ 386: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(387); + + +/***/ }), + +/***/ 387: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +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 = 'ebdr'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.zoneid); + }, + buildRequests: function buildRequests(bids) { + var rtbServerDomain = 'dsp.bnmla.com'; + var domain = window.location.host; + var page = window.location.pathname + location.search + location.hash; + var ebdrImps = []; + var ebdrReq = {}; + var ebdrParams = {}; + var zoneid = ''; + var requestId = ''; + bids.forEach(function (bid) { + var _ebdrImps$push; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Log bid', bid); + var bidFloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidfloor', bid.params); + var whArr = getWidthAndHeight(bid); + + var _mediaTypes = bid.mediaTypes && bid.mediaTypes.video ? __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] : __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + + zoneid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('zoneid', bid.params); + requestId = bid.bidderRequestId; + ebdrImps.push((_ebdrImps$push = { + id: bid.bidId + }, _defineProperty(_ebdrImps$push, _mediaTypes, { + w: whArr[0], + h: whArr[1] + }), _defineProperty(_ebdrImps$push, "bidfloor", bidFloor), _ebdrImps$push)); + ebdrReq[bid.bidId] = { + mediaTypes: _mediaTypes, + w: whArr[0], + h: whArr[1] + }; + ebdrParams['latitude'] = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('latitude', bid.params); + ebdrParams['longitude'] = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('longitude', bid.params); + ebdrParams['ifa'] = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('IDFA', bid.params).length > __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('ADID', bid.params).length ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('IDFA', bid.params) : __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('ADID', bid.params); + }); + var ebdrBidReq = { + id: requestId, + imp: ebdrImps, + site: { + domain: domain, + page: page + }, + device: { + geo: { + lat: ebdrParams.latitude, + log: ebdrParams.longitude + }, + ifa: ebdrParams.ifa + } + }; + return { + method: 'GET', + url: 'https://' + rtbServerDomain + '/hb?' + '&zoneid=' + zoneid + '&br=' + encodeURIComponent(JSON.stringify(ebdrBidReq)), + bids: ebdrReq + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Log serverResponse', serverResponse); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Log bidRequest', bidRequest); + var ebdrResponseImps = []; + var ebdrResponseObj = serverResponse.body; + + if (!ebdrResponseObj || !ebdrResponseObj.seatbid || ebdrResponseObj.seatbid.length === 0 || !ebdrResponseObj.seatbid[0].bid || ebdrResponseObj.seatbid[0].bid.length === 0) { + return []; + } + + ebdrResponseObj.seatbid[0].bid.forEach(function (ebdrBid) { + var _response; + + var responseCPM; + responseCPM = parseFloat(ebdrBid.price); + var adm; + var type; + + var _mediaTypes; + + var vastURL; + + if (bidRequest.bids[ebdrBid.id].mediaTypes == __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]) { + adm = decodeURIComponent(ebdrBid.adm); + type = 'ad'; + _mediaTypes = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + } else { + adm = ebdrBid.adm; + type = 'vastXml'; + _mediaTypes = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + + if (ebdrBid.nurl) { + vastURL = ebdrBid.nurl; + } + } + + var response = (_response = { + requestId: ebdrBid.id + }, _defineProperty(_response, type, adm), _defineProperty(_response, "mediaType", _mediaTypes), _defineProperty(_response, "creativeId", ebdrBid.crid), _defineProperty(_response, "cpm", responseCPM), _defineProperty(_response, "width", ebdrBid.w), _defineProperty(_response, "height", ebdrBid.h), _defineProperty(_response, "currency", 'USD'), _defineProperty(_response, "netRevenue", true), _defineProperty(_response, "ttl", 3600), _response); + + if (vastURL) { + response.vastUrl = vastURL; + } + + ebdrResponseImps.push(response); + }); + return ebdrResponseImps; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.pixelEnabled) { + var ebdrResponseObj = serverResponses.body; + + if (!ebdrResponseObj || !ebdrResponseObj.seatbid || ebdrResponseObj.seatbid.length === 0 || !ebdrResponseObj.seatbid[0].bid || ebdrResponseObj.seatbid[0].bid.length === 0) { + return []; + } + + ebdrResponseObj.seatbid[0].bid.forEach(function (ebdrBid) { + if (ebdrBid.iurl && ebdrBid.iurl.length > 0) { + syncs.push({ + type: 'image', + url: ebdrBid.iurl + }); + } + }); + } + + return syncs; + } +}; + +function getWidthAndHeight(bid) { + var adW = null; + var adH = null; // Handing old bidder only has size object + + if (bid.sizes && bid.sizes.length) { + var sizeArrayLength = bid.sizes.length; + + if (sizeArrayLength === 2 && typeof bid.sizes[0] === 'number' && typeof bid.sizes[1] === 'number') { + adW = bid.sizes[0]; + adH = bid.sizes[1]; + } + } + + var _mediaTypes = bid.mediaTypes && bid.mediaTypes.video ? __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] : __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + + if (bid.mediaTypes && bid.mediaTypes[_mediaTypes]) { + if (_mediaTypes == __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */] && bid.mediaTypes[_mediaTypes].sizes && bid.mediaTypes[_mediaTypes].sizes[0] && bid.mediaTypes[_mediaTypes].sizes[0].length === 2) { + adW = bid.mediaTypes[_mediaTypes].sizes[0][0]; + adH = bid.mediaTypes[_mediaTypes].sizes[0][1]; + } else if (_mediaTypes == __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] && bid.mediaTypes[_mediaTypes].playerSize && bid.mediaTypes[_mediaTypes].playerSize.length === 2) { + adW = bid.mediaTypes[_mediaTypes].playerSize[0]; + adH = bid.mediaTypes[_mediaTypes].playerSize[1]; + } + } + + return [adW, adH]; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[386]); \ No newline at end of file diff --git a/build/dist/edgequeryxBidAdapter.js b/build/dist/edgequeryxBidAdapter.js new file mode 100644 index 00000000000..2a96500dee1 --- /dev/null +++ b/build/dist/edgequeryxBidAdapter.js @@ -0,0 +1,119 @@ +pbjsChunk([229],{ + +/***/ 388: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(389); + + +/***/ }), + +/***/ 389: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'edgequeryx'; +var spec = { + code: BIDDER_CODE, + aliases: ['eqx'], + // short code + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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 && bid.params.accountId && bid.params.widgetId); + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests an array of bids + * @param {BidderRequest} bidderRequest bidder request object + * @return {ServerRequest[]} Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + // 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) { + // Common bid request attributes for banner, outstream and instream. + var payload = { + accountId: bid.params.accountId, + widgetId: bid.params.widgetId, + currencyCode: 'EUR', + tagId: bid.adUnitCode, + transactionId: bid.transactionId, + timeout: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('bidderTimeout'), + bidId: bid.bidId, + prebidVersion: "4.2.0" + }; + var bannerMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner'); + payload.sizes = bannerMediaType.sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }); + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: (bid.params.domain !== undefined ? bid.params.domain : 'https://deep.edgequery.io') + '/prebid/x', + data: payloadString + }; + }); + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {*} serverResponse A successful response from the server. + * @param {*} bidRequestString + * @return {Bid[]} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, bidRequestString) { + var bidResponses = []; + var response = serverResponse.body; + + try { + if (response) { + var bidResponse = { + requestId: response.requestId, + cpm: response.cpm, + currency: response.currency, + width: response.width, + height: response.height, + ad: response.ad, + ttl: response.ttl, + creativeId: response.creativeId, + netRevenue: response.netRevenue + }; + bidResponses.push(bidResponse); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error while parsing Edge Query X response', error); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[388]); \ No newline at end of file diff --git a/build/dist/emoteevBidAdapter.js b/build/dist/emoteevBidAdapter.js new file mode 100644 index 00000000000..e180d3236dc --- /dev/null +++ b/build/dist/emoteevBidAdapter.js @@ -0,0 +1,582 @@ +pbjsChunk([228],{ + +/***/ 390: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(391); + + +/***/ }), + +/***/ 391: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BIDDER_CODE", function() { return BIDDER_CODE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ADAPTER_VERSION", function() { return ADAPTER_VERSION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOMAIN", function() { return DOMAIN; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOMAIN_STAGING", function() { return DOMAIN_STAGING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOMAIN_DEVELOPMENT", function() { return DOMAIN_DEVELOPMENT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EVENTS_PATH", function() { return EVENTS_PATH; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BIDDER_PATH", function() { return BIDDER_PATH; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_SYNC_IFRAME_PATH", function() { return USER_SYNC_IFRAME_PATH; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_SYNC_IMAGE_PATH", function() { return USER_SYNC_IMAGE_PATH; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PRODUCTION", function() { return PRODUCTION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STAGING", function() { return STAGING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEVELOPMENT", function() { return DEVELOPMENT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_ENV", function() { return DEFAULT_ENV; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ON_ADAPTER_CALLED", function() { return ON_ADAPTER_CALLED; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ON_BID_WON", function() { return ON_BID_WON; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ON_BIDDER_TIMEOUT", function() { return ON_BIDDER_TIMEOUT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IN_CONTENT", function() { return IN_CONTENT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FOOTER", function() { return FOOTER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OVERLAY", function() { return OVERLAY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WALLPAPER", function() { return WALLPAPER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VENDOR_ID", function() { return VENDOR_ID; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBidRequestValid", function() { return isBidRequestValid; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildRequests", function() { return _buildRequests; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interpretResponse", function() { return interpretResponse; }); +/* harmony export (immutable) */ __webpack_exports__["onAdapterCalled"] = onAdapterCalled; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onBidWon", function() { return _onBidWon; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onTimeout", function() { return _onTimeout; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUserSyncs", function() { return _getUserSyncs; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domain", function() { return domain; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eventsUrl", function() { return eventsUrl; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bidderUrl", function() { return bidderUrl; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "userSyncIframeUrl", function() { return userSyncIframeUrl; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "userSyncImageUrl", function() { return userSyncImageUrl; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateSizes", function() { return validateSizes; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateContext", function() { return validateContext; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateExternalId", function() { return validateExternalId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conformBidRequest", function() { return conformBidRequest; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gdprConsent", function() { return gdprConsent; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "requestsPayload", function() { return requestsPayload; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewDimensions", function() { return getViewDimensions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDeviceDimensions", function() { return getDeviceDimensions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDocumentDimensions", function() { return getDocumentDimensions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGLEnabled", function() { return isWebGLEnabled; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDeviceInfo", function() { return getDeviceInfo; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveEnv", function() { return resolveEnv; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveDebug", function() { return resolveDebug; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +/** + * This file contains Emoteev bid adpater. + * + * It is organised as follows: + * - Constants values; + * - Spec API functions, which should be pristine pure; + * - Ancillary functions, which should be as pure as possible; + * - Adapter API, where unpure side-effects happen. + * + * The code style is « functional core, imperative shell ». + * + * @link https://www.emoteev.io + * @file This files defines the spec of EmoteevBidAdapter. + * @author Emoteev Engineering . + */ + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'emoteev'; +/** + * Version number of the adapter API. + */ + +var ADAPTER_VERSION = '1.35.0'; +var DOMAIN = 'prebid.emoteev.xyz'; +var DOMAIN_STAGING = 'prebid-staging.emoteev.xyz'; +var DOMAIN_DEVELOPMENT = 'localhost:3000'; +/** + * Path of Emoteev endpoint for events. + */ + +var EVENTS_PATH = '/api/ad_event.json'; +/** + * Path of Emoteev bidder. + */ + +var BIDDER_PATH = '/api/prebid/bid'; +var USER_SYNC_IFRAME_PATH = '/api/prebid/sync-iframe'; +var USER_SYNC_IMAGE_PATH = '/api/prebid/sync-image'; +var PRODUCTION = 'production'; +var STAGING = 'staging'; +var DEVELOPMENT = 'development'; +var DEFAULT_ENV = PRODUCTION; +var ON_ADAPTER_CALLED = 'on_adapter_called'; +var ON_BID_WON = 'on_bid_won'; +var ON_BIDDER_TIMEOUT = 'on_bidder_timeout'; +var IN_CONTENT = 'content'; +var FOOTER = 'footer'; +var OVERLAY = 'overlay'; +var WALLPAPER = 'wallpaper'; +/** + * Vendor ID assigned to Emoteev from the Global Vendor & CMP List. + * + * See https://vendorlist.consensu.org/vendorinfo.json for more information. + * @type {number} + */ + +var VENDOR_ID = 15; +/** + * Pure function. See http://prebid.org/dev-docs/bidder-adaptor.html#valid-build-requests-array for detailed semantic. + * + * @param {AdUnit.bidRequest} bidRequest + * @returns {boolean} Is this bidRequest valid? + */ + +var isBidRequestValid = function isBidRequestValid(bidRequest) { + return !!(bidRequest && bidRequest.params && Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'params.adSpaceId') && validateContext(Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'params.context')) && validateExternalId(Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'params.externalId')) && bidRequest.bidder === BIDDER_CODE && validateSizes(Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'mediaTypes.banner.sizes'))); +}; +/** + * Pure function. See http://prebid.org/dev-docs/bidder-adaptor.html#serverrequest-objects for detailed semantic. + * + * @param {string} env Emoteev environment parameter + * @param {boolean} debug Pbjs debug parameter. + * @param {string} currency See http://prebid.org/dev-docs/modules/currency.html for detailed semantic. + * @param {Array} validBidRequests Takes an array of bid requests, which are guaranteed to have passed the isBidRequestValid() test. + * @param bidderRequest General context for a bidder request being constructed + * @returns {ServerRequest} + */ + +var _buildRequests = function buildRequests(env, debug, currency, validBidRequests, bidderRequest) { + return { + method: 'POST', + url: bidderUrl(env), + data: JSON.stringify(requestsPayload(debug, currency, validBidRequests, bidderRequest)) // Keys with undefined values will be filtered out. + + }; +}; +/** + * Pure function. See http://prebid.org/dev-docs/bidder-adaptor.html#interpreting-the-response for detailed semantic. + * + * @param {Array} serverResponse.body The body of the server response is an array of bid objects. + * @returns {Array} + */ + + + +var interpretResponse = function interpretResponse(serverResponse) { + return serverResponse.body; +}; +/** + * Pure function. See http://prebid.org/dev-docs/bidder-adaptor.html#registering-on-set-targeting for detailed semantic. + * + * @param {string} env Emoteev environment parameter. + * @param {BidRequest} bidRequest + * @returns {UrlObject} + */ + +function onAdapterCalled(env, bidRequest) { + return { + protocol: 'https', + hostname: domain(env), + pathname: EVENTS_PATH, + search: { + eventName: ON_ADAPTER_CALLED, + pubcId: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'crumbs.pubcid'), + bidId: bidRequest.bidId, + adSpaceId: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'params.adSpaceId'), + cache_buster: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getUniqueIdentifierStr"])() + } + }; +} +/** + * Pure function. See http://prebid.org/dev-docs/bidder-adaptor.html#registering-on-bid-won for detailed semantic. + * + * @param {string} env Emoteev environment parameter. + * @param {string} pubcId Publisher common id. See http://prebid.org/dev-docs/modules/pubCommonId.html for detailed semantic. + * @param bidObject + * @returns {UrlObject} + */ + +var _onBidWon = function onBidWon(env, pubcId, bidObject) { + var bidId = bidObject.requestId; + return { + protocol: 'https', + hostname: domain(env), + pathname: EVENTS_PATH, + search: { + eventName: ON_BID_WON, + pubcId: pubcId, + bidId: bidId, + cache_buster: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getUniqueIdentifierStr"])() + } + }; +}; +/** + * Pure function. See http://prebid.org/dev-docs/bidder-adaptor.html#registering-on-timeout for detailed semantic. + * + * @param {string} env Emoteev environment parameter. + * @param {BidRequest} bidRequest + * @returns {UrlObject} + */ + + + + +var _onTimeout = function onTimeout(env, bidRequest) { + return { + protocol: 'https', + hostname: domain(env), + pathname: EVENTS_PATH, + search: { + eventName: ON_BIDDER_TIMEOUT, + pubcId: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'crumbs.pubcid'), + bidId: bidRequest.bidId, + adSpaceId: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidRequest, 'params.adSpaceId'), + timeout: bidRequest.timeout, + cache_buster: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getUniqueIdentifierStr"])() + } + }; +}; +/** + * Pure function. See http://prebid.org/dev-docs/bidder-adaptor.html#registering-user-syncs for detailed semantic. + * + * @param {string} env Emoteev environment parameter + * @param {SyncOptions} syncOptions + * @returns userSyncs + */ + + + + +var _getUserSyncs = function getUserSyncs(env, syncOptions) { + var syncs = []; + + if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: userSyncImageUrl(env) + }); + } + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: userSyncIframeUrl(env) + }); + } + + return syncs; +}; +/** + * Pure function. + * + * @param {string} env Emoteev environment parameter + * @returns {string} The domain for network calls to Emoteev. + */ + + + +var domain = function domain(env) { + switch (env) { + case DEVELOPMENT: + return DOMAIN_DEVELOPMENT; + + case STAGING: + return DOMAIN_STAGING; + + default: + return DOMAIN; + } +}; +/** + * Pure function. + * + * @param {string} env Emoteev environment parameter + * @returns {string} The full URL which events is sent to. + */ + +var eventsUrl = function eventsUrl(env) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])({ + protocol: env === DEVELOPMENT ? 'http' : 'https', + hostname: domain(env), + pathname: EVENTS_PATH + }); +}; +/** + * Pure function. + * + * @param {string} env Emoteev environment parameter + * @returns {string} The full URL which bidderRequest is sent to. + */ + +var bidderUrl = function bidderUrl(env) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])({ + protocol: env === DEVELOPMENT ? 'http' : 'https', + hostname: domain(env), + pathname: BIDDER_PATH + }); +}; +/** + * Pure function. + * + * @param {string} env Emoteev environment parameter + * @returns {string} The full URL called for iframe-based user sync + */ + +var userSyncIframeUrl = function userSyncIframeUrl(env) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])({ + protocol: env === DEVELOPMENT ? 'http' : 'https', + hostname: domain(env), + pathname: USER_SYNC_IFRAME_PATH + }); +}; +/** + * Pure function. + * + * @param {string} env Emoteev environment parameter + * @returns {string} The full URL called for image-based user sync + */ + +var userSyncImageUrl = function userSyncImageUrl(env) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])({ + protocol: env === DEVELOPMENT ? 'http' : 'https', + hostname: domain(env), + pathname: USER_SYNC_IMAGE_PATH + }); +}; +/** + * Pure function. + * + * @param {Array>} sizes + * @returns {boolean} are sizes valid? + */ + +var validateSizes = function validateSizes(sizes) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"])(sizes) && sizes.length > 0 && sizes.every(function (size) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"])(size) && size.length === 2; + }); +}; +/** + * Pure function. + * + * @param {string} context + * @returns {boolean} is param `context` valid? + */ + +var validateContext = function validateContext(context) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["contains"])([IN_CONTENT, FOOTER, OVERLAY, WALLPAPER], context); +}; +/** + * Pure function. + * + * @param {(number|null|undefined)} externalId + * @returns {boolean} is param `externalId` valid? + */ + +var validateExternalId = function validateExternalId(externalId) { + return externalId === undefined || externalId === null || Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isInteger"])(externalId) && externalId > 0; +}; +/** + * Pure function. + * + * @param {BidRequest} bidRequest + * @returns {object} An object which represents a BidRequest for Emoteev server side. + */ + +var conformBidRequest = function conformBidRequest(bidRequest) { + return { + params: bidRequest.params, + crumbs: bidRequest.crumbs, + sizes: bidRequest.sizes, + bidId: bidRequest.bidId, + bidderRequestId: bidRequest.bidderRequestId + }; +}; +/** + * Pure function. + * + * @param {object} bidderRequest + * @returns {(boolean|undefined)} raw consent data. + */ + +var gdprConsent = function gdprConsent(bidderRequest) { + return (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidderRequest, 'gdprConsent.vendorData.vendorConsents') || {})[VENDOR_ID]; +}; +/** + * Pure function. + * + * @param {boolean} debug Pbjs debug parameter + * @param {string} currency See http://prebid.org/dev-docs/modules/currency.html for detailed information + * @param {BidRequest} validBidRequests + * @param {object} bidderRequest + * @returns + */ + +var requestsPayload = function requestsPayload(debug, currency, validBidRequests, bidderRequest) { + return { + akPbjsVersion: ADAPTER_VERSION, + bidRequests: validBidRequests.map(conformBidRequest), + currency: currency, + debug: debug, + language: navigator.language, + refererInfo: bidderRequest.refererInfo, + deviceInfo: getDeviceInfo(getDeviceDimensions(window), getViewDimensions(window, document), getDocumentDimensions(document), isWebGLEnabled(document)), + userAgent: navigator.userAgent, + gdprApplies: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(bidderRequest, 'gdprConsent.gdprApplies'), + gdprConsent: gdprConsent(bidderRequest) + }; +}; +/** + * Pure function + * @param {Window} window + * @param {Document} document + * @returns {{width: number, height: number}} View dimensions + */ + +var getViewDimensions = function getViewDimensions(window, document) { + var w = window; + var prefix = 'inner'; + + if (window.innerWidth === undefined || window.innerWidth === null) { + w = document.documentElement || document.body; + prefix = 'client'; + } + + return { + width: w["".concat(prefix, "Width")], + height: w["".concat(prefix, "Height")] + }; +}; +/** + * Pure function + * @param {Window} window + * @returns {{width: number, height: number}} Device dimensions + */ + +var getDeviceDimensions = function getDeviceDimensions(window) { + return { + width: window.screen ? window.screen.width : '', + height: window.screen ? window.screen.height : '' + }; +}; +/** + * Pure function + * @param {Document} document + * @returns {{width: number, height: number}} Document dimensions + */ + +var getDocumentDimensions = function getDocumentDimensions(document) { + var de = document.documentElement; + var be = document.body; + var bodyHeight = be ? Math.max(be.offsetHeight, be.scrollHeight) : 0; + var w = Math.max(de.clientWidth, de.offsetWidth, de.scrollWidth); + var h = Math.max(de.clientHeight, de.offsetHeight, de.scrollHeight, bodyHeight); + return { + width: isNaN(w) ? '' : w, + height: isNaN(h) ? '' : h + }; +}; +/** + * Unpure function + * @param {Document} document + * @returns {boolean} Is WebGL enabled? + */ + +var isWebGLEnabled = function isWebGLEnabled(document) { + // Create test canvas + var canvas = document.createElement('canvas'); // The gl context + + var gl = null; // Try to get the regular WebGL + + try { + gl = canvas.getContext('webgl'); + } catch (ex) { + canvas = undefined; + return false; + } // No regular WebGL found + + + if (!gl) { + // Try experimental WebGL + try { + gl = canvas.getContext('experimental-webgl'); + } catch (ex) { + canvas = undefined; + return false; + } + } + + return !!gl; +}; +/** + * Pure function + * @param {{width: number, height: number}} deviceDimensions + * @param {{width: number, height: number}} viewDimensions + * @param {{width: number, height: number}} documentDimensions + * @param {boolean} webGL + * @returns {object} Device information + */ + +var getDeviceInfo = function getDeviceInfo(deviceDimensions, viewDimensions, documentDimensions, webGL) { + return { + browserWidth: viewDimensions.width, + browserHeight: viewDimensions.height, + deviceWidth: deviceDimensions.width, + deviceHeight: deviceDimensions.height, + documentWidth: documentDimensions.width, + documentHeight: documentDimensions.height, + webGL: webGL + }; +}; +/** + * Pure function + * @param {object} config pbjs config value + * @param {string} parameter Environment override from URL query param. + * @returns {string} One of [PRODUCTION, STAGING, DEVELOPMENT]. + */ + +var resolveEnv = function resolveEnv(config, parameter) { + var configEnv = Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"])(config, 'emoteev.env'); + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["contains"])([PRODUCTION, STAGING, DEVELOPMENT], parameter)) return parameter;else if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["contains"])([PRODUCTION, STAGING, DEVELOPMENT], configEnv)) return configEnv;else return DEFAULT_ENV; +}; +/** + * Pure function + * @param {object} config pbjs config value + * @param {string} parameter Debug override from URL query param. + * @returns {boolean} + */ + +var resolveDebug = function resolveDebug(config, parameter) { + if (parameter && parameter.length && parameter.length > 0) return JSON.parse(parameter);else if (config.debug) return config.debug;else return false; +}; +/** + * EmoteevBidAdapter spec + * @access public + * @type {BidderSpec} + */ + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return _buildRequests(resolveEnv(__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(), Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getParameterByName"])('emoteevEnv')), resolveDebug(__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(), Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getParameterByName"])('debug')), __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency'), validBidRequests, bidderRequest); + }, + interpretResponse: interpretResponse, + onBidWon: function onBidWon(bidObject) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["triggerPixel"])(Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])(_onBidWon(resolveEnv(__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(), Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getParameterByName"])('emoteevEnv')), storage.getCookie('_pubcid'), bidObject))); + }, + onTimeout: function onTimeout(bidRequest) { + return Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["triggerPixel"])(Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["buildUrl"])(_onTimeout(resolveEnv(__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(), Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getParameterByName"])('emoteevEnv')), bidRequest))); + }, + getUserSyncs: function getUserSyncs(syncOptions) { + return _getUserSyncs(resolveEnv(__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(), Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getParameterByName"])('emoteevEnv')), syncOptions); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[390]); \ No newline at end of file diff --git a/build/dist/emx_digitalBidAdapter.js b/build/dist/emx_digitalBidAdapter.js new file mode 100644 index 00000000000..7ed1a874dc1 --- /dev/null +++ b/build/dist/emx_digitalBidAdapter.js @@ -0,0 +1,354 @@ +pbjsChunk([227],{ + +/***/ 392: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(393); + + +/***/ }), + +/***/ 393: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "emxAdapter", function() { return emxAdapter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + +var BIDDER_CODE = 'emx_digital'; +var ENDPOINT = 'hb.emxdgt.com'; +var RENDERER_URL = 'https://js.brealtime.com/outstream/1.30.0/bundle.js'; +var ADAPTER_VERSION = '1.5.1'; +var DEFAULT_CUR = 'USD'; +var emxAdapter = { + validateSizes: function validateSizes(sizes) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes) || typeof sizes[0] === 'undefined') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Sizes should be an array'); + return false; + } + + return sizes.every(function (size) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size) && size.length === 2; + }); + }, + checkVideoContext: function checkVideoContext(bid) { + return bid && bid.mediaTypes && bid.mediaTypes.video && bid.mediaTypes.video.context && (bid.mediaTypes.video.context === 'instream' || bid.mediaTypes.video.context === 'outstream'); + }, + buildBanner: function buildBanner(bid) { + var sizes = []; + bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes ? sizes = bid.mediaTypes.banner.sizes : sizes = bid.sizes; + + if (!emxAdapter.validateSizes(sizes)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': could not detect mediaType banner sizes. Assigning to bid sizes instead'); + sizes = bid.sizes; + } + + return { + format: sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }), + w: sizes[0][0], + h: sizes[0][1] + }; + }, + formatVideoResponse: function formatVideoResponse(bidResponse, emxBid, bidRequest) { + bidResponse.vastXml = emxBid.adm; + + if (bidRequest.bidderRequest && bidRequest.bidderRequest.bids && bidRequest.bidderRequest.bids.length > 0) { + var matchingBid = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(bidRequest.bidderRequest.bids, function (bid) { + return bidResponse.requestId && bid.bidId && bidResponse.requestId === bid.bidId && bid.mediaTypes && bid.mediaTypes.video && bid.mediaTypes.video.context === 'outstream'; + }); + + if (matchingBid) { + bidResponse.renderer = emxAdapter.createRenderer(bidResponse, { + id: emxBid.id, + url: RENDERER_URL + }); + } + } + + return bidResponse; + }, + isMobile: function isMobile() { + return /(ios|ipod|ipad|iphone|android)/i.test(navigator.userAgent); + }, + isConnectedTV: function isConnectedTV() { + return /(smart[-]?tv|hbbtv|appletv|googletv|hdmi|netcast\.tv|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b)/i.test(navigator.userAgent); + }, + getDevice: function getDevice() { + return { + ua: navigator.userAgent, + js: 1, + dnt: navigator.doNotTrack === 'yes' || navigator.doNotTrack === '1' || navigator.msDoNotTrack === '1' ? 1 : 0, + h: screen.height, + w: screen.width, + devicetype: emxAdapter.isMobile() ? 1 : emxAdapter.isConnectedTV() ? 3 : 2, + language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage + }; + }, + cleanProtocols: function cleanProtocols(video) { + if (video.protocols && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(video.protocols, 7)) { + // not supporting VAST protocol 7 (VAST 4.0); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': VAST 4.0 is currently not supported. This protocol has been filtered out of the request.'); + video.protocols = video.protocols.filter(function (protocol) { + return protocol !== 7; + }); + } + + return video; + }, + outstreamRender: function outstreamRender(bid) { + bid.renderer.push(function () { + var params = bid && bid.params && bid.params[0] && bid.params[0].video ? bid.params[0].video : {}; + window.emxVideoQueue = window.emxVideoQueue || []; + window.queueEmxVideo({ + id: bid.adUnitCode, + adsResponses: bid.vastXml, + options: params + }); + + if (window.emxVideoReady && window.videojs) { + window.emxVideoReady(); + } + }); + }, + createRenderer: function createRenderer(bid, rendererParams) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: rendererParams.id, + url: RENDERER_URL, + loaded: false + }); + + try { + renderer.setRender(emxAdapter.outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; + }, + buildVideo: function buildVideo(bid) { + var videoObj = _extends(bid.mediaTypes.video, bid.params.video); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.mediaTypes.video.playerSize[0])) { + videoObj['w'] = bid.mediaTypes.video.playerSize[0][0]; + videoObj['h'] = bid.mediaTypes.video.playerSize[0][1]; + } else { + videoObj['w'] = bid.mediaTypes.video.playerSize[0]; + videoObj['h'] = bid.mediaTypes.video.playerSize[1]; + } + + return emxAdapter.cleanProtocols(videoObj); + }, + parseResponse: function parseResponse(bidResponseAdm) { + try { + return decodeURIComponent(bidResponseAdm.replace(/%(?![0-9][0-9a-fA-F]+)/g, '%25')); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('emx_digitalBidAdapter', 'error', err); + } + }, + getReferrer: function getReferrer() { + try { + return window.top.document.referrer; + } catch (err) { + return document.referrer; + } + }, + getSite: function getSite(refInfo) { + var url = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](refInfo.referer); + return { + domain: url.hostname, + page: refInfo.referer, + ref: emxAdapter.getReferrer() + }; + }, + getGdpr: function getGdpr(bidRequests, emxData) { + if (bidRequests.gdprConsent) { + emxData.regs = { + ext: { + gdpr: bidRequests.gdprConsent.gdprApplies === true ? 1 : 0 + } + }; + } + + if (bidRequests.gdprConsent && bidRequests.gdprConsent.gdprApplies) { + emxData.user = { + ext: { + consent: bidRequests.gdprConsent.consentString + } + }; + } + + return emxData; + } +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (!bid || !bid.params) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Missing bid or bid params.'); + return false; + } + + if (bid.bidder !== BIDDER_CODE) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Must use "emx_digital" as bidder code.'); + return false; + } + + if (!bid.params.tagid || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.tagid)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Missing tagid param or tagid present and not type String.'); + return false; + } + + if (bid.mediaTypes && bid.mediaTypes.banner) { + var sizes; + bid.mediaTypes.banner.sizes ? sizes = bid.mediaTypes.banner.sizes : sizes = bid.sizes; + + if (!emxAdapter.validateSizes(sizes)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Missing sizes in bid'); + return false; + } + } else if (bid.mediaTypes && bid.mediaTypes.video) { + if (!emxAdapter.checkVideoContext(bid)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Missing video context: instream or outstream'); + return false; + } + + if (!bid.mediaTypes.video.playerSize) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](BIDDER_CODE + ': Missing video playerSize'); + return false; + } + } + + return true; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var emxImps = []; + var timeout = bidderRequest.timeout || ''; + var timestamp = Date.now(); + var url = 'https://' + ENDPOINT + ('?t=' + timeout + '&ts=' + timestamp + '&src=pbjs'); + var secure = location.protocol.indexOf('https') > -1 ? 1 : 0; + var device = emxAdapter.getDevice(); + var site = emxAdapter.getSite(bidderRequest.refererInfo); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + var tagid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('tagid', bid.params); + var bidfloor = parseFloat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidfloor', bid.params)) || 0; + var isVideo = !!bid.mediaTypes.video; + var data = { + id: bid.bidId, + tid: bid.transactionId, + tagid: tagid, + secure: secure + }; + var typeSpecifics = isVideo ? { + video: emxAdapter.buildVideo(bid) + } : { + banner: emxAdapter.buildBanner(bid) + }; + var bidfloorObj = bidfloor > 0 ? { + bidfloor: bidfloor, + bidfloorcur: DEFAULT_CUR + } : {}; + + var emxBid = _extends(data, typeSpecifics, bidfloorObj); + + emxImps.push(emxBid); + }); + + var emxData = { + id: bidderRequest.auctionId, + imp: emxImps, + device: device, + site: site, + cur: DEFAULT_CUR, + version: ADAPTER_VERSION + }; + emxData = emxAdapter.getGdpr(bidderRequest, _extends({}, emxData)); + + if (bidderRequest && bidderRequest.uspConsent) { + emxData.us_privacy = bidderRequest.uspConsent; + } + + return { + method: 'POST', + url: url, + data: JSON.stringify(emxData), + options: { + withCredentials: true + }, + bidderRequest: bidderRequest + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var emxBidResponses = []; + var response = serverResponse.body || {}; + + if (response.seatbid && response.seatbid.length > 0 && response.seatbid[0].bid) { + response.seatbid.forEach(function (emxBid) { + emxBid = emxBid.bid[0]; + var isVideo = false; + var adm = emxAdapter.parseResponse(emxBid.adm) || ''; + var bidResponse = { + requestId: emxBid.id, + cpm: emxBid.price, + width: emxBid.w, + height: emxBid.h, + creativeId: emxBid.crid || emxBid.id, + dealId: emxBid.dealid || null, + currency: 'USD', + netRevenue: true, + ttl: emxBid.ttl, + ad: adm + }; + + if (emxBid.adm && emxBid.adm.indexOf(' -1) { + isVideo = true; + bidResponse = emxAdapter.formatVideoResponse(bidResponse, _extends({}, emxBid), bidRequest); + } + + bidResponse.mediaType = isVideo ? __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] : __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + emxBidResponses.push(bidResponse); + }); + } + + return emxBidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: 'https://biddr.brealtime.com/check.html' + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[392]); \ No newline at end of file diff --git a/build/dist/envivoBidAdapter.js b/build/dist/envivoBidAdapter.js new file mode 100644 index 00000000000..b069a129d6c --- /dev/null +++ b/build/dist/envivoBidAdapter.js @@ -0,0 +1,160 @@ +pbjsChunk([226],{ + +/***/ 394: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(395); + + +/***/ }), + +/***/ 395: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_Renderer_js__ = __webpack_require__(11); + + + + + + +var SUPPORTED_AD_TYPES = [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]]; +var BIDDER_CODE = 'envivo'; +var DOMAIN = 'https://ad.nvivo.tv/'; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; + +function isBidRequestValid(bid) { + return typeof bid.params !== 'undefined' && parseInt(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getValue"](bid.params, 'publisherId')) > 0; +} + +function buildRequests(validBidRequests) { + return { + method: 'POST', + url: DOMAIN + 'ads/www/admin/plugins/Prebid/getAd.php', + options: { + withCredentials: false, + crossOrigin: true + }, + data: validBidRequests + }; +} + +function interpretResponse(serverResponse, request) { + var response = serverResponse.body; + var bidResponses = []; + var bidRequestResponses = []; + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_each"](response, function (bidAd) { + bidAd.adResponse = { + content: bidAd.vastXml, + height: bidAd.height, + width: bidAd.width + }; + bidAd.ttl = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'); + bidAd.renderer = bidAd.context === 'outstream' ? createRenderer(bidAd, { + id: bidAd.adUnitCode, + url: RENDERER_URL + }, bidAd.adUnitCode) : undefined; + bidResponses.push(bidAd); + }); + + bidRequestResponses.push({ + function: 'saveResponses', + request: request, + response: bidResponses + }); + sendResponseToServer(bidRequestResponses); + return bidResponses; +} + +function outstreamRender(bidAd) { + bidAd.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + sizes: [bidAd.width, bidAd.height], + width: bidAd.width, + height: bidAd.height, + targetId: bidAd.adUnitCode, + adResponse: bidAd.adResponse, + rendererOptions: { + showVolume: false, + allowFullscreen: false + } + }); + }); +} + +function createRenderer(bidAd, rendererParams, adUnitCode) { + var renderer = __WEBPACK_IMPORTED_MODULE_5__src_Renderer_js__["a" /* Renderer */].install({ + id: rendererParams.id, + url: rendererParams.url, + loaded: false, + config: { + 'player_height': bidAd.height, + 'player_width': bidAd.width + }, + adUnitCode: adUnitCode + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function onBidWon(bid) { + var wonBids = []; + wonBids.push(bid); + wonBids[0].function = 'onBidWon'; + sendResponseToServer(wonBids); +} + +function onTimeout(details) { + details.unshift({ + 'function': 'onTimeout' + }); + sendResponseToServer(details); +} + +function sendResponseToServer(data) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])(DOMAIN + 'ads/www/admin/plugins/Prebid/tracking/track.php', null, JSON.stringify(data), { + withCredentials: false, + method: 'POST', + crossOrigin: true + }); +} + +function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: DOMAIN + 'ads/www/admin/plugins/Prebid/userSync.php' + }]; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: SUPPORTED_AD_TYPES, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs, + onBidWon: onBidWon, + onTimeout: onTimeout +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[394]); \ No newline at end of file diff --git a/build/dist/eplanningAnalyticsAdapter.js b/build/dist/eplanningAnalyticsAdapter.js new file mode 100644 index 00000000000..b55f8fe188b --- /dev/null +++ b/build/dist/eplanningAnalyticsAdapter.js @@ -0,0 +1,418 @@ +pbjsChunk([36],{ + +/***/ 396: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(397); + + +/***/ }), + +/***/ 397: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var CONSTANTS = __webpack_require__(5); + +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(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* 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); + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(eplAnalyticsAdapter.context.host + eplAnalyticsAdapter.context.ci + '?d=' + encodeURIComponent(strjson)); + } catch (err) {} + } + } +}); + +eplAnalyticsAdapter.originEnableAnalytics = eplAnalyticsAdapter.enableAnalytics; + +eplAnalyticsAdapter.enableAnalytics = function (config) { + if (!config.options.ci) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["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); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: eplAnalyticsAdapter, + code: 'eplanning' +}); +/* harmony default export */ __webpack_exports__["default"] = (eplAnalyticsAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[396]); \ No newline at end of file diff --git a/build/dist/eplanningBidAdapter.js b/build/dist/eplanningBidAdapter.js new file mode 100644 index 00000000000..6ec2f57bf18 --- /dev/null +++ b/build/dist/eplanningBidAdapter.js @@ -0,0 +1,471 @@ +pbjsChunk([225],{ + +/***/ 398: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(399); + + +/***/ }), + +/***/ 399: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__["b" /* getStorageManager */])(); +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', 'ml']; +var DOLLARS = 'USD'; +var NET_REVENUE = true; +var TTL = 120; +var NULL_SIZE = '1x1'; +var FILE = 'file'; +var STORAGE_RENDER_PREFIX = 'pbsr_'; +var STORAGE_VIEW_PREFIX = 'pbvi_'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return Boolean(bid.params.ci) || Boolean(bid.params.t); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var method = 'GET'; + var dfpClientId = '1'; + var sec = 'ROS'; + var url; + var params; + var urlConfig = getUrlConfig(bidRequests); + var pcrs = getCharset(); + var spaces = getSpaces(bidRequests, urlConfig.ml); + var pageUrl = bidderRequest.refererInfo.referer; + + var getDomain = function getDomain(url) { + var anchor = document.createElement('a'); + anchor.href = url; + return anchor.hostname; + }; + + if (urlConfig.t) { + url = 'https://' + urlConfig.isv + '/layers/t_pbjs_2.json'; + params = {}; + } else { + url = 'https://' + (urlConfig.sv || DEFAULT_SV) + '/hb/1/' + urlConfig.ci + '/' + dfpClientId + '/' + getDomain(pageUrl) + '/' + sec; + var referrerUrl = bidderRequest.refererInfo.referer.reachedTop ? window.top.document.referrer : bidderRequest.refererInfo.referer; + + if (storage.hasLocalStorage()) { + registerViewabilityAllBids(bidRequests); + } + + params = { + rnd: rnd, + e: spaces.str, + ur: pageUrl || FILE, + r: 'pbjs', + pbv: "4.2.0", + ncb: '1', + vs: spaces.vs + }; + + if (pcrs) { + params.crs = pcrs; + } + + if (referrerUrl) { + params.fr = referrerUrl; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + if (typeof bidderRequest.gdprConsent.gdprApplies !== 'undefined') { + params.gdpr = bidderRequest.gdprConsent.gdprApplies ? '1' : '0'; + + if (typeof bidderRequest.gdprConsent.consentString !== 'undefined') { + params.gdprcs = bidderRequest.gdprConsent.consentString; + } + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + params.ccpa = bidderRequest.uspConsent; + } + } + + return { + method: method, + url: url, + data: params, + adUnitToBidId: spaces.map + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var response = serverResponse.body; + var bidResponses = []; + + if (response && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](response.sp)) { + response.sp.forEach(function (space) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 = !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](serverResponses) && serverResponses[0].body; + + if (response && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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) === 'object' && sync.ifr && syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: sync.u + }); + } + }); + } + + return syncs; + } +}; + +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]; + } + }); + }); + return config; +} + +function isTestRequest(bidRequests) { + for (var i = 0; i < bidRequests.length; i++) { + if (bidRequests[i].params.t) { + return true; + } + } + + return false; +} + +function getTestConfig(bidRequests) { + var isv; + bidRequests.forEach(function (br) { + return isv = isv || br.params.isv; + }); + return { + t: true, + isv: isv || DEFAULT_ISV + }; +} + +function getSize(bid, first) { + return bid.sizes && bid.sizes.length ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](first ? bid.sizes[0] : bid.sizes).join(',') : NULL_SIZE; +} + +function getSpacesStruct(bids) { + var e = {}; + bids.forEach(function (bid) { + var size = getSize(bid, true); + e[size] = e[size] ? e[size] : []; + e[size].push(bid); + }); + return e; +} + +function cleanName(name) { + return name.replace(/_|\.|-|\//g, '').replace(/\)\(|\(|\)|:/g, '_').replace(/^_+|_+$/g, ''); +} + +function getSpaces(bidRequests, ml) { + var spacesStruct = getSpacesStruct(bidRequests); + var es = { + str: '', + vs: '', + map: {} + }; + es.str = Object.keys(spacesStruct).map(function (size) { + return spacesStruct[size].map(function (bid, i) { + es.vs += getVs(bid); + var name = ml ? cleanName(bid.adUnitCode) : getSize(bid, true) + '_' + i; + es.map[name] = bid.bidId; + return name + ':' + getSize(bid); + }).join('+'); + }).join('+'); + return es; +} + +function getVs(bid) { + var s; + var vs = ''; + + if (storage.hasLocalStorage()) { + s = getViewabilityData(bid); + vs += s.render >= 4 ? s.ratio.toString(16) : 'F'; + } else { + vs += 'F'; + } + + return vs; +} + +function getViewabilityData(bid) { + var r = storage.getDataFromLocalStorage(STORAGE_RENDER_PREFIX + bid.adUnitCode) || 0; + var v = storage.getDataFromLocalStorage(STORAGE_VIEW_PREFIX + bid.adUnitCode) || 0; + var ratio = r > 0 ? v / r : 0; + return { + render: r, + ratio: window.parseInt(ratio * 10, 10) + }; +} + +function getCharset() { + try { + return window.top.document.charset || window.top.document.characterSet; + } catch (e) { + return document.charset || document.characterSet; + } +} + +function waitForElementsPresent(elements) { + var observer = new MutationObserver(function (mutationList, observer) { + if (mutationList && Array.isArray(mutationList)) { + mutationList.forEach(function (mr) { + if (mr && mr.addedNodes && Array.isArray(mr.addedNodes)) { + mr.addedNodes.forEach(function (ad) { + var index = elements.indexOf(ad.id); + + if (index >= 0) { + registerViewability(ad); + elements.splice(index, 1); + + if (!elements.length) { + observer.disconnect(); + } + } + }); + } + }); + } + }); + document.addEventListener('DOMContentLoaded', function (event) { + var config = { + childList: true, + subtree: true, + characterData: true + }; + observer.observe(document.body, config); + }); +} + +function registerViewability(div) { + visibilityHandler({ + name: div.id, + div: div + }); +} + +function registerViewabilityAllBids(bids) { + var elementsNotPresent = []; + bids.forEach(function (bid) { + var div = document.getElementById(bid.adUnitCode); + + if (div) { + registerViewability(div); + } else { + elementsNotPresent.push(bid.adUnitCode); + } + }); + + if (elementsNotPresent.length) { + waitForElementsPresent(elementsNotPresent); + } +} + +function getViewabilityTracker() { + var TIME_PARTITIONS = 5; + var VIEWABILITY_TIME = 1000; + var VIEWABILITY_MIN_RATIO = 0.5; + var publicApi; + var context; + + function segmentIsOutsideTheVisibleRange(visibleRangeEnd, p1, p2) { + return p1 > visibleRangeEnd || p2 < 0; + } + + function segmentBeginsBeforeTheVisibleRange(p1) { + return p1 < 0; + } + + function segmentEndsAfterTheVisibleRange(visibleRangeEnd, p2) { + return p2 < visibleRangeEnd; + } + + function axialVisibilityRatio(visibleRangeEnd, p1, p2) { + var visibilityRatio = 0; + + if (!segmentIsOutsideTheVisibleRange(visibleRangeEnd, p1, p2)) { + if (segmentBeginsBeforeTheVisibleRange(p1)) { + visibilityRatio = p2 / (p2 - p1); + } else { + visibilityRatio = segmentEndsAfterTheVisibleRange(visibleRangeEnd, p2) ? 1 : (visibleRangeEnd - p1) / (p2 - p1); + } + } + + return visibilityRatio; + } + + function isNotHiddenByNonFriendlyIframe() { + try { + return window === window.top || window.frameElement; + } catch (e) {} + } + + function defineContext(e) { + try { + context = e && window.document.body.contains(e) ? window : window.top.document.body.contains(e) ? top : undefined; + } catch (err) {} + + return context; + } + + function getContext(e) { + return context; + } + + function verticalVisibilityRatio(position) { + return axialVisibilityRatio(getContext().innerHeight, position.top, position.bottom); + } + + function horizontalVisibilityRatio(position) { + return axialVisibilityRatio(getContext().innerWidth, position.left, position.right); + } + + function itIsNotHiddenByBannerAreaPosition(e) { + var position = e.getBoundingClientRect(); + return verticalVisibilityRatio(position) * horizontalVisibilityRatio(position) > VIEWABILITY_MIN_RATIO; + } + + function itIsNotHiddenByDisplayStyleCascade(e) { + return e.offsetHeight > 0 && e.offsetWidth > 0; + } + + function itIsNotHiddenByOpacityStyleCascade(e) { + var s = e.style; + var p = e.parentNode; + return !(s && parseFloat(s.opacity) === 0) && (!p || itIsNotHiddenByOpacityStyleCascade(p)); + } + + function itIsNotHiddenByVisibilityStyleCascade(e) { + return getContext().getComputedStyle(e).visibility !== 'hidden'; + } + + function itIsNotHiddenByTabFocus() { + try { + return getContext().top.document.hasFocus(); + } catch (e) {} + } + + function isDefined(e) { + return e !== null && typeof e !== 'undefined'; + } + + function itIsNotHiddenByOrphanBranch() { + return isDefined(getContext()); + } + + function isContextInAnIframe() { + return isDefined(getContext().frameElement); + } + + function processIntervalVisibilityStatus(elapsedVisibleIntervals, element, callback) { + var visibleIntervals = isVisible(element) ? elapsedVisibleIntervals + 1 : 0; + + if (visibleIntervals === TIME_PARTITIONS) { + callback(); + } else { + setTimeout(processIntervalVisibilityStatus.bind(this, visibleIntervals, element, callback), VIEWABILITY_TIME / TIME_PARTITIONS); + } + } + + function isVisible(element) { + defineContext(element); + return isNotHiddenByNonFriendlyIframe() && itIsNotHiddenByOrphanBranch() && itIsNotHiddenByTabFocus() && itIsNotHiddenByDisplayStyleCascade(element) && itIsNotHiddenByVisibilityStyleCascade(element) && itIsNotHiddenByOpacityStyleCascade(element) && itIsNotHiddenByBannerAreaPosition(element) && (!isContextInAnIframe() || isVisible(getContext().frameElement)); + } + + publicApi = { + isVisible: isVisible, + onView: processIntervalVisibilityStatus.bind(this, 0) + }; + return publicApi; +} + +; + +function visibilityHandler(obj) { + if (obj.div) { + registerAuction(STORAGE_RENDER_PREFIX + obj.name); + getViewabilityTracker().onView(obj.div, registerAuction.bind(undefined, STORAGE_VIEW_PREFIX + obj.name)); + } +} + +function registerAuction(storageID) { + var value; + + try { + value = storage.getDataFromLocalStorage(storageID); + value = value ? window.parseInt(value, 10) + 1 : 1; + storage.setDataInLocalStorage(storageID, value); + } catch (exc) { + return false; + } + + return true; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[398]); \ No newline at end of file diff --git a/build/dist/etargetBidAdapter.js b/build/dist/etargetBidAdapter.js new file mode 100644 index 00000000000..5739ebb09b1 --- /dev/null +++ b/build/dist/etargetBidAdapter.js @@ -0,0 +1,156 @@ +pbjsChunk([224],{ + +/***/ 400: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(401); + + +/***/ }), + +/***/ 401: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'etarget'; +var countryMap = { + 1: 'sk', + 2: 'cz', + 3: 'hu', + 4: 'ro', + 5: 'rs', + 6: 'bg', + 7: 'pl', + 8: 'hr', + 9: 'at', + 10: 'co', + 11: 'de', + 255: 'en' +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.refid && bid.params.country); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var i, l, bid, reqParams, netRevenue, gdprObject; + var request = []; + var bids = JSON.parse(JSON.stringify(validBidRequests)); + var lastCountry = 'sk'; + + for (i = 0, l = bids.length; i < l; i++) { + bid = bids[i]; + + if (countryMap[bid.params.country]) { + lastCountry = countryMap[bid.params.country]; + } + + reqParams = bid.params; + reqParams.transactionId = bid.transactionId; + request.push(formRequestUrl(reqParams)); + } + + request.unshift('https://' + lastCountry + '.search.etargetnet.com/hb/?hbget=1'); + netRevenue = 'net'; + + if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) { + gdprObject = { + gdpr: bidderRequest.gdprConsent.gdprApplies, + gdpr_consent: bidderRequest.gdprConsent.consentString + }; + request.push('gdpr=' + gdprObject.gdpr); + request.push('gdpr_consent=' + gdprObject.gdpr_consent); + } + + return { + method: 'POST', + url: request.join('&'), + data: bidderRequest, + bids: validBidRequests, + netRevenue: netRevenue, + bidder: 'etarget', + gdpr: gdprObject + }; + + 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, + video: 1 + }; + var bidObject, bid, type; + var bidRespones = []; + var bids = bidRequest.bids; + var responses = serverResponse.body; + var data = []; + + for (var i = 0; i < responses.length; i++) { + data = responses[i]; + type = data.response === 'banner' ? __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */] : __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + bid = bids[i]; + + if (VALID_RESPONSES[data.response] && (verifySize(data, bid.sizes) || type === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */])) { + bidObject = { + requestId: bid.bidId, + cpm: data.win_bid ? data.win_bid : 0, + width: data.width, + height: data.height, + creativeId: data.creativeId, + currency: data.win_cur, + netRevenue: true, + ttl: 360, + ad: data.banner, + vastXml: data.vast_content, + vastUrl: data.vast_link, + mediaType: data.response, + transactionId: bid.transactionId + }; + + if (bidRequest.gdpr) { + bidObject.gdpr = bidRequest.gdpr.gdpr; + bidObject.gdpr_consent = bidRequest.gdpr.gdpr_consent; + } + + 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; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[400]); \ No newline at end of file diff --git a/build/dist/express.js b/build/dist/express.js new file mode 100644 index 00000000000..3868cd12d6e --- /dev/null +++ b/build/dist/express.js @@ -0,0 +1,229 @@ +pbjsChunk([223],{ + +/***/ 402: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(403); + + +/***/ }), + +/***/ 403: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); + +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; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('loading ' + MODULE_NAME); + + if (adUnits.length === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('could not bind to gpt googletag api'); + return; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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() // eslint-disable-next-line no-undef + : 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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) { + // eslint-disable-next-line no-undef + 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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); + }; + }); +}; + +/***/ }) + +},[402]); \ No newline at end of file diff --git a/build/dist/feedadBidAdapter.js b/build/dist/feedadBidAdapter.js new file mode 100644 index 00000000000..2d6c1100828 --- /dev/null +++ b/build/dist/feedadBidAdapter.js @@ -0,0 +1,339 @@ +pbjsChunk([222],{ + +/***/ 404: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(405); + + +/***/ }), + +/***/ 405: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +/** + * Version of the FeedAd bid adapter + * @type {string} + */ + +var VERSION = '1.0.0'; +/** + * @typedef {object} FeedAdApiBidRequest + * @inner + * + * @property {number} ad_type + * @property {string} client_token + * @property {string} placement_id + * @property {string} sdk_version + * @property {boolean} app_hybrid + * + * @property {string} [app_bundle_id] + * @property {string} [app_name] + * @property {object} [custom_params] + * @property {number} [connectivity] + * @property {string} [device_adid] + * @property {string} [device_platform] + */ + +/** + * @typedef {object} FeedAdApiBidResponse + * @inner + * + * @property {string} ad - Ad HTML payload + * @property {number} cpm - number / float + * @property {string} creativeId - ID of creative for tracking + * @property {string} currency - 3-letter ISO 4217 currency-code + * @property {number} height - Height of creative returned in [].ad + * @property {boolean} netRevenue - Is the CPM net (true) or gross (false)? + * @property {string} requestId - bids[].bidId + * @property {number} ttl - Time to live for this ad + * @property {number} width - Width of creative returned in [].ad + */ + +/** + * @typedef {object} FeedAdApiTrackingParams + * @inner + * + * @property app_hybrid {boolean} + * @property client_token {string} + * @property klass {'prebid_bidWon'|'prebid_bidTimeout'} + * @property placement_id {string} + * @property prebid_auction_id {string} + * @property prebid_bid_id {string} + * @property prebid_transaction_id {string} + * @property referer {string} + * @property sdk_version {string} + * @property [app_bundle_id] {string} + * @property [app_name] {string} + * @property [device_adid] {string} + * @property [device_platform] {1|2|3} 1 - Android | 2 - iOS | 3 - Windows + */ + +/** + * Bidder network identity code + * @type {string} + */ + +var BIDDER_CODE = 'feedad'; +/** + * The media types supported by FeedAd + * @type {MediaType[]} + */ + +var MEDIA_TYPES = [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]]; +/** + * Tag for logging + * @type {string} + */ + +var TAG = '[FeedAd]'; +/** + * Pattern for valid placement IDs + * @type {RegExp} + */ + +var PLACEMENT_ID_PATTERN = /^[a-z0-9][a-z0-9_-]+[a-z0-9]$/; +var API_ENDPOINT = 'https://api.feedad.com'; +var API_PATH_BID_REQUEST = '/1/prebid/web/bids'; +var API_PATH_TRACK_REQUEST = '/1/prebid/web/events'; +/** + * Stores temporary auction metadata + * @type {Object.} + */ + +var BID_METADATA = {}; +/** + * Checks if the bid is compatible with FeedAd. + * + * @param {BidRequest} bid - the bid to check + * @return {boolean} true if the bid is valid + */ + +function isBidRequestValid(bid) { + var clientToken = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.clientToken'); + + if (!clientToken || !isValidClientToken(clientToken)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](TAG, "missing or invalid parameter 'clientToken'. found value:", clientToken); + return false; + } + + var placementId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.placementId'); + + if (!placementId || !isValidPlacementId(placementId)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](TAG, "missing or invalid parameter 'placementId'. found value:", placementId); + return false; + } + + return true; +} +/** + * Checks if a client token is valid + * @param {string} clientToken - the client token + * @return {boolean} true if the token is valid + */ + + +function isValidClientToken(clientToken) { + return typeof clientToken === 'string' && clientToken.length > 0; +} +/** + * Checks if the given placement id is of a correct format. + * Valid IDs are words of lowercase letters from a to z and numbers from 0 to 9. + * The words can be separated by hyphens or underscores. + * Multiple separators must not follow each other. + * The whole placement ID must not be larger than 256 characters. + * + * @param placementId - the placement id to verify + * @returns if the placement ID is valid. + */ + + +function isValidPlacementId(placementId) { + return typeof placementId === 'string' && placementId.length > 0 && placementId.length <= 256 && PLACEMENT_ID_PATTERN.test(placementId); +} +/** + * Checks if the given media types contain unsupported settings + * @param {MediaTypes} mediaTypes - the media types to check + * @return {MediaTypes} the unsupported settings, empty when all types are supported + */ + + +function filterSupportedMediaTypes(mediaTypes) { + return { + banner: mediaTypes.banner, + video: mediaTypes.video && mediaTypes.video.context === 'outstream' ? mediaTypes.video : undefined, + native: undefined + }; +} +/** + * Checks if the given media types are empty + * @param {MediaTypes} mediaTypes - the types to check + * @return {boolean} true if the types are empty + */ + + +function isMediaTypesEmpty(mediaTypes) { + return Object.keys(mediaTypes).every(function (type) { + return mediaTypes[type] === undefined; + }); +} +/** + * Creates the bid request params the api expects from the prebid bid request + * @param {BidRequest} request - the validated prebid bid request + * @return {FeedAdApiBidRequest} + */ + + +function createApiBidRParams(request) { + return { + ad_type: 0, + client_token: request.params.clientToken, + placement_id: request.params.placementId, + sdk_version: "prebid_".concat(VERSION), + app_hybrid: false + }; +} +/** + * Builds the bid request to the FeedAd Server + * @param {BidRequest[]} validBidRequests - all validated bid requests + * @param {object} bidderRequest - meta information + * @return {ServerRequest|ServerRequest[]} + */ + + +function buildRequests(validBidRequests, bidderRequest) { + if (!bidderRequest) { + return []; + } + + var acceptableRequests = validBidRequests.filter(function (request) { + return !isMediaTypesEmpty(filterSupportedMediaTypes(request.mediaTypes)); + }); + + if (acceptableRequests.length === 0) { + return []; + } + + var data = _extends({}, bidderRequest, { + bids: acceptableRequests.map(function (req) { + req.params = createApiBidRParams(req); + return req; + }) + }); + + data.bids.forEach(function (bid) { + return BID_METADATA[bid.bidId] = { + referer: data.refererInfo.referer, + transactionId: bid.transactionId + }; + }); + return { + method: 'POST', + url: "".concat(API_ENDPOINT).concat(API_PATH_BID_REQUEST), + data: data, + options: { + contentType: 'application/json' + } + }; +} +/** + * Adapts the FeedAd server response to Prebid format + * @param {ServerResponse} serverResponse - the FeedAd server response + * @param {BidRequest} request - the initial bid request + * @returns {Bid[]} the FeedAd bids + */ + + +function interpretResponse(serverResponse, request) { + /** + * @type FeedAdApiBidResponse[] + */ + return typeof serverResponse.body === 'string' ? JSON.parse(serverResponse.body) : serverResponse.body; +} +/** + * Creates the parameters for the FeedAd tracking call + * @param {object} data - prebid data + * @param {'prebid_bidWon'|'prebid_bidTimeout'} klass - type of tracking call + * @return {FeedAdApiTrackingParams|null} + */ + + +function createTrackingParams(data, klass) { + var bidId = data.bidId || data.requestId; + + if (!BID_METADATA.hasOwnProperty(bidId)) { + return null; + } + + var _BID_METADATA$bidId = BID_METADATA[bidId], + referer = _BID_METADATA$bidId.referer, + transactionId = _BID_METADATA$bidId.transactionId; + delete BID_METADATA[bidId]; + return { + app_hybrid: false, + client_token: data.params[0].clientToken, + placement_id: data.params[0].placementId, + klass: klass, + prebid_auction_id: data.auctionId, + prebid_bid_id: bidId, + prebid_transaction_id: transactionId, + referer: referer, + sdk_version: VERSION + }; +} +/** + * Creates a tracking handler for the given event type + * @param klass - the event type + * @return {Function} the tracking handler function + */ + + +function trackingHandlerFactory(klass) { + return function (data) { + if (!data) { + return; + } + + var params = createTrackingParams(data, klass); + + if (params) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])("".concat(API_ENDPOINT).concat(API_PATH_TRACK_REQUEST), null, JSON.stringify(params), { + withCredentials: true, + method: 'POST', + contentType: 'application/json' + }); + } + }; +} +/** + * @type {BidderSpec} + */ + + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: MEDIA_TYPES, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + onTimeout: trackingHandlerFactory('prebid_bidTimeout'), + onBidWon: trackingHandlerFactory('prebid_bidWon') +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[404]); \ No newline at end of file diff --git a/build/dist/fidelityBidAdapter.js b/build/dist/fidelityBidAdapter.js new file mode 100644 index 00000000000..359a693e5eb --- /dev/null +++ b/build/dist/fidelityBidAdapter.js @@ -0,0 +1,180 @@ +pbjsChunk([221],{ + +/***/ 406: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(407); + + +/***/ }), + +/***/ 407: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'fidelity'; +var BIDDER_SERVER = 'x.fidelity-media.com'; +var FIDELITY_VENDOR_ID = 408; +var spec = { + code: BIDDER_CODE, + aliases: ['kubient'], + gvlid: 408, + 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, + subid: 'hb', + flashver: getFlashVersion(), + tmax: bidderRequest.timeout, + defloc: bidderRequest.refererInfo.referer, + referrer: getTopWindowReferrer(), + schain: getSupplyChain(bidRequest.schain) + }; + setConsentParams(bidderRequest.gdprConsent, bidderRequest.uspConsent, payload); + return { + method: 'GET', + url: 'https://' + 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, serverResponses, gdprConsent, uspConsent) { + if (syncOptions.iframeEnabled) { + var url = 'https://' + BIDDER_SERVER + '/delivery/matches.php'; + var payload = { + type: 'iframe' + }; + setConsentParams(gdprConsent, uspConsent, payload); + return [{ + type: 'iframe', + url: url + '?' + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](payload).replace(/\&$/, '') + }]; + } + } +}; + +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 || ''; +} + +function getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return ''; + } +} + +function setConsentParams(gdprConsent, uspConsent, payload) { + if (gdprConsent) { + payload.gdpr = 0; + payload.consent_str = ''; + payload.consent_given = 0; + + if (typeof gdprConsent.gdprApplies !== 'undefined') { + payload.gdpr = gdprConsent.gdprApplies ? 1 : 0; + } + + if (typeof gdprConsent.consentString !== 'undefined') { + payload.consent_str = gdprConsent.consentString; + } + + if (gdprConsent.apiVersion === 1 && gdprConsent.vendorData && gdprConsent.vendorData.vendorConsents && typeof gdprConsent.vendorData.vendorConsents[FIDELITY_VENDOR_ID.toString(10)] !== 'undefined') { + payload.consent_given = gdprConsent.vendorData.vendorConsents[FIDELITY_VENDOR_ID.toString(10)] ? 1 : 0; + } + + if (gdprConsent.apiVersion === 2 && gdprConsent.vendorData && gdprConsent.vendorData.vendor && gdprConsent.vendorData.vendor.consents && typeof gdprConsent.vendorData.vendor.consents[FIDELITY_VENDOR_ID.toString(10)] !== 'undefined') { + payload.consent_given = gdprConsent.vendorData.vendor.consents[FIDELITY_VENDOR_ID.toString(10)] ? 1 : 0; + } + } + + if (typeof uspConsent !== 'undefined') { + payload.us_privacy = uspConsent; + } +} + +function getSupplyChain(schain) { + var supplyChain = ''; + + if (schain != null && schain.nodes) { + supplyChain = schain.ver + ',' + schain.complete; + + for (var i = 0; i < schain.nodes.length; i++) { + supplyChain += '!'; + supplyChain += schain.nodes[i].asi ? encodeURIComponent(schain.nodes[i].asi) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].sid ? encodeURIComponent(schain.nodes[i].sid) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].hp ? encodeURIComponent(schain.nodes[i].hp) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].rid ? encodeURIComponent(schain.nodes[i].rid) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].name ? encodeURIComponent(schain.nodes[i].name) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].domain ? encodeURIComponent(schain.nodes[i].domain) : ''; + } + } + + return supplyChain; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[406]); \ No newline at end of file diff --git a/build/dist/fintezaAnalyticsAdapter.js b/build/dist/fintezaAnalyticsAdapter.js new file mode 100644 index 00000000000..54120976bdc --- /dev/null +++ b/build/dist/fintezaAnalyticsAdapter.js @@ -0,0 +1,730 @@ +pbjsChunk([35],{ + +/***/ 408: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(409); + + +/***/ }), + +/***/ 409: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); + +var CONSTANTS = __webpack_require__(5); + +var ANALYTICS_TYPE = 'endpoint'; +var FINTEZA_HOST = 'https://content.mql5.com/tr'; +var BID_REQUEST_TRACK = 'Bid Request %BIDDER%'; +var BID_RESPONSE_PRICE_TRACK = 'Bid Response Price %BIDDER%'; +var BID_RESPONSE_TIME_TRACK = 'Bid Response Time %BIDDER%'; +var BID_TIMEOUT_TRACK = 'Bid Timeout %BIDDER%'; +var BID_WON_TRACK = 'Bid Won %BIDDER%'; +var FIRST_VISIT_DATE = '_fz_fvdt'; +var SESSION_ID = '_fz_ssn'; +var SESSION_DURATION = 30 * 60 * 1000; +var SESSION_RAND_PART = 9; +var TRACK_TIME_KEY = '_fz_tr'; +var UNIQ_ID_KEY = '_fz_uniq'; + +function getPageInfo() { + var pageInfo = { + domain: window.location.hostname + }; + + if (document.referrer) { + pageInfo.referrerDomain = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["parseUrl"](document.referrer).hostname; + } + + return pageInfo; +} + +function getUniqId() { + var cookies; + + try { + cookies = parseCookies(document.cookie); + } catch (a) { + cookies = {}; + } + + var isUniqFromLS; + var uniq = cookies[UNIQ_ID_KEY]; + + if (!uniq) { + try { + if (storage.hasLocalStorage()) { + uniq = storage.getDataFromLocalStorage(UNIQ_ID_KEY) || ''; + isUniqFromLS = true; + } + } catch (b) {} + } + + if (uniq && isNaN(uniq)) { + uniq = null; + } + + if (uniq && isUniqFromLS) { + var expires = new Date(); + expires.setFullYear(expires.getFullYear() + 10); + + try { + storage.setCookie(UNIQ_ID_KEY, uniq, expires.toUTCString()); + } catch (e) {} + } + + return uniq; +} + +function initFirstVisit() { + var now; + var visitDate; + var cookies; + + try { + cookies = parseCookies(document.cookie); + } catch (a) { + cookies = {}; + } + + visitDate = cookies[FIRST_VISIT_DATE]; + + if (!visitDate) { + now = new Date(); + visitDate = parseInt(now.getTime() / 1000, 10); + now.setFullYear(now.getFullYear() + 20); + + try { + storage.setCookie(FIRST_VISIT_DATE, visitDate, now.toUTCString()); + } catch (e) {} + } + + return visitDate; +} + +function trim(string) { + if (string.trim) { + return string.trim(); + } + + return string.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); +} + +function parseCookies(cookie) { + var values = {}; + var arr, item; + var param, value; + var i, j; + + if (!cookie || !storage.cookiesAreEnabled()) { + return {}; + } + + arr = cookie.split(';'); + + for (i = 0, j = arr.length; i < j; i++) { + item = arr[i]; + + if (!item) { + continue; + } + + param = item.split('='); + + if (param.length <= 1) { + continue; + } + + value = decodeURIComponent(param[0]); + value = trim(value); + values[value] = decodeURIComponent(param[1]); + } + + return values; +} + +function getRandAsStr(digits) { + var str = ''; + var rand = 0; + var i; + digits = digits || 4; + + for (i = 0; i < digits; i++) { + rand = Math.random() * 10 >>> 0; + str += '' + rand; + } + + return str; +} + +function getSessionBegin(session) { + if (!session || typeof session !== 'string') { + return 0; + } + + var len = session.length; + + if (len && len <= SESSION_RAND_PART) { + return 0; + } + + var timestamp = session.substring(0, len - SESSION_RAND_PART); + return parseInt(timestamp, 10); +} + +function initSession() { + var now = new Date(); + var expires = new Date(now.getTime() + SESSION_DURATION); + var timestamp = Math.floor(now.getTime() / 1000); + var begin = 0; + var cookies; + var sessionId; + var sessionDuration; + var isNew = false; + + try { + cookies = parseCookies(document.cookie); + } catch (a) { + cookies = {}; + } + + sessionId = cookies[SESSION_ID]; + + if (!sessionId || !checkSessionByExpires() || !checkSessionByReferer() || !checkSessionByDay()) { + sessionId = '' + timestamp + getRandAsStr(SESSION_RAND_PART); + begin = timestamp; + isNew = true; + } else { + begin = getSessionBegin(sessionId); + } + + if (begin > 0) { + sessionDuration = Math.floor(timestamp - begin); + } else { + sessionDuration = -1; + } + + try { + storage.setCookie(SESSION_ID, sessionId, expires.toUTCString()); + } catch (e) {} + + return { + isNew: isNew, + id: sessionId, + duration: sessionDuration + }; +} + +function checkSessionByExpires() { + var timestamp = getTrackRequestLastTime(); + var now = new Date().getTime(); + + if (now > timestamp + SESSION_DURATION) { + return false; + } + + return true; +} + +function checkSessionByReferer() { + var referrer = fntzAnalyticsAdapter.context.pageInfo.referrerDomain; + var domain = fntzAnalyticsAdapter.context.pageInfo.domain; + return referrer === '' || domain === referrer; +} + +function checkSessionByDay() { + var last = getTrackRequestLastTime(); + + if (last) { + last = new Date(last); + var now = new Date(); + return last.getUTCDate() === now.getUTCDate() && last.getUTCMonth() === now.getUTCMonth() && last.getUTCFullYear() === now.getUTCFullYear(); + } + + return false; +} + +function saveTrackRequestTime() { + var now = new Date().getTime(); + var expires = new Date(now + SESSION_DURATION); + + try { + if (storage.hasLocalStorage()) { + storage.setDataInLocalStorage(TRACK_TIME_KEY, now.toString()); + } else { + storage.setCookie(TRACK_TIME_KEY, now.toString(), expires.toUTCString()); + } + } catch (a) {} +} + +function getTrackRequestLastTime() { + var cookie; + + try { + if (storage.hasLocalStorage()) { + return parseInt(storage.getDataFromLocalStorage(TRACK_TIME_KEY) || 0, 10); + } + + cookie = parseCookies(document.cookie); + cookie = cookie[TRACK_TIME_KEY]; + + if (cookie) { + return parseInt(cookie, 10); + } + } catch (e) {} + + return 0; +} + +function getAntiCacheParam() { + var date = new Date(); + var rand = Math.random() * 99999 + 1 >>> 0; + return [date.getTime(), rand].join(''); +} + +function replaceBidder(str, bidder) { + var _str = str; + _str = _str.replace(/\%bidder\%/, bidder.toLowerCase()); + _str = _str.replace(/\%BIDDER\%/, bidder.toUpperCase()); + _str = _str.replace(/\%Bidder\%/, bidder.charAt(0).toUpperCase() + bidder.slice(1).toLowerCase()); + return _str; +} + +function prepareBidRequestedParams(args) { + return [{ + event: encodeURIComponent(replaceBidder(fntzAnalyticsAdapter.context.bidRequestTrack, args.bidderCode)), + ref: encodeURIComponent(window.location.href) + }]; +} + +function prepareBidResponseParams(args) { + return [{ + event: encodeURIComponent(replaceBidder(fntzAnalyticsAdapter.context.bidResponsePriceTrack, args.bidderCode)), + value: args.cpm, + unit: 'usd' + }, { + event: encodeURIComponent(replaceBidder(fntzAnalyticsAdapter.context.bidResponseTimeTrack, args.bidderCode)), + value: args.timeToRespond, + unit: 'ms' + }]; +} + +function prepareBidWonParams(args) { + return [{ + event: encodeURIComponent(replaceBidder(fntzAnalyticsAdapter.context.bidWonTrack, args.bidderCode)), + value: args.cpm, + unit: 'usd' + }]; +} + +function prepareBidTimeoutParams(args) { + return args.map(function (bid) { + return { + event: encodeURIComponent(replaceBidder(fntzAnalyticsAdapter.context.bidTimeoutTrack, bid.bidder)), + value: bid.timeout, + unit: 'ms' + }; + }); +} + +function prepareTrackData(evtype, args) { + var prepareParams = null; + + switch (evtype) { + case CONSTANTS.EVENTS.BID_REQUESTED: + prepareParams = prepareBidRequestedParams; + break; + + case CONSTANTS.EVENTS.BID_RESPONSE: + prepareParams = prepareBidResponseParams; + break; + + case CONSTANTS.EVENTS.BID_WON: + prepareParams = prepareBidWonParams; + break; + + case CONSTANTS.EVENTS.BID_TIMEOUT: + prepareParams = prepareBidTimeoutParams; + break; + } + + if (!prepareParams) { + return null; + } + + var data = prepareParams(args); + + if (!data) { + return null; + } + + var session = initSession(); + return data.map(function (d) { + var trackData = _extends(d, { + id: fntzAnalyticsAdapter.context.id, + ref: encodeURIComponent(window.location.href), + title: encodeURIComponent(document.title), + scr_res: fntzAnalyticsAdapter.context.screenResolution, + fv_date: fntzAnalyticsAdapter.context.firstVisit, + ac: getAntiCacheParam() + }); + + if (fntzAnalyticsAdapter.context.uniqId) { + trackData.fz_uniq = fntzAnalyticsAdapter.context.uniqId; + } + + if (session.id) { + trackData.ssn = session.id; + } + + if (session.isNew) { + session.isNew = false; + trackData.ssn_start = 1; + } + + trackData.ssn_dr = session.duration; + return trackData; + }); +} + +function sendTrackRequest(trackData) { + try { + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(fntzAnalyticsAdapter.context.host, null, trackData, { + method: 'GET', + withCredentials: true, + contentType: 'application/x-www-form-urlencoded' + }); + saveTrackRequestTime(); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('Error on send data: ', err); + } +} + +var fntzAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + FINTEZA_HOST: FINTEZA_HOST, + ANALYTICS_TYPE: ANALYTICS_TYPE +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (typeof args !== 'undefined') { + var trackData = prepareTrackData(eventType, args); + + if (!trackData) { + return; + } + + trackData.forEach(sendTrackRequest); + } + } +}); + +fntzAnalyticsAdapter.originEnableAnalytics = fntzAnalyticsAdapter.enableAnalytics; + +fntzAnalyticsAdapter.enableAnalytics = function (config) { + if (!config.options.id) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('Client ID (id) option is not defined. Analytics won\'t work'); + return; + } + + fntzAnalyticsAdapter.context = { + host: config.options.host || FINTEZA_HOST, + id: config.options.id, + bidRequestTrack: config.options.bidRequestTrack || BID_REQUEST_TRACK, + bidResponsePriceTrack: config.options.bidResponsePriceTrack || BID_RESPONSE_PRICE_TRACK, + bidResponseTimeTrack: config.options.bidResponseTimeTrack || BID_RESPONSE_TIME_TRACK, + bidTimeoutTrack: config.options.bidTimeoutTrack || BID_TIMEOUT_TRACK, + bidWonTrack: config.options.bidWonTrack || BID_WON_TRACK, + firstVisit: initFirstVisit(), + screenResolution: "".concat(window.screen.width, "x").concat(window.screen.height), + uniqId: getUniqId(), + pageInfo: getPageInfo() + }; + fntzAnalyticsAdapter.originEnableAnalytics(config); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: fntzAnalyticsAdapter, + code: 'finteza' +}); +/* harmony default export */ __webpack_exports__["default"] = (fntzAnalyticsAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[408]); \ No newline at end of file diff --git a/build/dist/fluctBidAdapter.js b/build/dist/fluctBidAdapter.js new file mode 100644 index 00000000000..6895151a2b1 --- /dev/null +++ b/build/dist/fluctBidAdapter.js @@ -0,0 +1,139 @@ +pbjsChunk([220],{ + +/***/ 410: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(411); + + +/***/ }), + +/***/ 411: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'fluct'; +var END_POINT = 'https://hb.adingo.jp/prebid'; +var VERSION = '1.2'; +var NET_REVENUE = true; +var TTL = 300; +var spec = { + code: BIDDER_CODE, + aliases: ['adingo'], + + /** + * 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.groupId && bid.params.tagId); + }, + + /** + * 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 serverRequests = []; + var referer = bidderRequest.refererInfo.referer; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (request) { + var data = Object(); + data.referer = referer; + data.adUnitCode = request.adUnitCode; + data.bidId = request.bidId; + data.transactionId = request.transactionId; + data.sizes = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](request.sizes, function (size) { + data.sizes.push({ + w: size[0], + h: size[1] + }); + }); + + data.params = request.params; + serverRequests.push({ + method: 'POST', + url: END_POINT, + options: { + contentType: 'application/json', + withCredentials: true, + customHeaders: { + 'x-fluct-app': 'prebid/fluctBidAdapter', + 'x-fluct-version': VERSION, + 'x-openrtb-version': 2.5 + } + }, + data: data + }); + }); + + return serverRequests; + }, + + /* + * Unpack the respnse from the server into a list of bids. + * + * @param {serverResponse} serverResponse A successful response from the server. + * @return {bid[]} An array of bids which weer nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, serverRequest) { + var bidResponses = []; + var res = serverResponse.body; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](res) && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](res.seatbid) && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](res.seatbid[0].bid)) { + var bid = res.seatbid[0].bid[0]; + var dealId = bid.dealid; + var beaconUrl = bid.burl; + var callImpBeacon = ""; + var data = { + bidderCode: BIDDER_CODE, + requestId: res.id, + currency: res.cur, + cpm: parseFloat(bid.price) || 0, + netRevenue: NET_REVENUE, + width: bid.w, + height: bid.h, + creativeId: bid.crid, + ttl: TTL, + ad: bid.adm + callImpBeacon + }; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](dealId)) { + data.dealId = dealId; + } + + bidResponses.push(data); + } + + return bidResponses; + }, + + /* + * Register the user sync pixels which should be dropped after the auction. + * + * @params {syncOptions} syncOptions which user syncs are allowed? + * @params {ServerResponse[]} serverResponses List of server's responses. + * @return {UserSync[]} The user syncs which should be dropped. + * + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + return []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[410]); \ No newline at end of file diff --git a/build/dist/freeWheelAdserverVideo.js b/build/dist/freeWheelAdserverVideo.js new file mode 100644 index 00000000000..535086849ed --- /dev/null +++ b/build/dist/freeWheelAdserverVideo.js @@ -0,0 +1,39 @@ +pbjsChunk([219],{ + +/***/ 412: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(413); + + +/***/ }), + +/***/ 413: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "adpodUtils", function() { return adpodUtils; }); +/* harmony export (immutable) */ __webpack_exports__["notifyTranslationModule"] = notifyTranslationModule; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adServerManager_js__ = __webpack_require__(69); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_hook_js__ = __webpack_require__(13); +/** + * This module adds Freewheel support for Video to Prebid. + */ + + +var adpodUtils = {}; +function notifyTranslationModule(fn) { + fn.call(this, 'freewheel'); +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_hook_js__["a" /* getHook */])('registerAdserver').before(notifyTranslationModule); +Object(__WEBPACK_IMPORTED_MODULE_0__src_adServerManager_js__["a" /* registerVideoSupport */])('freewheel', { + getTargeting: function getTargeting(args) { + return adpodUtils.getTargeting(args); + } +}); +Object(__WEBPACK_IMPORTED_MODULE_1__src_hook_js__["e" /* submodule */])('adpod', adpodUtils); + +/***/ }) + +},[412]); \ No newline at end of file diff --git a/build/dist/freewheel-sspBidAdapter.js b/build/dist/freewheel-sspBidAdapter.js new file mode 100644 index 00000000000..ca4764eed48 --- /dev/null +++ b/build/dist/freewheel-sspBidAdapter.js @@ -0,0 +1,425 @@ +pbjsChunk([218],{ + +/***/ 414: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(415); + + +/***/ }), + +/***/ 415: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +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() { + return 'https'; +} + +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; +} + +function getBiggerSizeWithLimit(array, minSizeLimit, maxSizeLimit) { + var minSize = minSizeLimit || [0, 0]; + var maxSize = maxSizeLimit || [Number.MAX_VALUE, Number.MAX_VALUE]; + var candidates = []; + + for (var i = 0; i < array.length; i++) { + if (array[i][0] * array[i][1] >= minSize[0] * minSize[1] && array[i][0] * array[i][1] <= maxSize[0] * maxSize[1]) { + candidates.push(array[i]); + } + } + + return getBiggerSize(candidates); +} +/* +* read the pricing extension with this format: 1.0000 +* @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 { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('PREBID - ' + BIDDER_CODE + ': No bid received or missing pricing extension.'); + } + + return princingData; +} + +function hashcode(inputString) { + var hash = 0; + var char; + if (inputString.length == 0) return hash; + + for (var i = 0; i < inputString.length; i++) { + char = inputString.charCodeAt(i); + hash = (hash << 5) - hash + char; + hash = hash & hash; // Convert to 32bit integer + } + + return hash; +} + +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; +} + +function getDealId(xmlNode) { + var dealId = ''; + var impNodes = xmlNode.querySelectorAll('Impression'); // 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(impNodes, function (el) { + var queries = el.textContent.substring(el.textContent.indexOf('?') + 1).split('&'); + Array.prototype.forEach.call(queries, function (item) { + var split = item.split('='); + + if (split[0] == 'dealId') { + dealId = split[1]; + } + }); + }); + return dealId; +} +/** +* 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 = '
'; + 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 + ''; +} + +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 config = bid.params; // default placement if no placement is set + + if (!config.hasOwnProperty('domId') && !config.hasOwnProperty('auto') && !config.hasOwnProperty('p') && !config.hasOwnProperty('article')) { + if (config.format === 'intext-roll') { + config.iframeMode = 'dfp'; + } else { + config.domId = 'freewheelssp_prebid_target'; + } + } + + 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 = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* 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, bidderRequest) { + // var currency = config.getConfig(currency); + var buildRequest = function buildRequest(currentBidRequest, bidderRequest) { + var zone = currentBidRequest.params.zoneId; + var timeInMillis = new Date().getTime(); + var keyCode = hashcode(zone + '' + timeInMillis); + var requestParams = { + reqType: 'AdsSetup', + protocolVersion: '2.0', + zoneId: zone, + componentId: 'prebid', + componentSubId: getComponentId(currentBidRequest.params.format), + timestamp: timeInMillis, + pKey: keyCode + }; // Add GDPR flag and consent string + + if (bidderRequest && bidderRequest.gdprConsent) { + requestParams._fw_gdpr_consent = bidderRequest.gdprConsent.consentString; + + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + requestParams._fw_gdpr = bidderRequest.gdprConsent.gdprApplies; + } + } + + if (currentBidRequest.params.gdpr_consented_providers) { + requestParams._fw_gdpr_consented_providers = currentBidRequest.params.gdpr_consented_providers; + } // Add CCPA consent string + + + if (bidderRequest && bidderRequest.uspConsent) { + requestParams._fw_us_privacy = bidderRequest.uspConsent; + } + + var vastParams = currentBidRequest.params.vastUrlParams; + + if (_typeof(vastParams) === 'object') { + for (var key in vastParams) { + if (vastParams.hasOwnProperty(key)) { + requestParams[key] = vastParams[key]; + } + } + } + + var location = bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : getTopMostWindow().location.href; + + if (isValidUrl(location)) { + requestParams.loc = location; + } + + var playerSize = []; + + if (currentBidRequest.mediaTypes.video && currentBidRequest.mediaTypes.video.playerSize) { + // If mediaTypes is video, get size from mediaTypes.video.playerSize per http://prebid.org/blog/pbjs-3 + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](currentBidRequest.mediaTypes.video.playerSize[0])) { + playerSize = currentBidRequest.mediaTypes.video.playerSize[0]; + } else { + playerSize = currentBidRequest.mediaTypes.video.playerSize; + } + } else if (currentBidRequest.mediaTypes.banner.sizes) { + // If mediaTypes is banner, get size from mediaTypes.banner.sizes per http://prebid.org/blog/pbjs-3 + playerSize = getBiggerSizeWithLimit(currentBidRequest.mediaTypes.banner.sizes, currentBidRequest.mediaTypes.banner.minSizeLimit, currentBidRequest.mediaTypes.banner.maxSizeLimit); + } else { + // Backward compatible code, in case size still pass by sizes in bid request + 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 + }; + }; + + return bidRequests.map(function (currentBidRequest) { + return buildRequest(currentBidRequest, bidderRequest); + }); + }, + + /** + * 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 = []; + + if (bidrequest.mediaTypes.video && bidrequest.mediaTypes.video.playerSize) { + // If mediaTypes is video, get size from mediaTypes.video.playerSize per http://prebid.org/blog/pbjs-3 + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidrequest.mediaTypes.video.playerSize[0])) { + playerSize = bidrequest.mediaTypes.video.playerSize[0]; + } else { + playerSize = bidrequest.mediaTypes.video.playerSize; + } + } else if (bidrequest.mediaTypes.banner.sizes) { + // If mediaTypes is banner, get size from mediaTypes.banner.sizes per http://prebid.org/blog/pbjs-3 + playerSize = getBiggerSizeWithLimit(bidrequest.mediaTypes.banner.sizes, bidrequest.mediaTypes.banner.minSizeLimit, bidrequest.mediaTypes.banner.maxSizeLimit); + } else { + // Backward compatible code, in case size still pass by sizes in bid request + playerSize = getBiggerSize(bidrequest.sizes); + } + + if (_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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid.js - ' + BIDDER_CODE + ' : ' + err); + return; + } + + var princingData = getPricing(xmlDoc); + var creativeId = getCreativeId(xmlDoc); + var dealId = getDealId(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, + dealId: dealId + }; + + if (bidrequest.mediaTypes.video) { + bidResponse.vastXml = serverResponse; + bidResponse.mediaType = 'video'; + } + + bidResponse.ad = formatAdHTML(bidrequest, playerSize); + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions && syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: USER_SYNC_URL + }]; + } else { + return []; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[414]); \ No newline at end of file diff --git a/build/dist/gammaBidAdapter.js b/build/dist/gammaBidAdapter.js new file mode 100644 index 00000000000..1f189ae1f57 --- /dev/null +++ b/build/dist/gammaBidAdapter.js @@ -0,0 +1,122 @@ +pbjsChunk([217],{ + +/***/ 416: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(417); + + +/***/ }), + +/***/ 417: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + +var ENDPOINT = 'https://hb.gammaplatform.com'; +var ENDPOINT_USERSYNC = 'https://cm-supply-web.gammaplatform.com'; +var BIDDER_CODE = 'gamma'; +var 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, bidderRequest) { + var serverRequests = []; + var bidderRequestReferer = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer || ''; + + for (var i = 0, len = bidRequests.length; i < len; i++) { + var gaxObjParams = bidRequests[i]; + serverRequests.push({ + method: 'GET', + url: ENDPOINT + '/adx/request?wid=' + gaxObjParams.params.siteId + '&zid=' + gaxObjParams.params.zoneId + '&hb=pbjs&bidid=' + gaxObjParams.bidId + '&urf=' + encodeURIComponent(bidderRequestReferer) + }); + } + + return serverRequests; + }, + + /** + * 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_USERSYNC + '/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; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[416]); \ No newline at end of file diff --git a/build/dist/gamoshiBidAdapter.js b/build/dist/gamoshiBidAdapter.js new file mode 100644 index 00000000000..dbf5deaff4c --- /dev/null +++ b/build/dist/gamoshiBidAdapter.js @@ -0,0 +1,371 @@ +pbjsChunk([216],{ + +/***/ 418: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(419); + + +/***/ }), + +/***/ 419: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helper", function() { return helper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var ENDPOINTS = { + 'gamoshi': 'https://rtb.gamoshi.io' +}; +var DEFAULT_TTL = 360; +var helper = { + getTopFrame: function getTopFrame() { + try { + return window.top === window ? 1 : 0; + } catch (e) {} + + return 0; + }, + startsWith: function startsWith(str, search) { + return str.substr(0, search.length) === search; + }, + getTopWindowDomain: function getTopWindowDomain(url) { + var domainStart = url.indexOf('://') + '://'.length; + return url.substring(domainStart, url.indexOf('/', domainStart) < 0 ? url.length : url.indexOf('/', domainStart)); + }, + getMediaType: function getMediaType(bid) { + if (bid.ext) { + if (bid.ext.media_type) { + return bid.ext.media_type.toLowerCase(); + } else if (bid.ext.vast_url) { + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]; + } else { + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]; + } + } + + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]; + } +}; +var spec = { + code: 'gamoshi', + aliases: ['gambid', 'cleanmedia', '9MediaOnline'], + supportedMediaTypes: ['banner', 'video'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.supplyPartnerId && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.supplyPartnerId) && (!bid.params['rtbEndpoint'] || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params['rtbEndpoint'])) && (!bid.params.bidfloor || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.params.bidfloor)) && (!bid.params['adpos'] || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.params['adpos'])) && (!bid.params['protocols'] || Array.isArray(bid.params['protocols'])) && (!bid.params.instl || bid.params.instl === 0 || bid.params.instl === 1); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var _this = this; + + return validBidRequests.map(function (bidRequest) { + var adUnitCode = bidRequest.adUnitCode, + auctionId = bidRequest.auctionId, + mediaTypes = bidRequest.mediaTypes, + params = bidRequest.params, + sizes = bidRequest.sizes, + transactionId = bidRequest.transactionId; + var baseEndpoint = params['rtbEndpoint'] || ENDPOINTS['gamoshi']; + var rtbEndpoint = "".concat(baseEndpoint, "/r/").concat(params.supplyPartnerId, "/bidr?rformat=open_rtb&reqformat=rtb_json&bidder=prebid") + (params.query ? '&' + params.query : ''); + var url = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl') || bidderRequest.refererInfo.referer; + var rtbBidRequest = { + id: auctionId, + site: { + domain: helper.getTopWindowDomain(url), + page: url, + ref: bidderRequest.refererInfo.referer + }, + device: { + ua: navigator.userAgent, + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0, + h: screen.height, + w: screen.width, + language: navigator.language + }, + imp: [], + ext: {}, + user: { + ext: {} + }, + source: { + ext: {} + }, + regs: { + ext: {} + } + }; + var gdprConsent = bidderRequest.gdprConsent; + + if (gdprConsent && gdprConsent.consentString && gdprConsent.gdprApplies) { + rtbBidRequest.ext.gdpr_consent = { + consent_string: gdprConsent.consentString, + consent_required: gdprConsent.gdprApplies + }; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](rtbBidRequest, 'regs.ext.gdpr', gdprConsent.gdprApplies === true ? 1 : 0); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](rtbBidRequest, 'user.ext.consent', gdprConsent.consentString); + } + + if (validBidRequests[0].schain) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](rtbBidRequest, 'source.ext.schain', validBidRequests[0].schain); + } + + if (bidderRequest && bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](rtbBidRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + var imp = { + id: transactionId, + instl: params.instl === 1 ? 1 : 0, + tagid: adUnitCode, + bidfloor: params.bidfloor || 0, + bidfloorcur: 'USD', + secure: 1 + }; + + var hasFavoredMediaType = params.favoredMediaType && _this.supportedMediaTypes.includes(params.favoredMediaType); + + if (!mediaTypes || mediaTypes.banner) { + if (!hasFavoredMediaType || params.favoredMediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]) { + var bannerImp = _extends({}, imp, { + banner: { + w: sizes.length ? sizes[0][0] : 300, + h: sizes.length ? sizes[0][1] : 250, + pos: params.pos || 0, + topframe: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"]() ? 0 : 1 + } + }); + + rtbBidRequest.imp.push(bannerImp); + } + } + + if (mediaTypes && mediaTypes.video) { + if (!hasFavoredMediaType || params.favoredMediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]) { + var playerSize = mediaTypes.video.playerSize || sizes; + + var videoImp = _extends({}, imp, { + video: { + protocols: params.protocols || [1, 2, 3, 4, 5, 6], + pos: params.pos || 0, + ext: { + context: mediaTypes.video.context + } + } + }); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](playerSize[0])) { + videoImp.video.w = playerSize[0][0]; + videoImp.video.h = playerSize[0][1]; + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](playerSize[0])) { + videoImp.video.w = playerSize[0]; + videoImp.video.h = playerSize[1]; + } else { + videoImp.video.w = 300; + videoImp.video.h = 250; + } + + rtbBidRequest.imp.push(videoImp); + } + } + + var eids = []; + + if (bidRequest && bidRequest.userId) { + addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.id5id"), 'id5-sync.com', 'ID5ID'); + addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.tdid"), 'adserver.org', 'TDID'); + } + + if (eids.length > 0) { + rtbBidRequest.user.ext.eids = eids; + } + + if (rtbBidRequest.imp.length === 0) { + return; + } + + return { + method: 'POST', + url: rtbEndpoint, + data: rtbBidRequest, + bidRequest: bidRequest + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var response = serverResponse && serverResponse.body; + + if (!response) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('empty response'); + return []; + } + + var bids = response.seatbid.reduce(function (acc, seatBid) { + return acc.concat(seatBid.bid); + }, []); + var outBids = []; + bids.forEach(function (bid) { + var outBid = { + requestId: bidRequest.bidRequest.bidId, + cpm: bid.price, + width: bid.w, + height: bid.h, + ttl: DEFAULT_TTL, + creativeId: bid.crid || bid.adid, + netRevenue: true, + currency: bid.cur || response.cur, + mediaType: helper.getMediaType(bid) + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest.bidRequest, 'mediaTypes.' + outBid.mediaType)) { + if (outBid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]) { + outBids.push(_extends({}, outBid, { + ad: bid.adm + })); + } else if (outBid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]) { + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest.bidRequest, 'mediaTypes.video.context'); + outBids.push(_extends({}, outBid, { + vastUrl: bid.ext.vast_url, + vastXml: bid.adm, + renderer: context === 'outstream' ? newRenderer(bidRequest.bidRequest, bid) : undefined + })); + } + } + }); + return outBids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + var syncs = []; + var gdprApplies = false; + var consentString = ''; + var uspConsentString = ''; + + if (gdprConsent && typeof gdprConsent.gdprApplies === 'boolean') { + gdprApplies = gdprConsent.gdprApplies; + } + + var gdpr = gdprApplies ? 1 : 0; + + if (gdprApplies && gdprConsent.consentString) { + consentString = encodeURIComponent(gdprConsent.consentString); + } + + if (uspConsent) { + uspConsentString = encodeURIComponent(uspConsent); + } + + var macroValues = { + gdpr: gdpr, + consent: consentString, + uspConsent: uspConsentString + }; + serverResponses.forEach(function (resp) { + if (resp.body) { + var bidResponse = resp.body; + + if (bidResponse.ext && Array.isArray(bidResponse.ext['utrk'])) { + bidResponse.ext['utrk'].forEach(function (pixel) { + var url = replaceMacros(pixel.url, macroValues); + syncs.push({ + type: pixel.type, + url: url + }); + }); + } + + if (Array.isArray(bidResponse.seatbid)) { + bidResponse.seatbid.forEach(function (seatBid) { + if (Array.isArray(seatBid.bid)) { + seatBid.bid.forEach(function (bid) { + if (bid.ext && Array.isArray(bid.ext['utrk'])) { + bid.ext['utrk'].forEach(function (pixel) { + var url = replaceMacros(pixel.url, macroValues); + syncs.push({ + type: pixel.type, + url: url + }); + }); + } + }); + } + }); + } + } + }); + return syncs; + } +}; + +function newRenderer(bidRequest, bid) { + var rendererOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + url: bidRequest.params && bidRequest.params.rendererUrl || bid.ext && bid.ext.renderer_url || 'https://s.gamoshi.io/video/latest/renderer.js', + config: rendererOptions, + loaded: false + }); + + try { + renderer.setRender(renderOutstream); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function renderOutstream(bid) { + bid.renderer.push(function () { + var unitId = bid.adUnitCode + '/' + bid.adId; + window['GamoshiPlayer'].renderAd({ + id: unitId, + debug: window.location.href.indexOf('pbjsDebug') >= 0, + placement: document.getElementById(bid.adUnitCode), + width: bid.width, + height: bid.height, + events: { + ALL_ADS_COMPLETED: function ALL_ADS_COMPLETED() { + return window.setTimeout(function () { + window['GamoshiPlayer'].removeAd(unitId); + }, 300); + } + }, + vastUrl: bid.vastUrl, + vastXml: bid.vastXml + }); + }); +} + +function addExternalUserId(eids, value, source, rtiPartner) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value)) { + eids.push({ + source: source, + uids: [{ + id: value, + ext: { + rtiPartner: rtiPartner + } + }] + }); + } +} + +function replaceMacros(url, macros) { + return url.replace('[GDPR]', macros.gdpr).replace('[CONSENT]', macros.consent).replace('[US_PRIVACY]', macros.uspConsent); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[418]); \ No newline at end of file diff --git a/build/dist/gdprEnforcement.js b/build/dist/gdprEnforcement.js new file mode 100644 index 00000000000..ef9277fae66 --- /dev/null +++ b/build/dist/gdprEnforcement.js @@ -0,0 +1,377 @@ +pbjsChunk([215],{ + +/***/ 420: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(421); + + +/***/ }), + +/***/ 421: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "purpose1Rule", function() { return purpose1Rule; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "purpose2Rule", function() { return purpose2Rule; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "enforcementRules", function() { return enforcementRules; }); +/* harmony export (immutable) */ __webpack_exports__["validateRules"] = validateRules; +/* harmony export (immutable) */ __webpack_exports__["deviceAccessHook"] = deviceAccessHook; +/* harmony export (immutable) */ __webpack_exports__["userSyncHook"] = userSyncHook; +/* harmony export (immutable) */ __webpack_exports__["userIdHook"] = userIdHook; +/* harmony export (immutable) */ __webpack_exports__["makeBidRequestsHook"] = makeBidRequestsHook; +/* harmony export (immutable) */ __webpack_exports__["setEnforcementConfig"] = setEnforcementConfig; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_storageManager_js__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__src_events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9__src_constants_json__); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * This module gives publishers extra set of features to enforce individual purposes of TCF v2 + */ + + + + + + + + + + + +var TCF2 = { + 'purpose1': { + id: 1, + name: 'storage' + }, + 'purpose2': { + id: 2, + name: 'basicAds' + } +}; +var DEFAULT_RULES = [{ + purpose: 'storage', + enforcePurpose: true, + enforceVendor: true, + vendorExceptions: [] +}, { + purpose: 'basicAds', + enforcePurpose: true, + enforceVendor: true, + vendorExceptions: [] +}]; +var purpose1Rule; +var purpose2Rule; +var addedDeviceAccessHook = false; +var enforcementRules; + +function getGvlid(bidderCode) { + var gvlid; + bidderCode = bidderCode || __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getCurrentBidder(); + + if (bidderCode) { + var gvlMapping = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('gvlMapping'); + + if (gvlMapping && gvlMapping[bidderCode]) { + gvlid = gvlMapping[bidderCode]; + } else { + var bidder = __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].getBidAdapter(bidderCode); + + if (bidder && bidder.getSpec) { + gvlid = bidder.getSpec().gvlid; + } + } + } + + return gvlid; +} + +function getGvlidForUserIdModule(userIdModule) { + var gvlId; + var gvlMapping = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('gvlMapping'); + + if (gvlMapping && gvlMapping[userIdModule.name]) { + gvlId = gvlMapping[userIdModule.name]; + } else { + gvlId = userIdModule.gvlid; + } + + return gvlId; +} +/** + * This function takes in a rule and consentData and validates against the consentData provided. Depending on what it returns, + * the caller may decide to suppress a TCF-sensitive activity. + * @param {Object} rule - enforcement rules set in config + * @param {Object} consentData - gdpr consent data + * @param {string=} currentModule - Bidder code of the current module + * @param {number=} gvlId - GVL ID for the module + * @returns {boolean} + */ + + +function validateRules(rule, consentData, currentModule, gvlId) { + var purposeId = TCF2[Object.keys(TCF2).filter(function (purposeName) { + return TCF2[purposeName].name === rule.purpose; + })[0]].id; // return 'true' if vendor present in 'vendorExceptions' + + if (__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(rule.vendorExceptions || [], currentModule)) { + return true; + } // get data from the consent string + + + var purposeConsent = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](consentData, "vendorData.purpose.consents.".concat(purposeId)); + var vendorConsent = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](consentData, "vendorData.vendor.consents.".concat(gvlId)); + var liTransparency = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](consentData, "vendorData.purpose.legitimateInterests.".concat(purposeId)); + /* + Since vendor exceptions have already been handled, the purpose as a whole is allowed if it's not being enforced + or the user has consented. Similar with vendors. + */ + + var purposeAllowed = rule.enforcePurpose === false || purposeConsent === true; + var vendorAllowed = rule.enforceVendor === false || vendorConsent === true; + /* + Few if any vendors should be declaring Legitimate Interest for Device Access (Purpose 1), but some are claiming + LI for Basic Ads (Purpose 2). Prebid.js can't check to see who's declaring what legal basis, so if LI has been + established for Purpose 2, allow the auction to take place and let the server sort out the legal basis calculation. + */ + + if (purposeId === 2) { + return purposeAllowed && vendorAllowed || liTransparency === true; + } + + return purposeAllowed && vendorAllowed; +} +/** + * This hook checks whether module has permission to access device or not. Device access include cookie and local storage + * @param {Function} fn reference to original function (used by hook logic) + * @param {Number=} gvlid gvlid of the module + * @param {string=} moduleName name of the module + */ + +function deviceAccessHook(fn, gvlid, moduleName, result) { + result = _extends({}, { + hasEnforcementHook: true + }); + + if (!Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["hasDeviceAccess"])()) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Device access is disabled by Publisher'); + result.valid = false; + fn.call(this, gvlid, moduleName, result); + } else { + var consentData = __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["gdprDataHandler"].getConsentData(); + + if (consentData && consentData.gdprApplies) { + if (consentData.apiVersion === 2) { + var curBidder = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getCurrentBidder(); // Bidders have a copy of storage object with bidder code binded. Aliases will also pass the same bidder code when invoking storage functions and hence if alias tries to access device we will try to grab the gvl id for alias instead of original bidder + + if (curBidder && curBidder != moduleName && __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].aliasRegistry[curBidder] === moduleName) { + gvlid = getGvlid(curBidder); + } else { + gvlid = getGvlid(moduleName); + } + + var curModule = moduleName || curBidder; + var isAllowed = validateRules(purpose1Rule, consentData, curModule, gvlid); + + if (isAllowed) { + result.valid = true; + fn.call(this, gvlid, moduleName, result); + } else { + curModule && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("Device access denied for ".concat(curModule, " by TCF2")); + result.valid = false; + fn.call(this, gvlid, moduleName, result); + } + } else { + // The module doesn't enforce TCF1.1 strings + result.valid = true; + fn.call(this, gvlid, moduleName, result); + } + } else { + result.valid = true; + fn.call(this, gvlid, moduleName, result); + } + } +} +/** + * This hook checks if a bidder has consent for user sync or not + * @param {Function} fn reference to original function (used by hook logic) + * @param {...any} args args + */ + +function userSyncHook(fn) { + var consentData = __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["gdprDataHandler"].getConsentData(); + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + if (consentData && consentData.gdprApplies) { + if (consentData.apiVersion === 2) { + var gvlid = getGvlid(); + var curBidder = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getCurrentBidder(); + var isAllowed = validateRules(purpose1Rule, consentData, curBidder, gvlid); + + if (isAllowed) { + fn.call.apply(fn, [this].concat(args)); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("User sync not allowed for ".concat(curBidder)); + } + } else { + // The module doesn't enforce TCF1.1 strings + fn.call.apply(fn, [this].concat(args)); + } + } else { + fn.call.apply(fn, [this].concat(args)); + } +} +/** + * This hook checks if user id module is given consent or not + * @param {Function} fn reference to original function (used by hook logic) + * @param {Submodule[]} submodules Array of user id submodules + * @param {Object} consentData GDPR consent data + */ + +function userIdHook(fn, submodules, consentData) { + if (consentData && consentData.gdprApplies) { + if (consentData.apiVersion === 2) { + var userIdModules = submodules.map(function (submodule) { + var gvlid = getGvlidForUserIdModule(submodule.submodule); + var moduleName = submodule.submodule.name; + var isAllowed = validateRules(purpose1Rule, consentData, moduleName, gvlid); + + if (isAllowed) { + return submodule; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("User denied permission to fetch user id for ".concat(moduleName, " User id module")); + } + + return undefined; + }).filter(function (module) { + return module; + }); + fn.call(this, userIdModules, _objectSpread(_objectSpread({}, consentData), {}, { + hasValidated: true + })); + } else { + // The module doesn't enforce TCF1.1 strings + fn.call(this, submodules, consentData); + } + } else { + fn.call(this, submodules, consentData); + } +} +/** + * Checks if a bidder is allowed in Auction. + * Enforces "purpose 2 (basic ads)" of TCF v2.0 spec + * @param {Function} fn - Function reference to the original function. + * @param {Array} adUnits + */ + +function makeBidRequestsHook(fn, adUnits) { + var consentData = __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["gdprDataHandler"].getConsentData(); + + for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + if (consentData && consentData.gdprApplies) { + if (consentData.apiVersion === 2) { + var disabledBidders = []; + adUnits.forEach(function (adUnit) { + adUnit.bids = adUnit.bids.filter(function (bid) { + var currBidder = bid.bidder; + var gvlId = getGvlid(currBidder); + if (__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes_js___default()(disabledBidders, currBidder)) return false; + var isAllowed = !!validateRules(purpose2Rule, consentData, currBidder, gvlId); + + if (!isAllowed) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("TCF2 blocked auction for ".concat(currBidder)); + __WEBPACK_IMPORTED_MODULE_8__src_events_js___default.a.emit(__WEBPACK_IMPORTED_MODULE_9__src_constants_json__["EVENTS"].BIDDER_BLOCKED, currBidder); + disabledBidders.push(currBidder); + } + + return isAllowed; + }); + }); + fn.call.apply(fn, [this, adUnits].concat(args)); + } else { + // The module doesn't enforce TCF1.1 strings + fn.call.apply(fn, [this, adUnits].concat(args)); + } + } else { + fn.call.apply(fn, [this, adUnits].concat(args)); + } +} + +var hasPurpose1 = function hasPurpose1(rule) { + return rule.purpose === TCF2.purpose1.name; +}; + +var hasPurpose2 = function hasPurpose2(rule) { + return rule.purpose === TCF2.purpose2.name; +}; +/** + * A configuration function that initializes some module variables, as well as adds hooks + * @param {Object} config - GDPR enforcement config object + */ + + +function setEnforcementConfig(config) { + var rules = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](config, 'gdpr.rules'); + + if (!rules) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('TCF2: enforcing P1 and P2'); + enforcementRules = DEFAULT_RULES; + } else { + enforcementRules = rules; + } + + purpose1Rule = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(enforcementRules, hasPurpose1); + purpose2Rule = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(enforcementRules, hasPurpose2); + + if (!purpose1Rule) { + purpose1Rule = DEFAULT_RULES[0]; + } + + if (!purpose2Rule) { + purpose2Rule = DEFAULT_RULES[1]; + } + + if (purpose1Rule && !addedDeviceAccessHook) { + addedDeviceAccessHook = true; + __WEBPACK_IMPORTED_MODULE_7__src_storageManager_js__["d" /* validateStorageEnforcement */].before(deviceAccessHook, 49); + __WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__["registerSyncInner"].before(userSyncHook, 48); // Using getHook as user id and gdprEnforcement are both optional modules. Using import will auto include the file in build + + Object(__WEBPACK_IMPORTED_MODULE_6__src_hook_js__["a" /* getHook */])('validateGdprEnforcement').before(userIdHook, 47); + } + + if (purpose2Rule) { + Object(__WEBPACK_IMPORTED_MODULE_6__src_hook_js__["a" /* getHook */])('makeBidRequests').before(makeBidRequestsHook); + } +} +__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('consentManagement', function (config) { + return setEnforcementConfig(config.consentManagement); +}); + +/***/ }) + +},[420]); \ No newline at end of file diff --git a/build/dist/getintentBidAdapter.js b/build/dist/getintentBidAdapter.js new file mode 100644 index 00000000000..544663d9580 --- /dev/null +++ b/build/dist/getintentBidAdapter.js @@ -0,0 +1,188 @@ +pbjsChunk([214],{ + +/***/ 422: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(423); + + +/***/ }), + +/***/ 423: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); + + +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', 'sid']; +var 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 GetIntent's 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 'https://' + 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', + provider: 'direct.prebidjs' + }; + + 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]]; + } + } +} +/** + * @param {String} s The string representing a size (e.g. "300x250"). + * @return {Number[]} An array with two elements: [width, height] (e.g.: [300, 250]). + * */ + + +function parseSize(s) { + return s.split('x').map(Number); +} +/** + * @param {Array} sizes An array of sizes/numbers to be joined into single string. + * May be an array (e.g. [300, 250]) or array of arrays (e.g. [[300, 250], [640, 480]]. + * @return {String} The string with sizes, e.g. array of sizes [[50, 50], [80, 80]] becomes "50x50,80x80" string. + * */ + + +function produceSize(sizes) { + function sizeToStr(s) { + if (Array.isArray(s) && s.length === 2 && Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isInteger"])(s[0]) && Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isInteger"])(s[1])) { + return s.join('x'); + } else { + throw "Malformed parameter 'sizes'"; + } + } + + if (Array.isArray(sizes) && Array.isArray(sizes[0])) { + return sizes.map(sizeToStr).join(','); + } else { + return sizeToStr(sizes); + } +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[422]); \ No newline at end of file diff --git a/build/dist/glimpseBidAdapter.js b/build/dist/glimpseBidAdapter.js new file mode 100644 index 00000000000..4704efe912d --- /dev/null +++ b/build/dist/glimpseBidAdapter.js @@ -0,0 +1,91 @@ +pbjsChunk([213],{ + +/***/ 424: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(425); + + +/***/ }), + +/***/ 425: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 = 'glimpse'; +var spec = { + code: BIDDER_CODE, + url: 'https://api.glimpseprotocol.io/cloud/v1/vault/prebid', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + try { + var placementId = bid.params.placementId; + return typeof placementId === 'string' && placementId.length > 0; + } catch (error) { + return false; + } + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var url = spec.url, + bidderCode = spec.code; + var bids = validBidRequests.map(function (request) { + delete request.mediaTypes; + return request; + }); + var sdk = { + source: 'pbjs', + version: "4.2.0" + }; + + var payload = _objectSpread(_objectSpread({}, bidderRequest), {}, { + bidderCode: bidderCode, + bids: bids, + sdk: sdk + }); + + return { + method: 'POST', + url: url, + data: JSON.stringify(payload) + }; + }, + interpretResponse: function interpretResponse(serverResponse, _) { + var bids = []; + + try { + var body = serverResponse.body; + bids.push.apply(bids, _toConsumableArray(body)); + } catch (error) {} + + return bids; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[424]); \ No newline at end of file diff --git a/build/dist/gmosspBidAdapter.js b/build/dist/gmosspBidAdapter.js new file mode 100644 index 00000000000..f5e756c5edc --- /dev/null +++ b/build/dist/gmosspBidAdapter.js @@ -0,0 +1,153 @@ +pbjsChunk([212],{ + +/***/ 426: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(427); + + +/***/ }), + +/***/ 427: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'gmossp'; +var ENDPOINT = 'https://sp.gmossp-sp.jp/hb/prebid/query.ad'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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.sid; + }, + + /** + * 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 bidRequests = []; + var url = bidderRequest.refererInfo.referer; + var cur = getCurrencyType(); + var dnt = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getDNT"]() ? '1' : '0'; + + for (var i = 0; i < validBidRequests.length; i++) { + var queryString = ''; + var request = validBidRequests[i]; + var tid = request.transactionId; + var bid = request.bidId; + var ver = "4.2.0"; + var sid = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getBidIdParameter"]('sid', request.params); + queryString = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["tryAppendQueryString"](queryString, 'tid', tid); + queryString = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["tryAppendQueryString"](queryString, 'bid', bid); + queryString = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["tryAppendQueryString"](queryString, 'ver', ver); + queryString = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["tryAppendQueryString"](queryString, 'sid', sid); + queryString = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["tryAppendQueryString"](queryString, 'url', url); + queryString = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["tryAppendQueryString"](queryString, 'cur', cur); + queryString = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["tryAppendQueryString"](queryString, 'dnt', dnt); + bidRequests.push({ + method: 'GET', + url: ENDPOINT, + data: queryString + }); + } + + return bidRequests; + }, + + /** + * 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(bidderResponse, requests) { + var res = bidderResponse.body; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](res)) { + return []; + } + + try { + res.imps.forEach(function (impTracker) { + var tracker = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["createTrackPixelHtml"](impTracker); + res.ad += tracker; + }); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]('Error appending tracking pixel', error); + } + + var bid = { + requestId: res.bid, + cpm: res.price, + currency: res.cur, + width: res.w, + height: res.h, + ad: res.ad, + creativeId: res.creativeId, + netRevenue: true, + ttl: res.ttl || 300 + }; + return [bid]; + }, + + /** + * 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 (!serverResponses.length) { + return syncs; + } + + serverResponses.forEach(function (res) { + if (syncOptions.pixelEnabled && res.body && res.body.syncs.length) { + res.body.syncs.forEach(function (sync) { + syncs.push({ + type: 'image', + url: sync + }); + }); + } + }); + return syncs; + } +}; + +function getCurrencyType() { + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency')) { + return __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); + } + + return 'JPY'; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[426]); \ No newline at end of file diff --git a/build/dist/googleAnalyticsAdapter.js b/build/dist/googleAnalyticsAdapter.js new file mode 100644 index 00000000000..bd6725a6ded --- /dev/null +++ b/build/dist/googleAnalyticsAdapter.js @@ -0,0 +1,309 @@ +pbjsChunk([211],{ + +/***/ 428: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(429); + + +/***/ }), + +/***/ 429: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/** + * ga.js - analytics adapter for google analytics + */ +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var adapterManager = __webpack_require__(7).default; + +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 _cpmDistribution = null; +var _trackerSend = null; +var _sampled = true; +var adapter = {}; +/** + * 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] + */ + +adapter.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; + } + + if (options && typeof options.cpmDistribution === 'function') { + _cpmDistribution = options.cpmDistribution; + } + + 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) !== '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`."); + }; +}; + +adapter.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) { + if (_cpmDistribution) { + return _cpmDistribution(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++; + var bidderName = bidderCode.bidder; + + window[_gaGlobal](_trackerSend, 'event', _category, 'Timeouts', bidderName, _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(); +} +/** + * Exposed for testing purposes + */ + + +adapter.getCpmDistribution = getCpmDistribution; +adapterManager.registerAnalyticsAdapter({ + adapter: adapter, + code: 'ga' +}); +/* harmony default export */ __webpack_exports__["default"] = (adapter); + +/***/ }) + +},[428]); \ No newline at end of file diff --git a/build/dist/gptPreAuction.js b/build/dist/gptPreAuction.js new file mode 100644 index 00000000000..783482f01b0 --- /dev/null +++ b/build/dist/gptPreAuction.js @@ -0,0 +1,139 @@ +pbjsChunk([210],{ + +/***/ 430: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(431); + + +/***/ }), + +/***/ 431: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_currentConfig", function() { return _currentConfig; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendGptSlots", function() { return appendGptSlots; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendPbAdSlot", function() { return appendPbAdSlot; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeBidRequestsHook", function() { return makeBidRequestsHook; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +var _this = this; + + + + + +var MODULE_NAME = 'GPT Pre-Auction'; +var _currentConfig = {}; +var hooksAdded = false; +var appendGptSlots = function appendGptSlots(adUnits) { + var _currentConfig2 = _currentConfig, + customGptSlotMatching = _currentConfig2.customGptSlotMatching; + + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isGptPubadsDefined"]()) { + return; + } + + var adUnitMap = adUnits.reduce(function (acc, adUnit) { + acc[adUnit.code] = adUnit; + return acc; + }, {}); + window.googletag.pubads().getSlots().forEach(function (slot) { + var matchingAdUnitCode = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(Object.keys(adUnitMap), customGptSlotMatching ? customGptSlotMatching(slot) : __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isAdUnitCodeMatchingSlot"](slot)); + + if (matchingAdUnitCode) { + var adUnit = adUnitMap[matchingAdUnitCode]; + adUnit.fpd = adUnit.fpd || {}; + adUnit.fpd.context = adUnit.fpd.context || {}; + var context = adUnit.fpd.context; + context.adServer = context.adServer || {}; + context.adServer.name = 'gam'; + context.adServer.adSlot = slot.getAdUnitPath(); + } + }); +}; +var appendPbAdSlot = function appendPbAdSlot(adUnit) { + adUnit.fpd = adUnit.fpd || {}; + adUnit.fpd.context = adUnit.fpd.context || {}; + var context = adUnit.fpd.context; + var _currentConfig3 = _currentConfig, + customPbAdSlot = _currentConfig3.customPbAdSlot; + + if (customPbAdSlot) { + context.pbAdSlot = customPbAdSlot(adUnit.code, __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](context, 'adServer.adSlot')); + return; + } // use context.pbAdSlot if set + + + if (context.pbAdSlot) { + return; + } // use data attribute 'data-adslotid' if set + + + try { + var adUnitCodeDiv = document.getElementById(adUnit.code); + + if (adUnitCodeDiv.dataset.adslotid) { + context.pbAdSlot = adUnitCodeDiv.dataset.adslotid; + return; + } + } catch (e) {} // banner adUnit, use GPT adunit if defined + + + if (context.adServer) { + context.pbAdSlot = context.adServer.adSlot; + return; + } + + context.pbAdSlot = adUnit.code; +}; +var makeBidRequestsHook = function makeBidRequestsHook(fn, adUnits) { + appendGptSlots(adUnits); + adUnits.forEach(function (adUnit) { + appendPbAdSlot(adUnit); + }); + + for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + return fn.call.apply(fn, [_this, adUnits].concat(args)); +}; + +var handleSetGptConfig = function handleSetGptConfig(moduleConfig) { + _currentConfig = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["pick"](moduleConfig, ['enabled', function (enabled) { + return enabled !== false; + }, 'customGptSlotMatching', function (customGptSlotMatching) { + return typeof customGptSlotMatching === 'function' && customGptSlotMatching; + }, 'customPbAdSlot', function (customPbAdSlot) { + return typeof customPbAdSlot === 'function' && customPbAdSlot; + }]); + + if (_currentConfig.enabled) { + if (!hooksAdded) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["a" /* getHook */])('makeBidRequests').before(makeBidRequestsHook); + hooksAdded = true; + } + } else { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]("".concat(MODULE_NAME, ": Turning off module")); + _currentConfig = {}; + Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["a" /* getHook */])('makeBidRequests').getHooks({ + hook: makeBidRequestsHook + }).remove(); + hooksAdded = false; + } +}; + +__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('gptPreAuction', function (config) { + return handleSetGptConfig(config.gptPreAuction); +}); +handleSetGptConfig({}); + +/***/ }) + +},[430]); \ No newline at end of file diff --git a/build/dist/gridBidAdapter.js b/build/dist/gridBidAdapter.js new file mode 100644 index 00000000000..512ba7e87eb --- /dev/null +++ b/build/dist/gridBidAdapter.js @@ -0,0 +1,650 @@ +pbjsChunk([209],{ + +/***/ 432: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(433); + + +/***/ }), + +/***/ 433: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony export (immutable) */ __webpack_exports__["getSyncUrl"] = getSyncUrl; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_config_js__ = __webpack_require__(3); + + + + + +var BIDDER_CODE = 'grid'; +var ENDPOINT_URL = 'https://grid.bidswitch.net/hb'; +var NEW_ENDPOINT_URL = 'https://grid.bidswitch.net/hbjson'; +var SYNC_URL = 'https://x.bidswitch.net/sync?ssp=themediagrid'; +var TIME_TO_LIVE = 360; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; +var hasSynced = false; +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 = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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.uid; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - an array of bids + * @param {bidderRequest} bidderRequest bidder request object + * @return {ServerRequest[]} Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var oldFormatBids = []; + var newFormatBids = []; + validBidRequests.forEach(function (bid) { + bid.params.useNewFormat ? newFormatBids.push(bid) : oldFormatBids.push(bid); + }); + var requests = []; + + if (newFormatBids.length) { + requests.push(buildNewRequest(newFormatBids, bidderRequest)); + } + + if (oldFormatBids.length) { + requests.push(buildOldRequest(oldFormatBids, bidderRequest)); + } + + return requests; + }, + + /** + * 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 errorMessage; + 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), bidRequest, bidResponses); + }); + } + + if (errorMessage) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + if (!hasSynced && syncOptions.pixelEnabled) { + var params = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += "&gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + params += "&gdpr_consent=".concat(gdprConsent.consentString); + } + } + + if (uspConsent) { + params += "&us_privacy=".concat(uspConsent); + } + + hasSynced = true; + return { + type: 'image', + url: SYNC_URL + params + }; + } + } +}; + +function isPopulatedArray(arr) { + return !!(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](arr) && arr.length > 0); +} + +function deleteValues(keyPairObj) { + if (isPopulatedArray(keyPairObj.value) && keyPairObj.value[0] === '') { + delete keyPairObj.value; + } +} + +function _getBidFromResponse(respItem) { + if (!respItem) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.emptySeatbid); + } else if (!respItem.bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); + } else if (!respItem.bid[0]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.noBid); + } + + return respItem && respItem.bid && respItem.bid[0]; +} + +function _addBidResponse(serverBid, bidRequest, bidResponses) { + if (!serverBid) return; + var errorMessage; + if (!serverBid.auid) errorMessage = LOG_ERROR_MESS.noAuid + JSON.stringify(serverBid); + if (!serverBid.adm) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);else { + var bid = null; + var slot = null; + var bidsMap = bidRequest.bidsMap; + + if (bidRequest.newFormat) { + bid = bidsMap[serverBid.impid]; + } else { + var awaitingBids = bidsMap[serverBid.auid]; + + if (awaitingBids) { + var sizeId = "".concat(serverBid.w, "x").concat(serverBid.h); + + if (awaitingBids[sizeId]) { + slot = awaitingBids[sizeId][0]; + bid = slot.bids.shift(); + } + } else { + errorMessage = LOG_ERROR_MESS.noPlacementCode + serverBid.auid; + } + } + + if (bid) { + var bidResponse = { + requestId: bid.bidId, + // bid.bidderRequestId, + bidderCode: spec.code, + cpm: serverBid.price, + width: serverBid.w, + height: serverBid.h, + creativeId: serverBid.auid, + // bid.bidId, + currency: 'USD', + netRevenue: false, + ttl: TIME_TO_LIVE, + dealId: serverBid.dealid + }; + + if (serverBid.content_type === 'video') { + bidResponse.vastXml = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.adResponse = { + content: bidResponse.vastXml + }; + + if (!bid.renderer && (!bid.mediaTypes || !bid.mediaTypes.video || bid.mediaTypes.video.context === 'outstream')) { + bidResponse.renderer = createRenderer(bidResponse, { + id: bid.bidId, + url: RENDERER_URL + }); + } + } else { + bidResponse.ad = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + } + + bidResponses.push(bidResponse); + + if (slot && !slot.bids.length) { + slot.parents.forEach(function (_ref) { + var parent = _ref.parent, + key = _ref.key, + uid = _ref.uid; + var index = parent[key].indexOf(slot); + + if (index > -1) { + parent[key].splice(index, 1); + } + + if (!parent[key].length) { + delete parent[key]; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](parent).length) { + delete bidsMap[uid]; + } + } + }); + } + } + } + + if (errorMessage) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + } +} + +function buildOldRequest(validBidRequests, bidderRequest) { + var auids = []; + var bidsMap = {}; + var slotsMapByUid = {}; + var sizeMap = {}; + var bids = validBidRequests || []; + var pageKeywords = null; + var reqId; + bids.forEach(function (bid) { + reqId = bid.bidderRequestId; + var uid = bid.params.uid, + adUnitCode = bid.adUnitCode, + mediaTypes = bid.mediaTypes; + auids.push(uid); + var sizesId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes); + + if (!pageKeywords && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.params.keywords)) { + pageKeywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"](bid.params.keywords); + } + + var addedSizes = {}; + sizesId.forEach(function (sizeId) { + addedSizes[sizeId] = true; + }); + var bannerSizesId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](mediaTypes, 'banner.sizes')); + var videoSizesId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](mediaTypes, 'video.playerSize')); + bannerSizesId.concat(videoSizesId).forEach(function (sizeId) { + if (!addedSizes[sizeId]) { + addedSizes[sizeId] = true; + sizesId.push(sizeId); + } + }); + + if (!slotsMapByUid[uid]) { + slotsMapByUid[uid] = {}; + } + + var slotsMap = slotsMapByUid[uid]; + + if (!slotsMap[adUnitCode]) { + slotsMap[adUnitCode] = { + adUnitCode: adUnitCode, + bids: [bid], + parents: [] + }; + } else { + slotsMap[adUnitCode].bids.push(bid); + } + + var slot = slotsMap[adUnitCode]; + sizesId.forEach(function (sizeId) { + sizeMap[sizeId] = true; + + if (!bidsMap[uid]) { + bidsMap[uid] = {}; + } + + if (!bidsMap[uid][sizeId]) { + bidsMap[uid][sizeId] = [slot]; + } else { + bidsMap[uid][sizeId].push(slot); + } + + slot.parents.push({ + parent: bidsMap[uid], + key: sizeId, + uid: uid + }); + }); + }); + var configKeywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"]({ + 'user': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('fpd.user'), 'keywords') || null, + 'context': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('fpd.context'), 'keywords') || null + }); + + if (configKeywords.length) { + pageKeywords = (pageKeywords || []).concat(configKeywords); + } + + if (pageKeywords && pageKeywords.length > 0) { + pageKeywords.forEach(deleteValues); + } + + var payload = { + auids: auids.join(','), + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](sizeMap).join(','), + r: reqId, + wrapperType: 'Prebid_js', + wrapperVersion: "4.2.0" + }; + + if (pageKeywords) { + payload.keywords = JSON.stringify(pageKeywords); + } + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + payload.u = bidderRequest.refererInfo.referer; + } + + if (bidderRequest.timeout) { + payload.wtimeout = bidderRequest.timeout; + } + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + } + + payload.gdpr_applies = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? Number(bidderRequest.gdprConsent.gdprApplies) : 1; + } + + if (bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + } + + return { + method: 'GET', + url: ENDPOINT_URL, + data: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](payload).replace(/\&$/, ''), + bidsMap: bidsMap + }; +} + +function buildNewRequest(validBidRequests, bidderRequest) { + var pageKeywords = null; + var jwpseg = null; + var content = null; + var schain = null; + var userId = null; + var user = null; + var userExt = null; + var bidderRequestId = bidderRequest.bidderRequestId, + auctionId = bidderRequest.auctionId, + gdprConsent = bidderRequest.gdprConsent, + uspConsent = bidderRequest.uspConsent, + timeout = bidderRequest.timeout, + refererInfo = bidderRequest.refererInfo; + var referer = refererInfo ? encodeURIComponent(refererInfo.referer) : ''; + var imp = []; + var bidsMap = {}; + validBidRequests.forEach(function (bid) { + if (!bidderRequestId) { + bidderRequestId = bid.bidderRequestId; + } + + if (!auctionId) { + auctionId = bid.auctionId; + } + + if (!schain) { + schain = bid.schain; + } + + if (!userId) { + userId = bid.userId; + } + + var _bid$params = bid.params, + uid = _bid$params.uid, + keywords = _bid$params.keywords, + mediaTypes = bid.mediaTypes, + bidId = bid.bidId, + adUnitCode = bid.adUnitCode, + realTimeData = bid.realTimeData; + bidsMap[bidId] = bid; + + if (!pageKeywords && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](keywords)) { + pageKeywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"](keywords); + } + + if (realTimeData && realTimeData.jwTargeting) { + if (!jwpseg && realTimeData.jwTargeting.segments) { + jwpseg = realTimeData.segments; + } + + if (!content && realTimeData.content) { + content = realTimeData.content; + } + } + + var impObj = { + id: bidId, + tagid: uid.toString(), + ext: { + divid: adUnitCode + } + }; + + if (!mediaTypes || mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]]) { + var banner = createBannerRequest(bid, mediaTypes ? mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]] : {}); + + if (banner) { + impObj.banner = banner; + } + } + + if (mediaTypes && mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]]) { + var video = createVideoRequest(bid, mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]]); + + if (video) { + impObj.video = video; + } + } + + if (impObj.banner || impObj.video) { + imp.push(impObj); + } + }); + var source = { + tid: auctionId, + ext: { + wrapper: 'Prebid_js', + wrapper_version: "4.2.0" + } + }; + + if (schain) { + source.ext.schain = schain; + } + + var tmax = __WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('bidderTimeout') || timeout; + var request = { + id: bidderRequestId, + site: { + page: referer + }, + tmax: tmax, + source: source, + imp: imp + }; + + if (content) { + request.site.content = content; + } + + if (jwpseg && jwpseg.length) { + user = { + data: [{ + name: 'iow_labs_pub_data', + segment: jwpseg.map(function (seg) { + return { + name: 'jwpseg', + value: seg + }; + }) + }] + }; + } + + if (gdprConsent && gdprConsent.consentString) { + userExt = { + consent: gdprConsent.consentString + }; + } + + if (userId) { + userExt = userExt || {}; + + if (userId.tdid) { + userExt.unifiedid = userId.tdid; + } + + if (userId.id5id) { + userExt.id5id = userId.id5id; + } + + if (userId.digitrustid && userId.digitrustid.data && userId.digitrustid.data.id) { + userExt.digitrustid = userId.digitrustid.data.id; + } + + if (userId.lipb && userId.lipb.lipbid) { + userExt.liveintentid = userId.lipb.lipbid; + } + } + + if (userExt && Object.keys(userExt).length) { + user = user || {}; + user.ext = userExt; + } + + if (user) { + request.user = user; + } + + var configKeywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"]({ + 'user': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('fpd.user'), 'keywords') || null, + 'context': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('fpd.context'), 'keywords') || null + }); + + if (configKeywords.length) { + pageKeywords = (pageKeywords || []).concat(configKeywords); + } + + if (pageKeywords && pageKeywords.length > 0) { + pageKeywords.forEach(deleteValues); + } + + if (pageKeywords) { + request.ext = { + keywords: pageKeywords + }; + } + + if (gdprConsent && gdprConsent.gdprApplies) { + request.regs = { + ext: { + gdpr: gdprConsent.gdprApplies ? 1 : 0 + } + }; + } + + if (uspConsent) { + if (!request.regs) { + request.regs = { + ext: {} + }; + } + + request.regs.ext.us_privacy = uspConsent; + } + + return { + method: 'POST', + url: NEW_ENDPOINT_URL, + data: JSON.stringify(request), + newFormat: true, + bidsMap: bidsMap + }; +} + +function createVideoRequest(bid, mediaType) { + var playerSize = mediaType.playerSize, + mimes = mediaType.mimes, + durationRangeSec = mediaType.durationRangeSec; + var size = (playerSize || bid.sizes || [])[0]; + if (!size) return; + var result = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseGPTSingleSizeArrayToRtbSize"](size); + + if (mimes) { + result.mimes = mimes; + } + + if (durationRangeSec && durationRangeSec.length === 2) { + result.minduration = durationRangeSec[0]; + result.maxduration = durationRangeSec[1]; + } + + return result; +} + +function createBannerRequest(bid, mediaType) { + var sizes = mediaType.sizes || bid.sizes; + if (!sizes || !sizes.length) return; + var format = sizes.map(function (size) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseGPTSingleSizeArrayToRtbSize"](size); + }); + var result = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseGPTSingleSizeArrayToRtbSize"](sizes[0]); + + if (format.length) { + result.format = format; + } + + return result; +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + targetId: bid.adUnitCode, + adResponse: bid.adResponse + }); + }); +} + +function createRenderer(bid, rendererParams) { + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + id: rendererParams.id, + url: rendererParams.url, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function resetUserSync() { + hasSynced = false; +} +function getSyncUrl() { + return SYNC_URL; +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[432]); \ No newline at end of file diff --git a/build/dist/gridNMBidAdapter.js b/build/dist/gridNMBidAdapter.js new file mode 100644 index 00000000000..7f5f30cffa6 --- /dev/null +++ b/build/dist/gridNMBidAdapter.js @@ -0,0 +1,269 @@ +pbjsChunk([208],{ + +/***/ 434: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(435); + + +/***/ }), + +/***/ 435: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony export (immutable) */ __webpack_exports__["getSyncUrl"] = getSyncUrl; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'gridNM'; +var ENDPOINT_URL = 'https://grid.bidswitch.net/hbnm'; +var SYNC_URL = 'https://x.bidswitch.net/sync?ssp=themediagrid'; +var TIME_TO_LIVE = 360; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; +var hasSynced = false; +var LOG_ERROR_MESS = { + noAdm: 'Bid from response has no adm parameter - ', + noPrice: 'Bid from response has no price parameter - ', + wrongContentType: 'Bid from response has wrong content_type 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 = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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) { + var invalid = !bid.params.source || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.source) || !bid.params.secid || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.secid) || !bid.params.pubid || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.pubid); + + if (!invalid) { + invalid = !bid.params.video || !bid.params.video.protocols || !bid.params.video.mimes; + } + + if (!invalid) { + var _bid$params$video = bid.params.video, + protocols = _bid$params$video.protocols, + mimes = _bid$params$video.mimes; + invalid = !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](mimes) || !mimes.length || mimes.filter(function (it) { + return !(it && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](it)); + }).length; + + if (!invalid) { + invalid = !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](protocols) || !protocols.length || protocols.filter(function (it) { + return !(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](it) && it > 0 && !(it % 1)); + }).length; + } + } + + return !invalid; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - an array of bids + * @param {bidderRequest} bidderRequest bidder request object + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var bids = validBidRequests || []; + var requests = []; + bids.forEach(function (bid) { + var params = bid.params, + bidderRequestId = bid.bidderRequestId, + sizes = bid.sizes; + var payload = { + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](sizes).join(','), + r: bidderRequestId, + wrapperType: 'Prebid_js', + wrapperVersion: "4.2.0" + }; + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + payload.u = bidderRequest.refererInfo.referer; + } + + if (bidderRequest.timeout) { + payload.wtimeout = bidderRequest.timeout; + } + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + } + + payload.gdpr_applies = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? Number(bidderRequest.gdprConsent.gdprApplies) : 1; + } + + if (bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + } + + requests.push({ + method: 'POST', + url: ENDPOINT_URL + '?' + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](payload).replace(/\&$/, ''), + bid: bid, + data: params // content + + }); + }); + return requests; + }, + + /** + * 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 errorMessage; + if (!serverResponse) errorMessage = LOG_ERROR_MESS.emptyResponse;else if (serverResponse.seatbid && !serverResponse.seatbid.length) { + errorMessage = LOG_ERROR_MESS.hasEmptySeatbidArray; + } + + if (!errorMessage && serverResponse.seatbid) { + var serverBid = _getBidFromResponse(serverResponse.seatbid[0]); + + if (serverBid) { + if (!serverBid.adm) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);else if (!serverBid.price) errorMessage = LOG_ERROR_MESS.noPrice + JSON.stringify(serverBid);else if (serverBid.content_type !== 'video') errorMessage = LOG_ERROR_MESS.wrongContentType + serverBid.content_type; + + if (!errorMessage) { + var bid = bidRequest.bid; + + if (!serverBid.w || !serverBid.h) { + var size = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes)[0].split('x'); + serverBid.w = size[0]; + serverBid.h = size[1]; + } + + var bidResponse = { + requestId: bid.bidId, + bidderCode: spec.code, + cpm: serverBid.price, + width: serverBid.w, + height: serverBid.h, + creativeId: serverBid.auid || bid.bidderRequestId, + currency: 'USD', + netRevenue: false, + ttl: TIME_TO_LIVE, + dealId: serverBid.dealid, + vastXml: serverBid.adm, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], + adResponse: { + content: serverBid.adm + } + }; + + if (!bid.renderer && (!bid.mediaTypes || !bid.mediaTypes.video || bid.mediaTypes.video.context === 'outstream')) { + bidResponse.renderer = createRenderer(bidResponse, { + id: bid.bidId, + url: RENDERER_URL + }); + } + + bidResponses.push(bidResponse); + } + } + } + + if (errorMessage) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + if (!hasSynced && syncOptions.pixelEnabled) { + var params = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += "&gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + params += "&gdpr_consent=".concat(gdprConsent.consentString); + } + } + + if (uspConsent) { + params += "&us_privacy=".concat(uspConsent); + } + + hasSynced = true; + return { + type: 'image', + url: SYNC_URL + params + }; + } + } +}; + +function _getBidFromResponse(respItem) { + if (!respItem) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.emptySeatbid); + } else if (!respItem.bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); + } else if (!respItem.bid[0]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.noBid); + } + + return respItem && respItem.bid && respItem.bid[0]; +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + targetId: bid.adUnitCode, + adResponse: bid.adResponse + }); + }); +} + +function createRenderer(bid, rendererParams) { + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + id: rendererParams.id, + url: rendererParams.url, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function resetUserSync() { + hasSynced = false; +} +function getSyncUrl() { + return SYNC_URL; +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[434]); \ No newline at end of file diff --git a/build/dist/gumgumBidAdapter.js b/build/dist/gumgumBidAdapter.js new file mode 100644 index 00000000000..a0688554516 --- /dev/null +++ b/build/dist/gumgumBidAdapter.js @@ -0,0 +1,544 @@ +pbjsChunk([207],{ + +/***/ 436: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(437); + + +/***/ }), + +/***/ 437: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'gumgum'; +var ALIAS_BIDDER_CODE = ['gg']; +var BID_ENDPOINT = "https://g2.gumgum.com/hbid/imp"; +var JCSI = { + t: 0, + rq: 8, + pbv: "4.2.0" +}; +var SUPPORTED_MEDIA_TYPES = [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]]; +var TIME_TO_LIVE = 60; +var DELAY_REQUEST_TIME = 1800000; // setting to 30 mins + +var invalidRequestIds = {}; +var browserParams = {}; +var pageViewId = null; // TODO: potential 0 values for browserParams sent to ad server + +function _getBrowserParams(topWindowUrl) { + var topWindow; + var topScreen; + var topUrl; + var ggad; + var ns; + + function getNetworkSpeed() { + var connection = window.navigator && (window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection); + var Mbps = connection && (connection.downlink || connection.bandwidth); + return Mbps ? Math.round(Mbps * 1024) : null; + } + + function getOgURL() { + var ogURL = ''; + var ogURLSelector = "meta[property='og:url']"; + var head = document && document.getElementsByTagName('head')[0]; + var ogURLElement = head.querySelector(ogURLSelector); + ogURL = ogURLElement ? ogURLElement.content : null; + return ogURL; + } + + if (browserParams.vw) { + // we've already initialized browserParams, just return it. + return browserParams; + } + + try { + topWindow = global.top; + topScreen = topWindow.screen; + topUrl = topWindowUrl || ''; + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + return browserParams; + } + + browserParams = { + vw: topWindow.innerWidth, + vh: topWindow.innerHeight, + sw: topScreen.width, + sh: topScreen.height, + pu: topUrl, + ce: storage.cookiesAreEnabled(), + dpr: topWindow.devicePixelRatio || 1, + jcsi: JSON.stringify(JCSI), + ogu: getOgURL() + }; + ns = getNetworkSpeed(); + + if (ns) { + browserParams.ns = ns; + } + + 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))); +} + +function _getTradeDeskIDParam(userId) { + var unifiedIdObj = {}; + + if (userId.tdid) { + unifiedIdObj.tdid = userId.tdid; + } + + return unifiedIdObj; +} + +function _getDigiTrustQueryParams(userId) { + var digiTrustId = userId.digitrustid && userId.digitrustid.data; // Verify there is an ID and this user has not opted out + + if (!digiTrustId || digiTrustId.privacy && digiTrustId.privacy.optout) { + return {}; + } + + return { + dt: digiTrustId.id + }; +} +/** + * Serializes the supply chain object according to IAB standards + * @see https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md + * @param {Object} schainObj supply chain object + * @returns {string} + */ + + +function _serializeSupplyChainObj(schainObj) { + var serializedSchain = "".concat(schainObj.ver, ",").concat(schainObj.complete); // order of properties: asi,sid,hp,rid,name,domain + + schainObj.nodes.map(function (node) { + serializedSchain += "!".concat(encodeURIComponent(node['asi'] || ''), ","); + serializedSchain += "".concat(encodeURIComponent(node['sid'] || ''), ","); + serializedSchain += "".concat(encodeURIComponent(node['hp'] || ''), ","); + serializedSchain += "".concat(encodeURIComponent(node['rid'] || ''), ","); + serializedSchain += "".concat(encodeURIComponent(node['name'] || ''), ","); + serializedSchain += "".concat(encodeURIComponent(node['domain'] || '')); + }); + return serializedSchain; +} +/** + * 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; + var id = params.inScreen || params.inScreenPubID || params.inSlot || params.ICV || params.video || params.inVideo; + + if (invalidRequestIds[id]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("[GumGum] Please check the implementation for ".concat(id, " for the placement ").concat(adUnitCode)); + return false; + } + + switch (true) { + case !!params.inScreen: + break; + + case !!params.inScreenPubID: + break; + + case !!params.inSlot: + break; + + case !!params.ICV: + break; + + case !!params.video: + break; + + case !!params.inVideo: + break; + + case !!params.videoPubID: + break; + + default: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("[GumGum] No product selected for the placement ".concat(adUnitCode, ", please check your implementation.")); + return false; + } + + if (params.bidfloor && !(typeof params.bidfloor === 'number' && isFinite(params.bidfloor))) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('[GumGum] bidfloor must be a Number'); + return false; + } + + return true; +} +/** + * Renames vid params from mediatypes.video keys + * @param {Object} attributes + * @returns {Object} + */ + + +function _getVidParams(attributes) { + var mind = attributes.minduration, + maxd = attributes.maxduration, + li = attributes.linearity, + sd = attributes.startdelay, + pt = attributes.placement, + _attributes$protocols = attributes.protocols, + protocols = _attributes$protocols === void 0 ? [] : _attributes$protocols, + _attributes$playerSiz = attributes.playerSize, + playerSize = _attributes$playerSiz === void 0 ? [] : _attributes$playerSiz; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](playerSize); + + var _ref = sizes[0] && sizes[0].split('x'), + _ref2 = _slicedToArray(_ref, 2), + viw = _ref2[0], + vih = _ref2[1]; + + var pr = ''; + + if (protocols.length) { + pr = protocols.join(','); + } + + return { + mind: mind, + maxd: maxd, + li: li, + sd: sd, + pt: pt, + pr: pr, + viw: viw, + vih: vih + }; +} +/** + * Gets bidfloor + * @param {Object} mediaTypes + * @param {Number} bidfloor + * @param {Object} bid + * @returns {Number} floor + */ + + +function _getFloor(mediaTypes, bidfloor, bid) { + var curMediaType = Object.keys(mediaTypes)[0] || 'banner'; + var floor = bidfloor || 0; + + if (typeof bid.getFloor === 'function') { + var floorInfo = bid.getFloor({ + currency: 'USD', + mediaType: curMediaType, + size: '*' + }); + + if (_typeof(floorInfo) === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) { + floor = Math.max(floor, parseFloat(floorInfo.floor)); + } + } + + return floor; +} +/** + * 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, bidderRequest) { + var bids = []; + var gdprConsent = bidderRequest && bidderRequest.gdprConsent; + var uspConsent = bidderRequest && bidderRequest.uspConsent; + var timeout = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout'); + var topWindowUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bidRequest) { + var bidId = bidRequest.bidId, + _bidRequest$mediaType = bidRequest.mediaTypes, + mediaTypes = _bidRequest$mediaType === void 0 ? {} : _bidRequest$mediaType, + _bidRequest$params = bidRequest.params, + params = _bidRequest$params === void 0 ? {} : _bidRequest$params, + schain = bidRequest.schain, + transactionId = bidRequest.transactionId, + _bidRequest$userId = bidRequest.userId, + userId = _bidRequest$userId === void 0 ? {} : _bidRequest$userId; + + var bidFloor = _getFloor(mediaTypes, params.bidfloor, bidRequest); + + var sizes = [1, 1]; + var data = {}; + + if (mediaTypes.banner) { + sizes = mediaTypes.banner.sizes; + } else if (mediaTypes.video) { + sizes = mediaTypes.video.playerSize; + } + + if (pageViewId) { + data.pv = pageViewId; + } + + if (bidFloor) { + data.fp = bidFloor; + } + + if (params.inScreenPubID) { + data.pubId = params.inScreenPubID; + data.pi = 2; + } + + 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; + } + + if (params.videoPubID) { + data = _extends(data, _getVidParams(mediaTypes.video)); + data.pubId = params.videoPubID; + data.pi = 7; + } + + if (params.video) { + data = _extends(data, _getVidParams(mediaTypes.video)); + data.t = params.video; + data.pi = 7; + } + + if (params.inVideo) { + data = _extends(data, _getVidParams(mediaTypes.video)); + data.t = params.inVideo; + data.pi = 6; + } + + if (gdprConsent) { + data.gdprApplies = gdprConsent.gdprApplies ? 1 : 0; + } + + if (data.gdprApplies) { + data.gdprConsent = gdprConsent.consentString; + } + + if (uspConsent) { + data.uspConsent = uspConsent; + } + + if (schain && schain.nodes) { + data.schain = _serializeSupplyChainObj(schain); + } + + bids.push({ + id: bidId, + tmax: timeout, + tId: transactionId, + pi: data.pi, + selector: params.selector, + sizes: sizes, + url: BID_ENDPOINT, + method: 'GET', + data: _extends(data, _getBrowserParams(topWindowUrl), _getDigiTrustQueryParams(userId), _getTradeDeskIDParam(userId)) + }); + }); + + 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; + + if (!serverResponseBody || serverResponseBody.err) { + var _data = bidRequest.data || {}; + + var id = _data.t || _data.si || _data.ni || _data.pubId; + var delayTime = serverResponseBody ? serverResponseBody.err.drt : DELAY_REQUEST_TIME; + invalidRequestIds[id] = { + productId: _data.pi, + timestamp: new Date().getTime() + }; + setTimeout(function () { + !!invalidRequestIds[id] && delete invalidRequestIds[id]; + }, delayTime); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("[GumGum] Please check the implementation for ".concat(id)); + } + + var defaultResponse = { + ad: { + price: 0, + id: 0, + markup: '' + }, + pag: { + pvid: 0 + } + }; + + var _Object$assign = _extends(defaultResponse, serverResponseBody), + _Object$assign$ad = _Object$assign.ad, + cpm = _Object$assign$ad.price, + creativeId = _Object$assign$ad.id, + markup = _Object$assign$ad.markup, + cur = _Object$assign$ad.cur, + wrapper = _Object$assign.cw, + pvid = _Object$assign.pag.pvid, + jcsi = _Object$assign.jcsi; + + var data = bidRequest.data || {}; + var product = data.pi; + var isTestUnit = product === 3 && data.si === 9; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.sizes); + + var _sizes$0$split = sizes[0].split('x'), + _sizes$0$split2 = _slicedToArray(_sizes$0$split, 2), + width = _sizes$0$split2[0], + height = _sizes$0$split2[1]; // return 1x1 when breakout expected + + + if ((product === 2 || product === 5) && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_includes___default()(sizes, '1x1')) { + width = '1'; + height = '1'; + } + + if (jcsi) { + serverResponseBody.jcsi = JCSI; + } // update Page View ID from server response + + + pageViewId = pvid; + + if (creativeId) { + bidResponses.push(_objectSpread(_objectSpread(_objectSpread({}, product === 7 && { + vastXml: markup + }), {}, { + ad: wrapper ? getWrapperCode(wrapper, _extends({}, serverResponseBody, { + bidRequest: bidRequest + })) : markup + }, product === 6 && { + ad: markup + }), {}, { + cpm: isTestUnit ? 0.1 : cpm, + creativeId: creativeId, + currency: cur || 'USD', + height: height, + netRevenue: true, + requestId: bidRequest.id, + ttl: TIME_TO_LIVE, + width: width + })); + } + + 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. + */ + + +function getUserSyncs(syncOptions, serverResponses) { + var responses = serverResponses.map(function (response) { + return response.body && response.body.pxs && response.body.pxs.scr || []; + }); + var userSyncs = responses.reduce(function (usersyncs, response) { + return usersyncs.concat(response); + }, []); + var syncs = userSyncs.map(function (sync) { + return { + type: sync.t === 'f' ? 'iframe' : 'image', + url: sync.u + }; + }); + return syncs; +} + +var spec = { + code: BIDDER_CODE, + aliases: ALIAS_BIDDER_CODE, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs, + supportedMediaTypes: SUPPORTED_MEDIA_TYPES +}; +Object(__WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(33))) + +/***/ }) + +},[436]); \ No newline at end of file diff --git a/build/dist/h12mediaBidAdapter.js b/build/dist/h12mediaBidAdapter.js new file mode 100644 index 00000000000..4cc64f21fe0 --- /dev/null +++ b/build/dist/h12mediaBidAdapter.js @@ -0,0 +1,237 @@ +pbjsChunk([206],{ + +/***/ 438: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(439); + + +/***/ }), + +/***/ 439: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); + + + +var BIDDER_CODE = 'h12media'; +var DEFAULT_URL = 'https://bidder.h12-media.com/prebid/'; +var DEFAULT_CURRENCY = 'USD'; +var DEFAULT_TTL = 360; +var DEFAULT_NET_REVENUE = false; +var spec = { + code: BIDDER_CODE, + aliases: ['h12'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params && bid.params.pubid); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var requestUrl = validBidRequests[0].params.endpointdom || DEFAULT_URL; + var isiframe = !(window.self === window.top || window.frameElement); + var screenSize = getClientDimensions(); + var docSize = getDocumentDimensions(); + var bidrequests = validBidRequests.map(function (bidRequest) { + var bidderParams = bidRequest.params; + var adUnitElement = document.getElementById(bidRequest.adUnitCode); + var ishidden = !isVisible(adUnitElement); + var coords = { + x: adUnitElement && adUnitElement.getBoundingClientRect().x, + y: adUnitElement && adUnitElement.getBoundingClientRect().y + }; + return { + bidId: bidRequest.bidId, + transactionId: bidRequest.transactionId, + adunitId: bidRequest.adUnitCode, + pubid: bidderParams.pubid, + placementid: bidderParams.placementid || '', + size: bidderParams.size || '', + adunitSize: bidRequest.mediaTypes.banner.sizes || [], + coords: coords, + ishidden: ishidden + }; + }); + return { + method: 'POST', + url: requestUrl, + options: { + withCredentials: false + }, + data: { + gdpr: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? Boolean(bidderRequest.gdprConsent.gdprApplies & 1) : false, + gdpr_cs: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? bidderRequest.gdprConsent.consentString : '', + topLevelUrl: window.top.location.href, + refererUrl: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : '', + isiframe: isiframe, + version: "4.2.0", + visitorInfo: { + localTime: getLocalDateFormatted(), + dayOfWeek: new Date().getDay(), + screenWidth: screenSize[0], + screenHeight: screenSize[1], + docWidth: docSize[0], + docHeight: docSize[1], + scrollbarx: window.scrollX, + scrollbary: window.scrollY + }, + bidrequests: bidrequests + } + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequests) { + var bidResponses = []; + + try { + var serverBody = serverResponse.body; + + if (serverBody) { + if (serverBody.bids) { + serverBody.bids.forEach(function (bidBody) { + var bidRequest = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(bidRequests.data.bidrequests, function (bid) { + return bid.bidId === bidBody.bidId; + }); + var bidResponse = { + currency: serverBody.currency || DEFAULT_CURRENCY, + netRevenue: serverBody.netRevenue || DEFAULT_NET_REVENUE, + ttl: serverBody.ttl || DEFAULT_TTL, + requestId: bidBody.bidId, + cpm: bidBody.cpm, + width: bidBody.width, + height: bidBody.height, + creativeId: bidBody.creativeId, + ad: bidBody.ad, + meta: bidBody.meta, + mediaType: 'banner' + }; + + if (bidRequest) { + bidResponse.pubid = bidRequest.pubid; + bidResponse.placementid = bidRequest.placementid; + bidResponse.size = bidRequest.size; + } + + bidResponses.push(bidResponse); + }); + } + } + + return bidResponses; + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](err); + } + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent) { + var serverBody = serverResponses[0].body; + var syncs = []; + gdprConsent = gdprConsent || { + gdprApplies: false, + consentString: '' + }; + + if (serverBody) { + if (serverBody.bids) { + serverBody.bids.forEach(function (bidBody) { + var userSyncUrls = bidBody.usersync || []; + + var userSyncUrlProcess = function userSyncUrlProcess(url) { + return url.replace('{gdpr}', gdprConsent.gdprApplies).replace('{gdpr_cs}', gdprConsent.consentString); + }; + + userSyncUrls.forEach(function (sync) { + if (syncOptions.iframeEnabled && sync.type === 'iframe' && sync.url) { + syncs.push({ + type: 'iframe', + url: userSyncUrlProcess(sync.url) + }); + } + + if (syncOptions.pixelEnabled && sync.type === 'image' && sync.url) { + syncs.push({ + type: 'image', + url: userSyncUrlProcess(sync.url) + }); + } + }); + }); + } + } + + return syncs; + } +}; + +function getContext(elem) { + return elem && window.document.body.contains(elem) ? window : window.top.document.body.contains(elem) ? top : undefined; +} + +function isDefined(val) { + return val !== null && typeof val !== 'undefined'; +} + +function getIsHidden(elem) { + var lastElem = elem; + var elemHidden = false; + var m; + m = 0; + + do { + m = m + 1; + + try { + if (getContext(elem).getComputedStyle(lastElem).getPropertyValue('display') === 'none' || getContext(elem).getComputedStyle(lastElem).getPropertyValue('visibility') === 'hidden') { + return true; + } else { + elemHidden = false; + lastElem = lastElem.parentElement; + } + } catch (o) { + return false; + } + } while (m < 250 && lastElem != null && elemHidden === false); + + return elemHidden; +} + +function isVisible(element) { + return element && isDefined(getContext(element)) && !getIsHidden(element); +} + +function getClientDimensions() { + try { + var t = window.top.innerWidth || window.top.document.documentElement.clientWidth || window.top.document.body.clientWidth; + var e = window.top.innerHeight || window.top.document.documentElement.clientHeight || window.top.document.body.clientHeight; + return [Math.round(t), Math.round(e)]; + } catch (i) { + return [0, 0]; + } +} + +function getDocumentDimensions() { + try { + var D = window.top.document; + return [D.body.offsetWidth, Math.max(D.body.scrollHeight, D.documentElement.scrollHeight, D.body.offsetHeight, D.documentElement.offsetHeight, D.body.clientHeight, D.documentElement.clientHeight)]; + } catch (t) { + return [-1, -1]; + } +} + +function getLocalDateFormatted() { + var two = function two(num) { + return ('0' + num).slice(-2); + }; + + var d = new Date(); + return "".concat(d.getFullYear(), "-").concat(two(d.getMonth() + 1), "-").concat(two(d.getDate()), " ").concat(two(d.getHours()), ":").concat(two(d.getMinutes()), ":").concat(two(d.getSeconds())); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[438]); \ No newline at end of file diff --git a/build/dist/hpmdnetworkBidAdapter.js b/build/dist/hpmdnetworkBidAdapter.js new file mode 100644 index 00000000000..e907a434dd1 --- /dev/null +++ b/build/dist/hpmdnetworkBidAdapter.js @@ -0,0 +1,115 @@ +pbjsChunk([205],{ + +/***/ 440: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(441); + + +/***/ }), + +/***/ 441: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); + + +var BIDDER_CODE = 'hpmdnetwork'; +var BIDDER_CODE_ALIAS = 'hpmd'; +var HPMDNETWORK_HOST = 'https://banner.hpmdnetwork.ru/bidder/request'; +var DEFAULT_TTL = 300; +var DEFAULT_CURRENCY = 'RUB'; +var spec = { + code: BIDDER_CODE, + aliases: [BIDDER_CODE_ALIAS], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse +}; + +function isBidRequestValid(bid) { + var placementId = bid.params.placementId; + return !!placementId; +} + +function buildRequests(validBidRequests, bidderRequest) { + var payload = {}; + payload.places = []; + validBidRequests.forEach(function (bidRequest) { + var place = { + id: bidRequest.bidId, + placementId: bidRequest.params.placementId + '' + }; + payload.places.push(place); + }); + payload.url = bidderRequest.refererInfo.referer; + payload.settings = { + currency: DEFAULT_CURRENCY + }; + return { + method: 'POST', + url: HPMDNETWORK_HOST, + data: payload + }; +} + +function interpretResponse(serverResponse) { + var body = serverResponse.body; + var bidResponses = []; + + if (body.bids) { + body.bids.forEach(function (bid) { + var size = getCreativeSize(bid); + var bidResponse = { + requestId: bid.id, + cpm: bid.cpm, + ad: wrapDisplayUrl(bid.displayUrl), + width: size.width, + height: size.height, + creativeId: bid.creativeId || generateRandomInt(), + currency: bid.currency || DEFAULT_CURRENCY, + netRevenue: true, + ttl: bid.ttl || DEFAULT_TTL + }; + bidResponses.push(bidResponse); + }); + } + + return bidResponses; +} + +function wrapDisplayUrl(displayUrl) { + return ""); +} + +function getCreativeSize(creativeSize) { + var size = { + width: 1, + height: 1 + }; + + if (!!creativeSize.width && creativeSize.width !== -1) { + size.width = creativeSize.width; + } + + if (!!creativeSize.height && creativeSize.height !== -1) { + size.height = creativeSize.height; + } + + return size; +} + +function generateRandomInt() { + return Math.random().toString(16).substring(2); +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[440]); \ No newline at end of file diff --git a/build/dist/hybridBidAdapter.js b/build/dist/hybridBidAdapter.js new file mode 100644 index 00000000000..0f3e67e2801 --- /dev/null +++ b/build/dist/hybridBidAdapter.js @@ -0,0 +1,209 @@ +pbjsChunk([204],{ + +/***/ 442: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(443); + + +/***/ }), + +/***/ 443: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__); + + + + + + +var BIDDER_CODE = 'hybrid'; +var DSP_ENDPOINT = 'https://hbe198.hybrid.ai/prebidhb'; +var TRAFFIC_TYPE_WEB = 1; +var PLACEMENT_TYPE_BANNER = 1; +var PLACEMENT_TYPE_VIDEO = 2; +var TTL = 60; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; +var placementTypes = { + 'banner': PLACEMENT_TYPE_BANNER, + 'video': PLACEMENT_TYPE_VIDEO +}; + +function buildBidRequests(validBidRequests) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](validBidRequests, function (validBidRequest) { + var params = validBidRequest.params; + var bidRequest = { + bidId: validBidRequest.bidId, + transactionId: validBidRequest.transactionId, + sizes: validBidRequest.sizes, + placement: placementTypes[params.placement], + placeId: params.placeId + }; + return bidRequest; + }); +} + +var outstreamRender = function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + sizes: [bid.width, bid.height], + targetId: bid.adUnitCode, + rendererOptions: { + showBigPlayButton: false, + showProgressBar: 'bar', + showVolume: false, + allowFullscreen: true, + skippable: false, + content: bid.vastXml + } + }); + }); +}; + +var createRenderer = function createRenderer(bid) { + var renderer = __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__["a" /* Renderer */].install({ + targetId: bid.adUnitCode, + url: RENDERER_URL, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +}; + +function buildBid(bidData) { + var bid = { + requestId: bidData.bidId, + cpm: bidData.price, + width: bidData.width, + height: bidData.height, + creativeId: bidData.bidId, + currency: bidData.currency, + netRevenue: true, + ttl: TTL + }; + + if (bidData.placement === PLACEMENT_TYPE_VIDEO) { + bid.vastXml = bidData.content; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + var adUnit = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(__WEBPACK_IMPORTED_MODULE_2__src_auctionManager_js__["a" /* auctionManager */].getAdUnits(), function (unit) { + return unit.transactionId === bidData.transactionId; + }); + + if (adUnit) { + bid.width = adUnit.mediaTypes.video.playerSize[0][0]; + bid.height = adUnit.mediaTypes.video.playerSize[0][1]; + + if (adUnit.mediaTypes.video.context === 'outstream') { + bid.renderer = createRenderer(bid); + } + } + } else { + bid.ad = bidData.content; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + } + + return bid; +} + +function getMediaTypeFromBid(bid) { + return bid.mediaTypes && Object.keys(bid.mediaTypes)[0]; +} + +function hasVideoMandatoryParams(mediaTypes) { + var isHasVideoContext = !!mediaTypes.video && (mediaTypes.video.context === 'instream' || mediaTypes.video.context === 'outstream'); + var isPlayerSize = !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](mediaTypes, 'video.playerSize') && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](mediaTypes, 'video.playerSize')); + return isHasVideoContext && isPlayerSize; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + placementTypes: placementTypes, + + /** + * 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.placeId && !!bid.params.placement && (getMediaTypeFromBid(bid) === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */] && bid.params.placement === 'banner' || getMediaTypeFromBid(bid) === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */] && bid.params.placement === 'video' && hasVideoMandatoryParams(bid.mediaTypes)); + }, + + /** + * 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 payload = { + url: bidderRequest.refererInfo.referer, + cmp: !!bidderRequest.gdprConsent, + trafficType: TRAFFIC_TYPE_WEB, + bidRequests: buildBidRequests(validBidRequests) + }; + + if (payload.cmp) { + var gdprApplies = bidderRequest.gdprConsent.gdprApplies; + if (gdprApplies !== undefined) payload['ga'] = gdprApplies; + payload['cs'] = bidderRequest.gdprConsent.consentString; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: DSP_ENDPOINT, + data: payloadString, + options: { + contentType: 'application/json' + } + }; + }, + + /** + * 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 bidRequests = JSON.parse(bidRequest.data).bidRequests; + var serverBody = serverResponse.body; + + if (serverBody && serverBody.bids && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverBody.bids)) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](serverBody.bids, function (bid) { + var rawBid = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(bidRequests, function (item) { + return item.bidId === bid.bidId; + }); + bid.placement = rawBid.placement; + bid.transactionId = rawBid.transactionId; + bid.placeId = rawBid.placeId; + return buildBid(bid); + }); + } else { + return []; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[442]); \ No newline at end of file diff --git a/build/dist/iasBidAdapter.js b/build/dist/iasBidAdapter.js new file mode 100644 index 00000000000..06d5070220a --- /dev/null +++ b/build/dist/iasBidAdapter.js @@ -0,0 +1,158 @@ +pbjsChunk([203],{ + +/***/ 444: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(445); + + +/***/ }), + +/***/ 445: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + +var BIDDER_CODE = 'ias'; +var otherBidIds = []; + +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 (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 = 'https://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()]); + queries.push(['url', encodeURIComponent(window.location.href)]); + var queryString = encodeURI(queries.map(function (qs) { + return qs.join('='); + }).join('&')); + bidRequests.forEach(function (request) { + if (bidRequests[0].bidId != request.bidId) { + otherBidIds.push(request.bidId); + } + }); + return { + method: 'GET', + url: IAS_HOST, + data: queryString, + bidRequest: bidRequests[0] + }; +} + +function getPageLevelKeywords(response) { + var result = {}; + shallowMerge(result, response.brandSafety); + result.fr = response.fr; + result.custom = response.custom; + return result; +} + +function shallowMerge(dest, src) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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); + otherBidIds.forEach(function (bidId) { + var otherResponse = _extends({}, commonBidResponse); + + otherResponse.requestId = bidId; + bidResponses.push(otherResponse); + }); + return bidResponses; +} + +var spec = { + code: BIDDER_CODE, + aliases: [], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[444]); \ No newline at end of file diff --git a/build/dist/id5IdSystem.js b/build/dist/id5IdSystem.js new file mode 100644 index 00000000000..13d24f7cd85 --- /dev/null +++ b/build/dist/id5IdSystem.js @@ -0,0 +1,197 @@ +pbjsChunk([202],{ + +/***/ 446: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(447); + + +/***/ }), + +/***/ 447: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "id5IdSubmodule", function() { return id5IdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_refererDetection_js__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +/** + * This module adds ID5 to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/id5IdSystem + * @requires module:modules/userId + */ + + + + + +var MODULE_NAME = 'id5Id'; +var GVLID = 131; +var BASE_NB_COOKIE_NAME = 'id5id.1st'; +var NB_COOKIE_EXP_DAYS = 30 * 24 * 60 * 60 * 1000; // 30 days + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(GVLID, MODULE_NAME); +/** @type {Submodule} */ + +var id5IdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: 'id5Id', + + /** + * Vendor id of ID5 + * @type {Number} + */ + gvlid: GVLID, + + /** + * decode the stored id value for passing to bid requests + * @function decode + * @param {(Object|string)} value + * @returns {(Object|undefined)} + */ + decode: function decode(value) { + if (value && typeof value.ID5ID === 'string') { + // don't lose our legacy value from cache + return { + 'id5id': value.ID5ID + }; + } else if (value && typeof value.universal_uid === 'string') { + return { + 'id5id': value.universal_uid + }; + } else { + return undefined; + } + }, + + /** + * performs action to obtain id and return a value in the callback's response argument + * @function getId + * @param {SubmoduleParams} [configParams] + * @param {ConsentData} [consentData] + * @param {(Object|undefined)} cacheIdObj + * @returns {IdResponse|undefined} + */ + getId: function getId(configParams, consentData, cacheIdObj) { + if (!hasRequiredParams(configParams)) { + return undefined; + } + + var hasGdpr = consentData && typeof consentData.gdprApplies === 'boolean' && consentData.gdprApplies ? 1 : 0; + var gdprConsentString = hasGdpr ? consentData.consentString : ''; + var url = "https://id5-sync.com/g/v2/".concat(configParams.partner, ".json?gdpr_consent=").concat(gdprConsentString, "&gdpr=").concat(hasGdpr); + var referer = Object(__WEBPACK_IMPORTED_MODULE_3__src_refererDetection_js__["a" /* getRefererInfo */])(); + var signature = cacheIdObj && cacheIdObj.signature ? cacheIdObj.signature : ''; + var pubId = cacheIdObj && cacheIdObj.ID5ID ? cacheIdObj.ID5ID : ''; // TODO: remove when 1puid isn't needed + + var data = { + 'partner': configParams.partner, + '1puid': pubId, + // TODO: remove when 1puid isn't needed + 'nbPage': incrementNb(configParams), + 'o': 'pbjs', + 'pd': configParams.pd || '', + 'rf': referer.referer, + 's': signature, + 'top': referer.reachedTop ? 1 : 0, + 'u': referer.stack[0] || window.location.href, + 'v': "4.2.0" + }; + + var resp = function resp(callback) { + var callbacks = { + success: function success(response) { + var responseObj; + + if (response) { + try { + responseObj = JSON.parse(response); + resetNb(configParams); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + } + + callback(responseObj); + }, + error: function error(_error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("id5Id: ID fetch encountered an error", _error); + callback(); + } + }; + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(url, callbacks, JSON.stringify(data), { + method: 'POST', + withCredentials: true + }); + }; + + return { + callback: resp + }; + }, + + /** + * Similar to Submodule#getId, this optional method returns response to for id that exists already. + * If IdResponse#id is defined, then it will be written to the current active storage even if it exists already. + * If IdResponse#callback is defined, then it'll called at the end of auction. + * It's permissible to return neither, one, or both fields. + * @function extendId + * @param {SubmoduleParams} configParams + * @param {Object} cacheIdObj - existing id, if any + * @return {(IdResponse|function(callback:function))} A response object that contains id and/or callback. + */ + extendId: function extendId(configParams, cacheIdObj) { + incrementNb(configParams); + return cacheIdObj; + } +}; + +function hasRequiredParams(configParams) { + if (!configParams || typeof configParams.partner !== 'number') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("User ID - ID5 submodule requires partner to be defined as a number"); + return false; + } + + return true; +} + +function nbCookieName(configParams) { + return hasRequiredParams(configParams) ? "".concat(BASE_NB_COOKIE_NAME, "_").concat(configParams.partner, "_nb") : undefined; +} + +function nbCookieExpStr(expDays) { + return new Date(Date.now() + expDays).toUTCString(); +} + +function storeNbInCookie(configParams, nb) { + storage.setCookie(nbCookieName(configParams), nb, nbCookieExpStr(NB_COOKIE_EXP_DAYS), 'Lax'); +} + +function getNbFromCookie(configParams) { + var cacheNb = storage.getCookie(nbCookieName(configParams)); + return cacheNb ? parseInt(cacheNb) : 0; +} + +function incrementNb(configParams) { + var nb = getNbFromCookie(configParams) + 1; + storeNbInCookie(configParams, nb); + return nb; +} + +function resetNb(configParams) { + storeNbInCookie(configParams, 0); +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', id5IdSubmodule); + +/***/ }) + +},[446]); \ No newline at end of file diff --git a/build/dist/identityLinkIdSystem.js b/build/dist/identityLinkIdSystem.js new file mode 100644 index 00000000000..e94072cde5b --- /dev/null +++ b/build/dist/identityLinkIdSystem.js @@ -0,0 +1,124 @@ +pbjsChunk([201],{ + +/***/ 448: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(449); + + +/***/ }), + +/***/ 449: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identityLinkSubmodule", function() { return identityLinkSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/** + * This module adds IdentityLink to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/identityLinkSubmodule + * @requires module:modules/userId + */ + + + +/** @type {Submodule} */ + +var identityLinkSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: 'identityLink', + + /** + * decode the stored id value for passing to bid requests + * @function + * @param {string} value + * @returns {{idl_env:string}} + */ + decode: function decode(value) { + return { + 'idl_env': value + }; + }, + + /** + * performs action to obtain id and return a value in the callback's response argument + * @function + * @param {ConsentData} [consentData] + * @param {SubmoduleParams} [configParams] + * @returns {IdResponse|undefined} + */ + getId: function getId(configParams, consentData) { + if (!configParams || typeof configParams.pid !== 'string') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('identityLink submodule requires partner id to be defined'); + return; + } + + var hasGdpr = consentData && typeof consentData.gdprApplies === 'boolean' && consentData.gdprApplies ? 1 : 0; + var gdprConsentString = hasGdpr ? consentData.consentString : ''; // use protocol relative urls for http or https + + var url = "https://api.rlcdn.com/api/identity/envelope?pid=".concat(configParams.pid).concat(hasGdpr ? '&ct=1&cv=' + gdprConsentString : ''); + var resp; + + resp = function resp(callback) { + // Check ats during callback so it has a chance to initialise. + // If ats library is available, use it to retrieve envelope. If not use standard third party endpoint + if (window.ats) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('ATS exists!'); + window.ats.retrieveEnvelope(function (envelope) { + if (envelope) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('An envelope can be retrieved from ATS!'); + callback(JSON.parse(envelope).envelope); + } else { + getEnvelope(url, callback); + } + }); + } else { + getEnvelope(url, callback); + } + }; + + return { + callback: resp + }; + } +}; // return envelope from third party endpoint + +function getEnvelope(url, callback) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('A 3P retrieval is attempted!'); + var callbacks = { + success: function success(response) { + var responseObj; + + if (response) { + try { + responseObj = JSON.parse(response); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"](error); + } + } + + callback(responseObj && responseObj.envelope ? responseObj.envelope : ''); + }, + error: function error(_error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("identityLink: ID fetch encountered an error", _error); + callback(); + } + }; + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(url, callbacks, undefined, { + method: 'GET', + withCredentials: true + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', identityLinkSubmodule); + +/***/ }) + +},[448]); \ No newline at end of file diff --git a/build/dist/imonomyBidAdapter.js b/build/dist/imonomyBidAdapter.js new file mode 100644 index 00000000000..b78d08ce605 --- /dev/null +++ b/build/dist/imonomyBidAdapter.js @@ -0,0 +1,172 @@ +pbjsChunk([200],{ + +/***/ 450: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(451); + + +/***/ }), + +/***/ 451: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + +var BIDDER_CODE = 'imonomy'; +var ENDPOINT = 'https://b.imonomy.com/openrtb/hb/00000'; +var USYNCURL = 'https://b.imonomy.com/UserMatching/b/'; +var 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 {BidRequest[]} 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; + }); // Imonomy 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 (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](tags)) { + payload = { + bids: _toConsumableArray(tags), + kbConf: kbConf + }; + } + + var endpointToUse = ENDPOINT; + + if (kbConf.hdbdid) { + endpointToUse = endpointToUse.replace('00000', kbConf.hdbdid); + } + + return { + method: 'POST', + url: endpointToUse, + 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) { + var bidResponses = []; + + if (response && response.body && response.body.bids) { + response.body.bids.forEach(function (bid) { + // The bid ID. Used to tie this bid back to the request. + if (bid.uuid) { + bid.requestId = bid.uuid; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('No uuid for bid'); + } // The creative payload of the returned bid. + + + if (bid.creative) { + bid.ad = bid.creative; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('No creative for bid'); + } + + bidResponses.push(bid); + }); + } + + 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); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[450]); \ No newline at end of file diff --git a/build/dist/improvedigitalBidAdapter.js b/build/dist/improvedigitalBidAdapter.js new file mode 100644 index 00000000000..94712d68f54 --- /dev/null +++ b/build/dist/improvedigitalBidAdapter.js @@ -0,0 +1,735 @@ +pbjsChunk([199],{ + +/***/ 452: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(453); + + +/***/ }), + +/***/ 453: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["ImproveDigitalAdServerJSClient"] = ImproveDigitalAdServerJSClient; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__ = __webpack_require__(11); + + + + + +var BIDDER_CODE = 'improvedigital'; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; +var spec = { + version: '7.1.0', + code: BIDDER_CODE, + gvlid: 253, + aliases: ['id'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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 && 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, bidderRequest) { + var normalizedBids = bidRequests.map(function (bidRequest) { + return getNormalizedBidRequest(bidRequest); + }); + var idClient = new ImproveDigitalAdServerJSClient('hb'); + var requestParameters = { + singleRequestMode: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('improvedigital.singleRequest') === true, + returnObjType: idClient.CONSTANTS.RETURN_OBJ_TYPE.URL_PARAMS_SPLIT, + libVersion: this.version + }; + + if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.consentString) { + requestParameters.gdpr = bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest && bidderRequest.uspConsent) { + requestParameters.usPrivacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + requestParameters.referrer = bidderRequest.refererInfo.referer; + } + + requestParameters.schain = bidRequests[0].schain; + var requestObj = idClient.createRequest(normalizedBids, // requestObject + requestParameters); + + if (requestObj.errors && requestObj.errors.length > 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ID WARNING 0x01'); + } + + requestObj.requests.forEach(function (request) { + return request.bidderRequest = bidderRequest; + }); + 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, _ref) { + var bidderRequest = _ref.bidderRequest; + var bids = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body.bid, function (bidObject) { + if (!bidObject.price || bidObject.price === null || bidObject.hasOwnProperty('errorCode') || !bidObject.adm && !bidObject.native) { + return; + } + + var bidRequest = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidRequest"](bidObject.id, [bidderRequest]); + var bid = {}; + + if (bidObject.native) { + // Native + bid.native = getNormalizedNativeAd(bidObject.native); // Expose raw oRTB response to the client to allow parsing assets not directly supported by Prebid + + bid.ortbNative = bidObject.native; + + if (bidObject.nurl) { + bid.native.impressionTrackers.unshift(bidObject.nurl); + } + + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]; + } else if (bidObject.ad_type && bidObject.ad_type === 'video') { + bid.vastXml = bidObject.adm; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + + if (isOutstreamVideo(bidRequest)) { + bid.adResponse = { + content: bid.vastXml, + height: bidObject.h, + width: bidObject.w + }; + bid.renderer = createRenderer(bidRequest); + } + } else { + // Banner + var nurl = ''; + + if (bidObject.nurl && bidObject.nurl.length > 0) { + nurl = ""); + } + + bid.ad = "".concat(nurl, ""); + bid.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + } // Common properties + + + bid.adId = bidObject.id; + bid.cpm = parseFloat(bidObject.price); + bid.creativeId = bidObject.crid; + bid.currency = bidObject.currency ? bidObject.currency.toUpperCase() : 'USD'; // Deal ID. Composite ads can have multiple line items and the ID of the first + // dealID line item will be used. + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bidObject.lid) && bidObject.buying_type && bidObject.buying_type !== 'rtb') { + bid.dealId = bidObject.lid; + } else if (Array.isArray(bidObject.lid) && Array.isArray(bidObject.buying_type) && bidObject.lid.length === bidObject.buying_type.length) { + var isDeal = false; + bidObject.buying_type.forEach(function (bt, i) { + if (isDeal) return; + + if (bt && bt !== 'rtb') { + isDeal = true; + bid.dealId = bidObject.lid[i]; + } + }); + } + + bid.height = bidObject.h; + bid.netRevenue = bidObject.isNet ? bidObject.isNet : false; + bid.requestId = bidObject.id; + bid.ttl = 300; + bid.width = bidObject.w; + + if (!bid.width || !bid.height) { + bid.width = 1; + bid.height = 1; + } + + bids.push(bid); + }); + + return bids; + }, + + /** + * 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) { + if (syncOptions.pixelEnabled) { + var syncs = []; + serverResponses.forEach(function (response) { + response.body.bid.forEach(function (bidObject) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidObject.sync)) { + bidObject.sync.forEach(function (syncElement) { + if (syncs.indexOf(syncElement) === -1) { + syncs.push(syncElement); + } + }); + } + }); + }); + return syncs.map(function (sync) { + return { + type: 'image', + url: sync + }; + }); + } + + return []; + } +}; + +function isInstreamVideo(bid) { + var mediaTypes = Object.keys(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes', {})); + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + return bid.mediaType === 'video' || mediaTypes.length === 1 && videoMediaType && context !== 'outstream'; +} + +function isOutstreamVideo(bid) { + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + return videoMediaType && context === 'outstream'; +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + sizes: [bid.width, bid.height], + targetId: bid.adUnitCode, + adResponse: bid.adResponse, + rendererOptions: bid.renderer.getConfig() + }, handleOutstreamRendererEvents.bind(null, bid)); + }); +} + +function handleOutstreamRendererEvents(bid, id, eventName) { + bid.renderer.handleVideoEvent({ + id: id, + eventName: eventName + }); +} + +function createRenderer(bidRequest) { + var renderer = __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__["a" /* Renderer */].install({ + id: bidRequest.adUnitCode, + url: RENDERER_URL, + loaded: false, + config: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'renderer.options'), + adUnitCode: bidRequest.adUnitCode + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function getNormalizedBidRequest(bid) { + var adUnitId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('adUnitCode', bid) || null; + var placementId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('placementId', bid.params) || null; + var publisherId = null; + var placementKey = null; + + if (placementId === null) { + publisherId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('publisherId', bid.params) || null; + placementKey = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('placementKey', bid.params) || null; + } + + var keyValues = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('keyValues', bid.params) || null; + var singleSizeFilter = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('size', bid.params) || null; + var bidId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidId', bid); + var transactionId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('transactionId', bid); + var currency = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); + var bidFloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidFloor', bid.params); + var bidFloorCur = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidFloorCur', bid.params); + var normalizedBidRequest = {}; + + if (isInstreamVideo(bid)) { + normalizedBidRequest.adTypes = [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]]; + } + + if (placementId) { + normalizedBidRequest.placementId = placementId; + } else { + if (publisherId) { + normalizedBidRequest.publisherId = publisherId; + } + + if (placementKey) { + normalizedBidRequest.placementKey = placementKey; + } + } + + if (keyValues) { + normalizedBidRequest.keyValues = keyValues; + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('improvedigital.usePrebidSizes') === true && !isInstreamVideo(bid) && !isOutstreamVideo(bid) && bid.sizes && bid.sizes.length > 0) { + normalizedBidRequest.format = bid.sizes; + } else if (singleSizeFilter && singleSizeFilter.w && singleSizeFilter.h) { + normalizedBidRequest.size = {}; + normalizedBidRequest.size.h = singleSizeFilter.h; + normalizedBidRequest.size.w = singleSizeFilter.w; + } + + if (bidId) { + normalizedBidRequest.id = bidId; + } + + if (adUnitId) { + normalizedBidRequest.adUnitId = adUnitId; + } + + if (transactionId) { + normalizedBidRequest.transactionId = transactionId; + } + + if (currency) { + normalizedBidRequest.currency = currency; + } + + if (bidFloor) { + normalizedBidRequest.bidFloor = bidFloor; + normalizedBidRequest.bidFloorCur = bidFloorCur ? bidFloorCur.toUpperCase() : 'USD'; + } + + return normalizedBidRequest; +} + +function getNormalizedNativeAd(rawNative) { + var native = {}; + + if (!rawNative || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](rawNative.assets)) { + return null; + } // Assets + + + rawNative.assets.forEach(function (asset) { + if (asset.title) { + native.title = asset.title.text; + } else if (asset.data) { + switch (asset.data.type) { + case 1: + native.sponsoredBy = asset.data.value; + break; + + case 2: + native.body = asset.data.value; + break; + + case 3: + native.rating = asset.data.value; + break; + + case 4: + native.likes = asset.data.value; + break; + + case 5: + native.downloads = asset.data.value; + break; + + case 6: + native.price = asset.data.value; + break; + + case 7: + native.salePrice = asset.data.value; + break; + + case 8: + native.phone = asset.data.value; + break; + + case 9: + native.address = asset.data.value; + break; + + case 10: + native.body2 = asset.data.value; + break; + + case 11: + native.displayUrl = asset.data.value; + break; + + case 12: + native.cta = asset.data.value; + break; + } + } else if (asset.img) { + switch (asset.img.type) { + case 2: + native.icon = { + url: asset.img.url, + width: asset.img.w, + height: asset.img.h + }; + break; + + case 3: + native.image = { + url: asset.img.url, + width: asset.img.w, + height: asset.img.h + }; + break; + } + } + }); // Trackers + + if (rawNative.eventtrackers) { + native.impressionTrackers = []; + rawNative.eventtrackers.forEach(function (tracker) { + // Only handle impression event. Viewability events are not supported yet. + if (tracker.event !== 1) return; + + switch (tracker.method) { + case 1: + // img + native.impressionTrackers.push(tracker.url); + break; + + case 2: + // js + // javascriptTrackers is a string. If there's more than one JS tracker in bid response, the last script will be used. + native.javascriptTrackers = ""); + break; + } + }); + } else { + native.impressionTrackers = rawNative.imptrackers || []; + native.javascriptTrackers = rawNative.jstracker; + } + + if (rawNative.link) { + native.clickUrl = rawNative.link.url; + native.clickTrackers = rawNative.link.clicktrackers; + } + + if (rawNative.privacy) { + native.privacyLink = rawNative.privacy; + } + + return native; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); +function ImproveDigitalAdServerJSClient(endPoint) { + this.CONSTANTS = { + AD_SERVER_BASE_URL: 'ice.360yield.com', + END_POINT: endPoint || 'hb', + AD_SERVER_URL_PARAM: 'jsonp=', + CLIENT_VERSION: 'JS-6.3.0', + MAX_URL_LENGTH: 2083, + ERROR_CODES: { + MISSING_PLACEMENT_PARAMS: 2, + LIB_VERSION_MISSING: 3 + }, + RETURN_OBJ_TYPE: { + DEFAULT: 0, + URL_PARAMS_SPLIT: 1 + } + }; + + this.getErrorReturn = function (errorCode) { + return { + idMappings: {}, + requests: {}, + 'errorCode': errorCode + }; + }; + + this.createRequest = function (requestObject, requestParameters, extraRequestParameters) { + if (!requestParameters.libVersion) { + return this.getErrorReturn(this.CONSTANTS.ERROR_CODES.LIB_VERSION_MISSING); + } + + requestParameters.returnObjType = requestParameters.returnObjType || this.CONSTANTS.RETURN_OBJ_TYPE.DEFAULT; + requestParameters.adServerBaseUrl = 'https://' + (requestParameters.adServerBaseUrl || this.CONSTANTS.AD_SERVER_BASE_URL); + var impressionObjects = []; + var impressionObject; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestObject)) { + for (var 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.URL_PARAMS_SPLIT) { + returnIdMappings = false; + } + + var returnObject = {}; + returnObject.requests = []; + + if (returnIdMappings) { + returnObject.idMappings = []; + } + + var errors = null; + var baseUrl = "".concat(requestParameters.adServerBaseUrl, "/").concat(this.CONSTANTS.END_POINT, "?").concat(this.CONSTANTS.AD_SERVER_URL_PARAM); + var bidRequestObject = { + bid_request: this.createBasicBidRequestObject(requestParameters, extraRequestParameters) + }; + + for (var _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.URL_PARAMS_SPLIT: + return { + method: 'GET', + url: "".concat(requestParameters.adServerBaseUrl, "/").concat(this.CONSTANTS.END_POINT), + data: "".concat(this.CONSTANTS.AD_SERVER_URL_PARAM).concat(encodeURIComponent(JSON.stringify(bidRequestObject))) + }; + + default: + var baseUrl = "".concat(requestParameters.adServerBaseUrl, "/") + "".concat(this.CONSTANTS.END_POINT, "?").concat(this.CONSTANTS.AD_SERVER_URL_PARAM); + return { + url: baseUrl + encodeURIComponent(JSON.stringify(bidRequestObject)) + }; + } + }; + + this.createBasicBidRequestObject = function (requestParameters, extraRequestParameters) { + var impressionBidRequestObject = {}; + impressionBidRequestObject.secure = 1; + + if (requestParameters.requestId) { + impressionBidRequestObject.id = requestParameters.requestId; + } else { + impressionBidRequestObject.id = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 (requestParameters.libVersion) { + impressionBidRequestObject.version = requestParameters.libVersion + '-' + this.CONSTANTS.CLIENT_VERSION; + } + + if (requestParameters.referrer) { + impressionBidRequestObject.referrer = requestParameters.referrer; + } + + if (requestParameters.gdpr || requestParameters.gdpr === 0) { + impressionBidRequestObject.gdpr = requestParameters.gdpr; + } + + if (requestParameters.usPrivacy) { + impressionBidRequestObject.us_privacy = requestParameters.usPrivacy; + } + + if (requestParameters.schain) { + impressionBidRequestObject.schain = requestParameters.schain; + } + + 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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](); + } + + if (placementObject.adTypes) { + impressionObject.ad_types = placementObject.adTypes; + } + + if (placementObject.adUnitId) { + outputObject.adUnitId = placementObject.adUnitId; + } + + if (placementObject.currency) { + impressionObject.currency = placementObject.currency.toUpperCase(); + } + + if (placementObject.bidFloor) { + impressionObject.bidfloor = placementObject.bidFloor; + } + + if (placementObject.bidFloorCur) { + impressionObject.bidfloorcur = placementObject.bidFloorCur.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]); + } + } + } + + impressionObject.banner = {}; + + if (placementObject.size && placementObject.size.w && placementObject.size.h) { + impressionObject.banner.w = placementObject.size.w; + impressionObject.banner.h = placementObject.size.h; + } // Set of desired creative sizes + // Input Format: array of pairs, i.e. [[300, 250], [250, 250]] + + + if (placementObject.format && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](placementObject.format)) { + var format = placementObject.format.filter(function (sizePair) { + return sizePair.length === 2 && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isInteger"](sizePair[0]) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isInteger"](sizePair[1]) && sizePair[0] >= 0 && sizePair[1] >= 0; + }).map(function (sizePair) { + return { + w: sizePair[0], + h: sizePair[1] + }; + }); + + if (format.length > 0) { + impressionObject.banner.format = format; + } + } + + 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; + }; +} + +/***/ }) + +},[452]); \ No newline at end of file diff --git a/build/dist/innityBidAdapter.js b/build/dist/innityBidAdapter.js new file mode 100644 index 00000000000..b891c3b02a0 --- /dev/null +++ b/build/dist/innityBidAdapter.js @@ -0,0 +1,80 @@ +pbjsChunk([198],{ + +/***/ 454: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(455); + + +/***/ }), + +/***/ 455: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'innity'; +var ENDPOINT = 'https://as.innity.com/synd/'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params && bid.params.pub && bid.params.zone); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var refererInfo = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + refererInfo = bidderRequest.refererInfo.referer || ''; + } + + return validBidRequests.map(function (bidRequest) { + var parseSized = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.sizes); + var arrSize = parseSized[0].split('x'); + return { + method: 'GET', + url: ENDPOINT, + data: { + cb: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"](), + ver: 2, + hb: 1, + output: 'js', + pub: bidRequest.params.pub, + zone: bidRequest.params.zone, + url: encodeURIComponent(refererInfo), + 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: '' + res.tag + }; + return [bidResponse]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[454]); \ No newline at end of file diff --git a/build/dist/inskinBidAdapter.js b/build/dist/inskinBidAdapter.js new file mode 100644 index 00000000000..fd5ee02de6b --- /dev/null +++ b/build/dist/inskinBidAdapter.js @@ -0,0 +1,366 @@ +pbjsChunk([197],{ + +/***/ 456: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(457); + + +/***/ }), + +/***/ 457: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + +var BIDDER_CODE = 'inskin'; +var CONFIG = { + 'inskin': { + 'BASE_URI': 'https://mfad.inskinad.com/api/v2' + } +}; +var 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 + * @param {bidderRequest} - the full bidder request object + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + // 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; + + var data = _extends({ + placements: [], + time: Date.now(), + user: {}, + url: bidderRequest.refererInfo.referer, + enableBotFiltering: true, + includePricingData: true, + parallel: true + }, validBidRequests[0].params); + + data.keywords = data.keywords || []; + var restrictions = []; + + if (bidderRequest && bidderRequest.gdprConsent) { + data.consent = { + gdprVendorId: 150, + gdprConsentString: bidderRequest.gdprConsent.consentString, + // will check if the gdprApplies field was populated with a boolean value (ie from page config). If it's undefined, then default to true + gdprConsentRequired: typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies : true + }; + + if (bidderRequest.gdprConsent.apiVersion === 2) { + var purposes = [{ + id: 1, + kw: 'nocookies' + }, { + id: 2, + kw: 'nocontext' + }, { + id: 3, + kw: 'nodmp' + }, { + id: 4, + kw: 'nodata' + }, { + id: 7, + kw: 'noclicks' + }, { + id: 9, + kw: 'noresearch' + }]; + var d = bidderRequest.gdprConsent.vendorData; + + if (d) { + if (d.purposeOneTreatment) { + data.keywords.push('cst-nodisclosure'); + restrictions.push('nodisclosure'); + } + + purposes.map(function (p) { + if (!checkConsent(p.id, d)) { + data.keywords.push('cst-' + p.kw); + restrictions.push(p.kw); + } + }); + } + } + } + + 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 (restrictions.length) { + placement.properties = placement.properties || {}; + placement.properties.restrictions = restrictions; + } + + 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; + var bids; + var bidId; + var bidObj; + 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 data = decision && decision.contents && decision.contents[0] && decision.contents[0].data; + var pubCPM = data && data.customData && data.customData.pubCPM; + var clearPrice = decision && decision.pricing && decision.pricing.clearPrice; + var price = pubCPM || clearPrice; + + if (decision && price) { + decision.impressionUrl += '&property:pubcpm=' + price; + bidObj.price = 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; + 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] = { + plr_AdSlot: e.source.frameElement, + bidId: e.data.bidId, + bidPrice: bidsMap[e.data.bidId].price, + 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) { + var userSyncs = []; + + if (syncOptions.pixelEnabled) { + userSyncs.push({ + type: 'image', + url: 'https://e.serverbid.com/udb/9969/match?redir=https%3A%2F%2Fmfad.inskinad.com%2Fudb%2F9874%2Fpool%2Fset%2Fi.gif%3FpoolId%3D9969%26poolKey%3D' + }); + userSyncs.push({ + type: 'image', + url: 'https://ssum.casalemedia.com/usermatchredir?s=185638&cb=https%3A%2F%2Fmfad.inskinad.com%2Fudb%2F9874%2Fsync%2Fi.gif%3FpartnerId%3D1%26userId%3D' + }); + } + + if (syncOptions.iframeEnabled) { + userSyncs.push({ + type: 'iframe', + url: 'https://ssum-sec.casalemedia.com/usermatch?s=184665&cb=https%3A%2F%2Fmfad.inskinad.com%2Fudb%2F9874%2Fsync%2Fi.gif%3FpartnerId%3D1%26userId%3D' + }); + } + + return userSyncs; + } +}; +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 "\n \n creativeHtml\n \n ".replace('creativeHtml', bidModel.CreativeHtml); +} + +function getCappedCampaignsAsString() { + var key = 'ivvcap'; + + var loadData = function loadData() { + try { + return JSON.parse(storage.getDataFromLocalStorage(key)) || {}; + } catch (e) { + return {}; + } + }; + + var saveData = function saveData(data) { + storage.setDataInLocalStorage(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(','); +} + +var noop = function noop() {}; + +function initLogger() { + if (storage.hasLocalStorage() && localStorage.InvibesDEBUG) { + return window.console; + } + + return { + info: noop, + error: noop, + log: noop, + warn: noop, + debug: noop + }; +} + +function buildSyncUrl() { + var syncUrl = _customUserSync || CONSTANTS.SYNC_ENDPOINT; + syncUrl += '?visitId=' + invibes.visitId; + syncUrl += '&optIn=' + invibes.optIn; + var did = invibes.getCookie('ivbsdid'); + + if (did) { + syncUrl += '&ivbsdid=' + encodeURIComponent(did); + } + + var bks = invibes.getCookie('ivvbks'); + + if (bks) { + syncUrl += '&ivvbks=' + encodeURIComponent(bks); + } + + return syncUrl; +} + +function handlePostMessage() { + try { + if (window.addEventListener) { + window.addEventListener('message', acceptPostMessage); + } + } catch (e) {} +} + +function acceptPostMessage(e) { + var msg = e.data || {}; + + if (msg.ivbscd === 1) { + invibes.setCookie(msg.name, msg.value, msg.exdays, msg.domain); + } else if (msg.ivbscd === 2) { + invibes.dom.graduate(); + } +} + +function readGdprConsent(gdprConsent) { + if (gdprConsent && gdprConsent.vendorData) { + if (!gdprConsent.vendorData.gdprApplies || gdprConsent.vendorData.hasGlobalConsent) { + return 2; + } + + var purposeConsents = getPurposeConsents(gdprConsent.vendorData); + + if (purposeConsents == null) { + return 0; + } + + var properties = Object.keys(purposeConsents); + var purposeConsentsCounter = getPurposeConsentsCounter(gdprConsent.vendorData); + + if (properties.length < purposeConsentsCounter) { + return 0; + } + + for (var i = 0; i < purposeConsentsCounter; i++) { + if (!purposeConsents[properties[i]] || purposeConsents[properties[i]] === 'false') { + return 0; + } + } + + var vendorConsents = getVendorConsents(gdprConsent.vendorData); + + if (vendorConsents == null || vendorConsents[CONSTANTS.INVIBES_VENDOR_ID.toString(10)] == null) { + return 4; + } + + if (vendorConsents[CONSTANTS.INVIBES_VENDOR_ID.toString(10)] === false) { + return 0; + } + + return 2; + } + + return 0; +} + +function getPurposeConsentsCounter(vendorData) { + if (vendorData.purpose && vendorData.purpose.consents) { + return 10; + } + + return 5; +} + +function getPurposeConsents(vendorData) { + if (vendorData.purpose && vendorData.purpose.consents) { + return vendorData.purpose.consents; + } + + if (vendorData.purposeConsents) { + return vendorData.purposeConsents; + } + + return null; +} + +function getVendorConsents(vendorData) { + if (vendorData.vendor && vendorData.vendor.consents) { + return vendorData.vendor.consents; + } + + if (vendorData.vendorConsents) { + return vendorData.vendorConsents; + } + + return null; +} + +var ivLogger = initLogger(); /// Local domain cookie management ===================== + +invibes.Uid = { + generate: function generate() { + var maxRand = parseInt('zzzzzz', 36); + + var mkRand = function mkRand() { + return Math.floor(Math.random() * maxRand).toString(36); + }; + + var rand1 = mkRand(); + var rand2 = mkRand(); + return rand1 + rand2; + } +}; +var cookieDomain; + +invibes.getCookie = function (name) { + if (!storage.cookiesAreEnabled()) { + return; + } + + var i, x, y; + 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); + } + } +}; + +invibes.setCookie = function (name, value, exdays, domain) { + if (!storage.cookiesAreEnabled()) { + return; + } + + var whiteListed = name == 'ivNoCookie' || name == 'IvbsCampIdsLocal'; + + if (invibes.noCookies && !whiteListed && (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); + storage.setCookie(name, value, exdate.toUTCString(), undefined, domain); +}; + +var detectTopmostCookieDomain = function detectTopmostCookieDomain() { + var testCookie = invibes.Uid.generate(); + var hostParts = location.hostname.split('.'); + + if (hostParts.length === 1) { + return location.hostname; + } + + for (var i = hostParts.length - 1; i >= 0; i--) { + var domain = '.' + hostParts.slice(i).join('.'); + invibes.setCookie(testCookie, testCookie, 1, domain); + var val = invibes.getCookie(testCookie); + + if (val === testCookie) { + invibes.setCookie(testCookie, testCookie, -1, domain); + return domain; + } + } +}; + +var initDomainId = function initDomainId(options) { + if (invibes.dom) { + return; + } + + options = options || {}; + var cookiePersistence = { + cname: 'ivbsdid', + load: function load() { + var str = invibes.getCookie(this.cname) || ''; + + try { + return JSON.parse(str); + } catch (e) {} + }, + save: function save(obj) { + invibes.setCookie(this.cname, JSON.stringify(obj), 365); + } + }; + var persistence = options.persistence || cookiePersistence; + var state; + var minHC = 2; + + var validGradTime = function validGradTime(state) { + if (!state.cr) { + return false; + } + + var min = 151 * 10e9; + + if (state.cr < min) { + return false; + } + + var now = new Date().getTime(); + var age = now - state.cr; + var minAge = 24 * 60 * 60 * 1000; + return age > minAge; + }; + + state = persistence.load() || { + id: invibes.Uid.generate(), + cr: new Date().getTime(), + hc: 1 + }; + + if (state.id.match(/\./)) { + state.id = invibes.Uid.generate(); + } + + var graduate = function graduate() { + if (!state.cr) { + return; + } + + delete state.cr; + delete state.hc; + persistence.save(state); + setId(); + }; + + var regenerateId = function regenerateId() { + state.id = invibes.Uid.generate(); + persistence.save(state); + }; + + var setId = function setId() { + invibes.dom = { + get id() { + return !state.cr && invibes.optIn > 0 ? state.id : undefined; + }, + + get tempId() { + return invibes.optIn > 0 ? state.id : undefined; + }, + + graduate: graduate, + regen: regenerateId + }; + }; + + if (state.cr && !options.noVisit) { + if (state.hc < minHC) { + state.hc++; + } + + if (state.hc >= minHC && validGradTime(state) || options.skipGraduation) { + graduate(); + } + } + + persistence.save(state); + setId(); + ivLogger.info('Did=' + invibes.dom.id); +}; + +var keywords = function () { + var cap = 300; + var headTag = document.getElementsByTagName('head')[0]; + var metaTag = headTag ? headTag.getElementsByTagName('meta') : []; + + function parse(str, cap) { + var parsedStr = str.replace(/[<>~|\\"`!@#$%^&*()=+?]/g, ''); + + function onlyUnique(value, index, self) { + return value !== '' && self.indexOf(value) === index; + } + + var words = parsedStr.split(/[\s,;.:]+/); + var uniqueWords = words.filter(onlyUnique); + parsedStr = ''; + + for (var i = 0; i < uniqueWords.length; i++) { + parsedStr += uniqueWords[i]; + + if (parsedStr.length >= cap) { + return parsedStr; + } + + if (i < uniqueWords.length - 1) { + parsedStr += ','; + } + } + + return parsedStr; + } + + function gt(cap, prefix) { + cap = cap || 300; + prefix = prefix || ''; + var title = document.title || headTag ? headTag.getElementsByTagName('title')[0] ? headTag.getElementsByTagName('title')[0].innerHTML : '' : ''; + return parse(prefix + ',' + title, cap); + } + + function gmeta(metaName, cap, prefix) { + metaName = metaName || 'keywords'; + cap = cap || 100; + prefix = prefix || ''; + var fallbackKw = prefix; + + for (var i = 0; i < metaTag.length; i++) { + if (metaTag[i].name && metaTag[i].name.toLowerCase() === metaName.toLowerCase()) { + var _kw = prefix + ',' + metaTag[i].content || ''; + + return parse(_kw, cap); + } else if (metaTag[i].name && metaTag[i].name.toLowerCase().indexOf(metaName.toLowerCase()) > -1) { + fallbackKw = prefix + ',' + metaTag[i].content || ''; + } + } + + return parse(fallbackKw, cap); + } + + var kw = gmeta('keywords', cap); + + if (!kw || kw.length < cap - 8) { + kw = gmeta('description', cap, kw); + + if (!kw || kw.length < cap - 8) { + kw = gt(cap, kw); + } + } + + return kw; +}(); // ===================== + + +function resetInvibes() { + invibes.optIn = undefined; + invibes.noCookies = undefined; + invibes.dom = undefined; + invibes.bidResponse = undefined; + invibes.domainOptions = undefined; +} +function stubDomainOptions(persistence) { + invibes.domainOptions = { + persistence: persistence + }; +} + +/***/ }) + +},[460]); \ No newline at end of file diff --git a/build/dist/invisiblyAnalyticsAdapter.js b/build/dist/invisiblyAnalyticsAdapter.js new file mode 100644 index 00000000000..df21a39e713 --- /dev/null +++ b/build/dist/invisiblyAnalyticsAdapter.js @@ -0,0 +1,544 @@ +pbjsChunk([34],{ + +/***/ 462: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(463); + + +/***/ }), + +/***/ 463: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * invisiblyAdapterAdapter.js - analytics adapter for Invisibly + */ + + + +var DEFAULT_EVENT_URL = 'https://api.pymx5.com/v1/' + 'sites/events'; +var analyticsType = 'endpoint'; +var analyticsName = 'Invisibly Analytics Adapter:'; + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var ajax = Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["b" /* ajaxBuilder */])(0); // Events needed + +var _CONSTANTS$EVENTS = CONSTANTS.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED; +var _VERSION = 1; + +var _pageViewId = utils.generateUUID(); + +var initOptions = null; +var _startAuction = 0; +var _bidRequestTimeout = 0; +var flushInterval; +var invisiblyAnalyticsEnabled = false; +var w = window; +var d = document; +var e = d.documentElement; +var g = d.getElementsByTagName('body')[0]; +var x = w.innerWidth || e.clientWidth || g.clientWidth; +var y = w.innerHeight || e.clientHeight || g.clientHeight; +var _pageView = { + eventType: 'pageView', + userAgent: window.navigator.userAgent, + timestamp: Date.now(), + timezoneOffset: new Date().getTimezoneOffset(), + language: window.navigator.language, + vendor: window.navigator.vendor, + screenWidth: x, + screenHeight: y +}; // pass only 1% of events & fail the rest 99% + +var weightedFilter = { + filter: Math.random() > 0.99 +}; +var _eventQueue = [_pageView]; + +var invisiblyAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + url: DEFAULT_EVENT_URL, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + handleEvent(eventType, args); + }, + sendEvent: sendEvent, + weightedFilter: weightedFilter +}); + +invisiblyAdapter.originEnableAnalytics = invisiblyAdapter.enableAnalytics; + +invisiblyAdapter.enableAnalytics = function (config) { + initOptions = config.options || {}; + initOptions.url = initOptions.url || DEFAULT_EVENT_URL; + + if (initOptions.url && initOptions.account && weightedFilter.filter) { + invisiblyAnalyticsEnabled = true; + invisiblyAdapter.originEnableAnalytics(config); + } else { + invisiblyAnalyticsEnabled = false; + invisiblyAdapter.originDisableAnalytics(); + } + + flushInterval = setInterval(flush, 1000); +}; + +invisiblyAdapter.originDisableAnalytics = invisiblyAdapter.disableAnalytics; + +invisiblyAdapter.disableAnalytics = function () { + if (!invisiblyAnalyticsEnabled) { + return; + } + + flush(); + clearInterval(flushInterval); + invisiblyAdapter.originDisableAnalytics(); +}; + +function flush() { + if (!invisiblyAnalyticsEnabled) { + return; + } + + if (_eventQueue.length > 0) { + while (_eventQueue.length) { + var eventFromQue = _eventQueue.shift(); + + var eventtype = 'PREBID_' + eventFromQue.eventType; + delete eventFromQue.eventType; + + var data = _objectSpread({ + pageViewId: _pageViewId, + ver: _VERSION, + bundleId: initOptions.bundleId + }, eventFromQue); + + var payload = { + event_type: eventtype, + event_data: _objectSpread({}, data) + }; + ajax(initOptions.url, function () { + return utils.logInfo("".concat(analyticsName, " sent events batch")); + }, JSON.stringify(payload), { + contentType: 'application/json', + method: 'POST', + withCredentials: true + }); + } + } +} + +function handleEvent(eventType, eventArgs) { + eventArgs = eventArgs ? JSON.parse(JSON.stringify(eventArgs)) : {}; + var invisiblyEvent = {}; + + switch (eventType) { + case AUCTION_INIT: + { + invisiblyEvent = eventArgs; + _startAuction = invisiblyEvent.timestamp; + _bidRequestTimeout = invisiblyEvent.timeout; + break; + } + + case AUCTION_END: + { + invisiblyEvent = eventArgs; + invisiblyEvent.start = _startAuction; + invisiblyEvent.end = Date.now(); + break; + } + + case BID_ADJUSTMENT: + { + invisiblyEvent.bidders = eventArgs; + break; + } + + case BID_TIMEOUT: + { + invisiblyEvent.bidders = eventArgs; + invisiblyEvent.duration = _bidRequestTimeout; + break; + } + + case BID_REQUESTED: + { + invisiblyEvent = eventArgs; + break; + } + + case BID_RESPONSE: + { + invisiblyEvent = eventArgs; + break; + } + + case NO_BID: + { + invisiblyEvent.noBid = eventArgs; + break; + } + + case BID_WON: + { + invisiblyEvent = eventArgs; + break; + } + + case BIDDER_DONE: + { + invisiblyEvent = eventArgs; + break; + } + + case SET_TARGETING: + { + invisiblyEvent.targetings = eventArgs; + break; + } + + case REQUEST_BIDS: + { + invisiblyEvent = eventArgs; + break; + } + + case ADD_AD_UNITS: + { + invisiblyEvent = eventArgs; + break; + } + + case AD_RENDER_FAILED: + { + invisiblyEvent = eventArgs; + break; + } + + default: + return; + } + + invisiblyEvent.eventType = eventType; + invisiblyEvent.timestamp = invisiblyEvent.timestamp || Date.now(); + sendEvent(invisiblyEvent); +} + +function sendEvent(event) { + _eventQueue.push(event); + + utils.logInfo("".concat(analyticsName, "Event ").concat(event.eventType, ":"), event); + + if (event.eventType === AUCTION_END) { + flush(); + clearInterval(flushInterval); + } +} + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: invisiblyAdapter, + code: 'invisiblyAnalytics' +}); + +invisiblyAdapter.getOptions = function () { + return initOptions; +}; + +invisiblyAdapter.flush = flush; +/* harmony default export */ __webpack_exports__["default"] = (invisiblyAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[462]); \ No newline at end of file diff --git a/build/dist/ixBidAdapter.js b/build/dist/ixBidAdapter.js new file mode 100644 index 00000000000..146e0cb9394 --- /dev/null +++ b/build/dist/ixBidAdapter.js @@ -0,0 +1,646 @@ +pbjsChunk([194],{ + +/***/ 464: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(465); + + +/***/ }), + +/***/ 465: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js__ = __webpack_require__(466); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + +var BIDDER_CODE = 'ix'; +var SECURE_BID_URL = 'https://htlb.casalemedia.com/cygnus'; +var SUPPORTED_AD_TYPES = [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]]; +var BANNER_ENDPOINT_VERSION = 7.2; +var VIDEO_ENDPOINT_VERSION = 8.1; +var CENT_TO_DOLLAR_FACTOR = 100; +var BANNER_TIME_TO_LIVE = 300; +var VIDEO_TIME_TO_LIVE = 3600; // 1hr + +var NET_REVENUE = true; +var PRICE_TO_DOLLAR_FACTOR = { + JPY: 1 +}; +var USER_SYNC_URL = 'https://js-sec.indexww.com/um/ixmatch.html'; +/** + * Transform valid bid request config object to banner impression object that will be sent to ad server. + * + * @param {object} bid A valid bid request config object. + * @return {object} A impression object that will be sent to ad server. + */ + +function bidToBannerImp(bid) { + var imp = bidToImp(bid); + imp.banner = {}; + imp.banner.w = bid.params.size[0]; + imp.banner.h = bid.params.size[1]; + imp.banner.topframe = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"]() ? 0 : 1; + return imp; +} +/** + * Transform valid bid request config object to video impression object that will be sent to ad server. + * + * @param {object} bid A valid bid request config object. + * @return {object} A impression object that will be sent to ad server. + */ + + +function bidToVideoImp(bid) { + var imp = bidToImp(bid); + imp.video = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](bid.params.video); + imp.video.w = bid.params.size[0]; + imp.video.h = bid.params.size[1]; + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (context) { + if (context === 'instream') { + imp.video.placement = 1; + } else if (context === 'outstream') { + imp.video.placement = 4; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("ix bidder params: video context '".concat(context, "' is not supported")); + } + } + + return imp; +} + +function bidToImp(bid) { + var imp = {}; + imp.id = bid.bidId; + imp.ext = {}; + imp.ext.siteID = bid.params.siteId; + + if (bid.params.hasOwnProperty('id') && (typeof bid.params.id === 'string' || typeof bid.params.id === 'number')) { + imp.ext.sid = String(bid.params.id); + } else { + imp.ext.sid = "".concat(bid.params.size[0], "x").concat(bid.params.size[1]); + } + + if (bid.params.hasOwnProperty('bidFloor') && bid.params.hasOwnProperty('bidFloorCur')) { + imp.bidfloor = bid.params.bidFloor; + imp.bidfloorcur = bid.params.bidFloorCur; + } + + return imp; +} +/** + * Parses a raw bid for the relevant information. + * + * @param {object} rawBid The bid to be parsed. + * @param {string} currency Global currency in bid response. + * @return {object} bid The parsed bid. + */ + + +function parseBid(rawBid, currency, bidRequest) { + var bid = {}; + + if (PRICE_TO_DOLLAR_FACTOR.hasOwnProperty(currency)) { + bid.cpm = rawBid.price / PRICE_TO_DOLLAR_FACTOR[currency]; + } else { + bid.cpm = rawBid.price / CENT_TO_DOLLAR_FACTOR; + } + + bid.requestId = rawBid.impid; + bid.dealId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.dealid'); + bid.netRevenue = NET_REVENUE; + bid.currency = currency; + bid.creativeId = rawBid.hasOwnProperty('crid') ? rawBid.crid : '-'; // in the event of a video + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.vasturl')) { + bid.vastUrl = rawBid.ext.vasturl; + bid.width = bidRequest.video.w; + bid.height = bidRequest.video.h; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + bid.ttl = VIDEO_TIME_TO_LIVE; + } else { + bid.ad = rawBid.adm; + bid.width = rawBid.w; + bid.height = rawBid.h; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + bid.ttl = BANNER_TIME_TO_LIVE; + } + + bid.meta = {}; + bid.meta.networkId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.dspid'); + bid.meta.brandId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.advbrandid'); + bid.meta.brandName = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.advbrand'); + + if (rawBid.adomain && rawBid.adomain.length > 0) { + bid.meta.advertiserDomains = rawBid.adomain; + } + + return bid; +} +/** + * Determines whether or not the given object is valid size format. + * + * @param {*} size The object to be validated. + * @return {boolean} True if this is a valid size format, and false otherwise. + */ + + +function isValidSize(size) { + return Array.isArray(size) && size.length === 2 && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js___default()(size[0]) && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js___default()(size[1]); +} +/** + * Determines whether or not the given size object is an element of the size + * array. + * + * @param {array} sizeArray The size array. + * @param {object} size The size object. + * @return {boolean} True if the size object is an element of the size array, and false + * otherwise. + */ + + +function includesSize(sizeArray, size) { + if (isValidSize(sizeArray)) { + return sizeArray[0] === size[0] && sizeArray[1] === size[1]; + } + + for (var i = 0; i < sizeArray.length; i++) { + if (sizeArray[i][0] === size[0] && sizeArray[i][1] === size[1]) { + return true; + } + } + + return false; +} +/** + * Determines whether or not the given bidFloor parameters are valid. + * + * @param {*} bidFloor The bidFloor parameter inside bid request config. + * @param {*} bidFloorCur The bidFloorCur parameter inside bid request config. + * @return {boolean} True if this is a valid bidFloor parameters format, and false + * otherwise. + */ + + +function isValidBidFloorParams(bidFloor, bidFloorCur) { + var curRegex = /^[A-Z]{3}$/; + return Boolean(typeof bidFloor === 'number' && typeof bidFloorCur === 'string' && bidFloorCur.match(curRegex)); +} +/** + * Finds the impression with the associated id. + * + * @param {*} id Id of the impression. + * @param {array} impressions List of impressions sent in the request. + * @return {object} The impression with the associated id. + */ + + +function getBidRequest(id, impressions) { + if (!id) { + return; + } + + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(impressions, function (imp) { + return imp.id === id; + }); +} +/** + * Adds a User ID module's response into user Eids array. + * + * @param {array} userEids An array of objects containing user ids, + * will be attached to bid request later. + * @param {object} seenIdPartners An object with Identity partners names already added, + * updated with new partner name. + * @param {*} id The id obtained from User ID module. + * @param {string} source The URL of the User ID module. + * @param {string} ixlPartnerName The name of the Identity Partner in IX Library. + * @param {string} rtiPartner The name of the User ID provider in Prebid. + * @return {boolean} True if successfully added the ID to the userEids, false otherwise. + */ + + +function addUserEids(userEids, seenIdPartners, id, source, ixlPartnerName, rtiPartner) { + if (id) { + // mark the partnername that IX RTI uses + seenIdPartners[ixlPartnerName] = 1; + userEids.push({ + source: source, + uids: [{ + id: id, + ext: { + rtiPartner: rtiPartner + } + }] + }); + return true; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Tried to add a user ID from Prebid, the ID received was null'); + return false; +} +/** + * Builds a request object to be sent to the ad server based on bid requests. + * + * @param {array} validBidRequests A list of valid bid request config objects. + * @param {object} bidderRequest An object containing other info like gdprConsent. + * @param {array} impressions List of impression objects describing the bids. + * @param {array} version Endpoint version denoting banner or video. + * @return {object} Info describing the request to the server. + * + */ + + +function buildRequest(validBidRequests, bidderRequest, impressions, version) { + var userEids = []; // Always use secure HTTPS protocol. + + var baseUrl = SECURE_BID_URL; // Dict for identity partners already populated from prebid + + var seenIdPartners = {}; // Get ids from Prebid User ID Modules + + var userId = validBidRequests[0].userId; + + if (userId && _typeof(userId) === 'object') { + if (userId.idl_env) { + addUserEids(userEids, seenIdPartners, userId.idl_env, 'liveramp.com', 'LiveRampIp', 'idl'); + } + } // RTI ids will be included in the bid request if the function getIdentityInfo() is loaded + // and if the data for the partner exist + + + if (window.headertag && typeof window.headertag.getIdentityInfo === 'function') { + var identityInfo = window.headertag.getIdentityInfo(); + + if (identityInfo && _typeof(identityInfo) === 'object') { + for (var partnerName in identityInfo) { + if (identityInfo.hasOwnProperty(partnerName)) { + // check if not already populated by prebid cache + if (!seenIdPartners.hasOwnProperty(partnerName)) { + var response = identityInfo[partnerName]; + + if (!response.responsePending && response.data && _typeof(response.data) === 'object' && Object.keys(response.data).length) { + userEids.push(response.data); + } + } + } + } + } + } + + var r = {}; // Since bidderRequestId are the same for different bid request, just use the first one. + + r.id = validBidRequests[0].bidderRequestId; + r.imp = impressions; + r.site = {}; + r.ext = {}; + r.ext.source = 'prebid'; // if an schain is provided, send it along + + if (validBidRequests[0].schain) { + r.source = { + ext: { + schain: validBidRequests[0].schain + } + }; + } + + if (userEids.length > 0) { + r.user = {}; + r.user.eids = userEids; + } + + if (document.referrer && document.referrer !== '') { + r.site.ref = document.referrer; + } // Apply GDPR information to the request if GDPR is enabled. + + + if (bidderRequest) { + if (bidderRequest.gdprConsent) { + var gdprConsent = bidderRequest.gdprConsent; + + if (gdprConsent.hasOwnProperty('gdprApplies')) { + r.regs = { + ext: { + gdpr: gdprConsent.gdprApplies ? 1 : 0 + } + }; + } + + if (gdprConsent.hasOwnProperty('consentString')) { + r.user = r.user || {}; + r.user.ext = { + consent: gdprConsent.consentString || '' + }; + } + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](r, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (bidderRequest.refererInfo) { + r.site.page = bidderRequest.refererInfo.referer; + } + } + + var payload = {}; // Parse additional runtime configs. + + var bidderCode = bidderRequest && bidderRequest.bidderCode || 'ix'; + var otherIxConfig = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig(bidderCode); + + if (otherIxConfig) { + // Append firstPartyData to r.site.page if firstPartyData exists. + if (_typeof(otherIxConfig.firstPartyData) === 'object') { + var firstPartyData = otherIxConfig.firstPartyData; + var firstPartyString = '?'; + + for (var key in firstPartyData) { + if (firstPartyData.hasOwnProperty(key)) { + firstPartyString += "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(firstPartyData[key]), "&"); + } + } + + firstPartyString = firstPartyString.slice(0, -1); + r.site.page += firstPartyString; + } // Create t in payload if timeout is configured. + + + if (typeof otherIxConfig.timeout === 'number') { + payload.t = otherIxConfig.timeout; + } + } // Use the siteId in the first bid request as the main siteId. + + + payload.s = validBidRequests[0].params.siteId; + payload.v = version; + payload.r = JSON.stringify(r); + payload.ac = 'j'; + payload.sd = 1; + + if (version === VIDEO_ENDPOINT_VERSION) { + payload.nf = 1; + } + + return { + method: 'GET', + url: baseUrl, + data: payload + }; +} +/** + * + * @param {array} bannerSizeList list of banner sizes + * @param {array} bannerSize the size to be removed + * @return {boolean} true if succesfully removed, false if not found + */ + + +function removeFromSizes(bannerSizeList, bannerSize) { + for (var i = 0; i < bannerSizeList.length; i++) { + if (bannerSize[0] == bannerSizeList[i][0] && bannerSize[1] == bannerSizeList[i][1]) { + bannerSizeList.splice(i, 1); + return true; + } + } // size not found + + + return false; +} +/** + * Updates the Object to track missing banner sizes. + * + * @param {object} validBidRequest The bid request for an ad unit's with a configured size. + * @param {object} missingBannerSizes The object containing missing banner sizes + * @param {object} imp The impression for the bidrequest + */ + + +function updateMissingSizes(validBidRequest, missingBannerSizes, imp) { + var transactionID = validBidRequest.transactionId; + + if (missingBannerSizes.hasOwnProperty(transactionID)) { + var currentSizeList = []; + + if (missingBannerSizes[transactionID].hasOwnProperty('missingSizes')) { + currentSizeList = missingBannerSizes[transactionID].missingSizes; + } + + removeFromSizes(currentSizeList, validBidRequest.params.size); + missingBannerSizes[transactionID].missingSizes = currentSizeList; + } else { + // New Ad Unit + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequest, 'mediaTypes.banner.sizes')) { + var sizeList = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](validBidRequest.mediaTypes.banner.sizes); + removeFromSizes(sizeList, validBidRequest.params.size); + var newAdUnitEntry = { + 'missingSizes': sizeList, + 'impression': imp + }; + missingBannerSizes[transactionID] = newAdUnitEntry; + } + } +} +/** + * + * @param {object} imp Impression object to be modified + * @param {array} newSize The new size to be applied + * @return {object} newImp Updated impression object + */ + + +function createMissingBannerImp(imp, newSize) { + var newImp = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](imp); + newImp.ext.sid = "".concat(newSize[0], "x").concat(newSize[1]); + newImp.banner.w = newSize[0]; + newImp.banner.h = newSize[1]; + return newImp; +} + +var spec = { + code: BIDDER_CODE, + gvlid: 10, + supportedMediaTypes: SUPPORTED_AD_TYPES, + + /** + * 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) { + if (!isValidSize(bid.params.size)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: bid size has invalid format.'); + return false; + } + + if (!includesSize(bid.sizes, bid.params.size)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: bid size is not included in ad unit sizes.'); + return false; + } + + if (bid.hasOwnProperty('mediaType') && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["contains"](SUPPORTED_AD_TYPES, bid.mediaType)) { + return false; + } + + if (bid.hasOwnProperty('mediaTypes') && !(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize'))) { + return false; + } + + if (typeof bid.params.siteId !== 'string' && typeof bid.params.siteId !== 'number') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: siteId must be string or number value.'); + return false; + } + + var hasBidFloor = bid.params.hasOwnProperty('bidFloor'); + var hasBidFloorCur = bid.params.hasOwnProperty('bidFloorCur'); + + if (hasBidFloor || hasBidFloorCur) { + if (!(hasBidFloor && hasBidFloorCur && isValidBidFloorParams(bid.params.bidFloor, bid.params.bidFloorCur))) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: bidFloor / bidFloorCur parameter has invalid format.'); + return false; + } + } + + return true; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {array} validBidRequests A list of valid bid request config objects. + * @param {object} bidderRequest A object contains bids and other info like gdprConsent. + * @return {object} Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var reqs = []; + var bannerImps = []; + var videoImps = []; + var validBidRequest = null; // To capture the missing sizes i.e not configured for ix + + var missingBannerSizes = {}; + + for (var i = 0; i < validBidRequests.length; i++) { + validBidRequest = validBidRequests[i]; + + if (validBidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequest, 'mediaTypes.video')) { + if (validBidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] || includesSize(validBidRequest.mediaTypes.video.playerSize, validBidRequest.params.size)) { + videoImps.push(bidToVideoImp(validBidRequest)); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Bid size is not included in video playerSize'); + } + } + + if (validBidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */] || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequest, 'mediaTypes.banner') || !validBidRequest.mediaType && !validBidRequest.mediaTypes) { + var imp = bidToBannerImp(validBidRequest); + bannerImps.push(imp); + updateMissingSizes(validBidRequest, missingBannerSizes, imp); + } + } // Finding the missing banner sizes ,and making impressions for them + + + for (var transactionID in missingBannerSizes) { + if (missingBannerSizes.hasOwnProperty(transactionID)) { + var missingSizes = missingBannerSizes[transactionID].missingSizes; + + for (var _i = 0; _i < missingSizes.length; _i++) { + var origImp = missingBannerSizes[transactionID].impression; + var newImp = createMissingBannerImp(origImp, missingSizes[_i]); + bannerImps.push(newImp); + } + } + } + + if (bannerImps.length > 0) { + reqs.push(buildRequest(validBidRequests, bidderRequest, bannerImps, BANNER_ENDPOINT_VERSION)); + } + + if (videoImps.length > 0) { + reqs.push(buildRequest(validBidRequests, bidderRequest, videoImps, VIDEO_ENDPOINT_VERSION)); + } + + return reqs; + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {object} serverResponse A successful response from the server. + * @param {object} bidderRequest The bid request sent to the server. + * @return {array} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, bidderRequest) { + var bids = []; + var bid = null; + + if (!serverResponse.hasOwnProperty('body') || !serverResponse.body.hasOwnProperty('seatbid')) { + return bids; + } + + var responseBody = serverResponse.body; + var seatbid = responseBody.seatbid; + + for (var i = 0; i < seatbid.length; i++) { + if (!seatbid[i].hasOwnProperty('bid')) { + continue; + } // Transform rawBid in bid response to the format that will be accepted by prebid. + + + var innerBids = seatbid[i].bid; + var requestBid = JSON.parse(bidderRequest.data.r); + + for (var j = 0; j < innerBids.length; j++) { + var bidRequest = getBidRequest(innerBids[j].impid, requestBid.imp); + bid = parseBid(innerBids[j], responseBody.cur, bidRequest); + bids.push(bid); + } + } + + return bids; + }, + + /** + * Covert bid param types for S2S + * @param {Object} params bid params + * @param {Boolean} isOpenRtb boolean to check openrtb2 protocol + * @return {Object} params bid params + */ + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'siteID': 'number' + }, params); + }, + + /** + * Determine which user syncs should occur + * @param {object} syncOptions + * @param {array} serverResponses + * @returns {array} User sync pixels + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + return syncOptions.iframeEnabled ? [{ + type: 'iframe', + url: USER_SYNC_URL + }] : []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[464]); \ No newline at end of file diff --git a/build/dist/jcmBidAdapter.js b/build/dist/jcmBidAdapter.js new file mode 100644 index 00000000000..1c3204ea4a8 --- /dev/null +++ b/build/dist/jcmBidAdapter.js @@ -0,0 +1,114 @@ +pbjsChunk([193],{ + +/***/ 470: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(471); + + +/***/ }), + +/***/ 471: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'jcm'; +var URL = 'https://media.adfrontiers.com/pq'; +var 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 += __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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: 'https://media.adfrontiers.com/hb/jcm_usersync.html' + }]; + } + + if (syncOptions.image) { + return [{ + type: 'image', + url: 'https://media.adfrontiers.com/hb/jcm_usersync.png' + }]; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[470]); \ No newline at end of file diff --git a/build/dist/justpremiumBidAdapter.js b/build/dist/justpremiumBidAdapter.js new file mode 100644 index 00000000000..6d6e1d21063 --- /dev/null +++ b/build/dist/justpremiumBidAdapter.js @@ -0,0 +1,261 @@ +pbjsChunk([192],{ + +/***/ 472: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(473); + + +/***/ }), + +/***/ 473: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); + + +var BIDDER_CODE = 'justpremium'; +var ENDPOINT_URL = 'https://pre.ads.justpremium.com/v/2.0/t/xhr'; +var JP_ADAPTER_VERSION = '1.7'; +var pixels = []; +var spec = { + code: BIDDER_CODE, + time: 60000, + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.zone); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + 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; + }), + referer: bidderRequest.refererInfo.referer, + 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.mediaTypes && b.mediaTypes.banner && b.mediaTypes.banner.sizes); + }); + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'userId.pubcid')) { + payload.pubcid = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'userId.pubcid'); + } else if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'crumbs.pubcid')) { + payload.pubcid = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'crumbs.pubcid'); + } + + payload.uids = validBidRequests[0].userId; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies : true + }; + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + + payload.version = { + prebid: "4.2.0", + jp_adapter: JP_ADAPTER_VERSION + }; + 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.mediaTypes && adUnit.mediaTypes.banner && adUnit.mediaTypes.banner.sizes && adUnit.mediaTypes.banner.sizes.length && adUnit.mediaTypes.banner.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, + format: bid.format + }; + bidResponses.push(bidResponse); + } + }); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + var url = 'https://pre.ads.justpremium.com/v/1.0/t/sync' + '?_c=' + 'a' + Math.random().toString(36).substring(7) + Date.now(); + + if (gdprConsent && typeof gdprConsent.gdprApplies === 'boolean' && gdprConsent.gdprApplies && gdprConsent.consentString) { + url = url + '&consentString=' + encodeURIComponent(gdprConsent.consentString); + } + + if (uspConsent) { + url = url + '&usPrivacy=' + encodeURIComponent(uspConsent); + } + + if (syncOptions.iframeEnabled) { + pixels.push({ + type: 'iframe', + url: url + }); + } + + 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; + + try { + top = window.top; + } catch (e) { + top = window; + } + + return { + screenWidth: top.screen.width, + screenHeight: top.screen.height, + innerWidth: top.innerWidth, + innerHeight: top.innerHeight + }; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[472]); \ No newline at end of file diff --git a/build/dist/kargoAnalyticsAdapter.js b/build/dist/kargoAnalyticsAdapter.js new file mode 100644 index 00000000000..3cb357b921d --- /dev/null +++ b/build/dist/kargoAnalyticsAdapter.js @@ -0,0 +1,291 @@ +pbjsChunk([33],{ + +/***/ 474: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(475); + + +/***/ }), + +/***/ 475: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); + + +var kargoAdapter = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: 'endpoint', + url: 'https://krk.kargo.com/api/v1/event/prebid' +}); +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: kargoAdapter, + code: 'kargo' +}); +/* harmony default export */ __webpack_exports__["default"] = (kargoAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[474]); \ No newline at end of file diff --git a/build/dist/kargoBidAdapter.js b/build/dist/kargoBidAdapter.js new file mode 100644 index 00000000000..c6809ac3a07 --- /dev/null +++ b/build/dist/kargoBidAdapter.js @@ -0,0 +1,281 @@ +pbjsChunk([191],{ + +/***/ 476: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(477); + + +/***/ }), + +/***/ 477: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'kargo'; +var HOST = 'https://krk.kargo.com'; +var SYNC = 'https://crb.kargo.com/api/v1/initsyncrnd/{UUID}?seed={SEED}&idx={INDEX}'; +var SYNC_COUNT = 5; +var sessionId, lastPageUrl, requestCounter; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + if (!bid || !bid.params) { + return false; + } + + return !!bid.params.placementId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var currencyObj = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('currency'); + var currency = currencyObj && currencyObj.adServerCurrency || 'USD'; + var bidIds = {}; + var bidSizes = {}; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + bidIds[bid.bidId] = bid.params.placementId; + bidSizes[bid.bidId] = bid.sizes; + }); + + var tdid; + + if (validBidRequests.length > 0 && validBidRequests[0].userId && validBidRequests[0].userId.tdid) { + tdid = validBidRequests[0].userId.tdid; + } + + var transformedParams = _extends({}, { + sessionId: spec._getSessionId(), + requestCount: spec._getRequestCount(), + timeout: bidderRequest.timeout, + currency: currency, + cpmGranularity: 1, + timestamp: new Date().getTime(), + cpmRange: { + floor: 0, + ceil: 20 + }, + bidIDs: bidIds, + bidSizes: bidSizes, + prebidRawBidRequests: validBidRequests + }, spec._getAllMetadata(tdid, bidderRequest.uspConsent)); + + var encodedParams = encodeURIComponent(JSON.stringify(transformedParams)); + return _extends({}, bidderRequest, { + method: 'GET', + url: "".concat(HOST, "/api/v2/bid"), + data: "json=".concat(encodedParams), + currency: currency + }); + }, + interpretResponse: function interpretResponse(response, bidRequest) { + var bids = response.body; + var bidResponses = []; + + for (var bidId in bids) { + var adUnit = bids[bidId]; + var meta = void 0; + + if (adUnit.metadata && adUnit.metadata.landingPageDomain) { + meta = { + clickUrl: adUnit.metadata.landingPageDomain + }; + } + + bidResponses.push({ + requestId: bidId, + cpm: Number(adUnit.cpm), + width: adUnit.width, + height: adUnit.height, + ad: adUnit.adm, + ttl: 300, + creativeId: adUnit.id, + dealId: adUnit.targetingCustom, + netRevenue: true, + currency: bidRequest.currency, + meta: meta + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + var syncs = []; + + var seed = spec._generateRandomUuid(); + + var clientId = spec._getClientId(); + + if (syncOptions.iframeEnabled && seed && clientId) { + for (var i = 0; i < SYNC_COUNT; i++) { + syncs.push({ + type: 'iframe', + url: SYNC.replace('{UUID}', clientId).replace('{SEED}', seed).replace('{INDEX}', i) + }); + } + } + + return syncs; + }, + // PRIVATE + _readCookie: function _readCookie(name) { + if (!storage.cookiesAreEnabled()) { + return null; + } + + var nameEquals = "".concat(name, "="); + var cookies = document.cookie.split(';'); + + for (var i = 0; i < cookies.length; i++) { + var cookie = cookies[i]; + + while (cookie.charAt(0) === ' ') { + cookie = cookie.substring(1, cookie.length); + } + + if (cookie.indexOf(nameEquals) === 0) { + return cookie.substring(nameEquals.length, cookie.length); + } + } + + return null; + }, + _getCrbFromCookie: function _getCrbFromCookie() { + try { + var crb = JSON.parse(decodeURIComponent(spec._readCookie('krg_crb'))); + + if (crb && crb.v) { + var vParsed = JSON.parse(atob(crb.v)); + + if (vParsed) { + return vParsed; + } + } + + return {}; + } catch (e) { + return {}; + } + }, + _getCrbFromLocalStorage: function _getCrbFromLocalStorage() { + try { + return JSON.parse(atob(spec._getLocalStorageSafely('krg_crb'))); + } catch (e) { + return {}; + } + }, + _getCrb: function _getCrb() { + var localStorageCrb = spec._getCrbFromLocalStorage(); + + if (Object.keys(localStorageCrb).length) { + return localStorageCrb; + } + + return spec._getCrbFromCookie(); + }, + _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 storage.getDataFromLocalStorage(key); + } catch (e) { + return null; + } + }, + _getUserIds: function _getUserIds(tdid, usp) { + var crb = spec._getCrb(); + + var userIds = { + kargoID: crb.userId, + clientID: crb.clientId, + crbIDs: crb.syncIds || {}, + optOut: crb.optOut, + usp: usp + }; + + if (tdid) { + userIds.tdID = tdid; + } + + return userIds; + }, + _getClientId: function _getClientId() { + var crb = spec._getCrb(); + + return crb.clientId; + }, + _getAllMetadata: function _getAllMetadata(tdid, usp) { + return { + userIDs: spec._getUserIds(tdid, usp), + krux: spec._getKrux(), + pageURL: window.location.href, + rawCRB: spec._readCookie('krg_crb'), + rawCRBLocalStorage: spec._getLocalStorageSafely('krg_crb') + }; + }, + _getSessionId: function _getSessionId() { + if (!sessionId) { + sessionId = spec._generateRandomUuid(); + } + + return sessionId; + }, + _getRequestCount: function _getRequestCount() { + if (lastPageUrl === window.location.pathname) { + return ++requestCounter; + } + + lastPageUrl = window.location.pathname; + return requestCounter = 0; + }, + _generateRandomUuid: function _generateRandomUuid() { + try { + // crypto.getRandomValues is supported everywhere but Opera Mini for years + var buffer = new Uint8Array(16); + crypto.getRandomValues(buffer); + buffer[6] = buffer[6] & ~176 | 64; + buffer[8] = buffer[8] & ~64 | 128; + var hex = Array.prototype.map.call(new Uint8Array(buffer), function (x) { + return ('00' + x.toString(16)).slice(-2); + }).join(''); + return hex.slice(0, 8) + '-' + hex.slice(8, 12) + '-' + hex.slice(12, 16) + '-' + hex.slice(16, 20) + '-' + hex.slice(20); + } catch (e) { + return ''; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[476]); \ No newline at end of file diff --git a/build/dist/komoonaBidAdapter.js b/build/dist/komoonaBidAdapter.js new file mode 100644 index 00000000000..1303a6b9bba --- /dev/null +++ b/build/dist/komoonaBidAdapter.js @@ -0,0 +1,160 @@ +pbjsChunk([190],{ + +/***/ 478: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(479); + + +/***/ }), + +/***/ 479: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + +var BIDDER_CODE = 'komoona'; +var ENDPOINT = 'https://bidder.komoona.com/v1/GetSBids'; +var USYNCURL = 'https://s.komoona.com/sync/usync.html'; +var 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 (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](tags)) { + payload = { + bids: _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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[478]); \ No newline at end of file diff --git a/build/dist/konduitAnalyticsAdapter.js b/build/dist/konduitAnalyticsAdapter.js new file mode 100644 index 00000000000..2c5deec2a0e --- /dev/null +++ b/build/dist/konduitAnalyticsAdapter.js @@ -0,0 +1,513 @@ +pbjsChunk([32],{ + +/***/ 480: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(481); + + +/***/ }), + +/***/ 481: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_targeting_js__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__src_constants_json__); +var _eventDataComposerMap; + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +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 TRACKER_HOST = 'tracker.konduit.me'; +var KONDUIT_PREBID_MODULE_VERSION = '1.0.0'; +var analyticsType = 'endpoint'; +var eventDataComposerMap = (_eventDataComposerMap = {}, _defineProperty(_eventDataComposerMap, __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.AUCTION_INIT, obtainAuctionInfo), _defineProperty(_eventDataComposerMap, __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.AUCTION_END, obtainAuctionInfo), _defineProperty(_eventDataComposerMap, __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.BID_REQUESTED, obtainBidRequestsInfo), _defineProperty(_eventDataComposerMap, __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.BID_TIMEOUT, obtainBidTimeoutInfo), _defineProperty(_eventDataComposerMap, __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.BID_RESPONSE, obtainBidResponseInfo), _defineProperty(_eventDataComposerMap, __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.BID_WON, obtainWinnerBidInfo), _defineProperty(_eventDataComposerMap, __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.NO_BID, obtainNoBidInfo), _eventDataComposerMap); // This function is copy from prebid core + +function formatQS(query) { + return Object.keys(query).map(function (k) { + return Array.isArray(query[k]) ? query[k].map(function (v) { + return "".concat(k, "[]=").concat(v); + }).join('&') : "".concat(k, "=").concat(query[k]); + }).join('&'); +} // This function is copy from prebid core + + +function buildUrl(obj) { + return (obj.protocol || 'http') + '://' + (obj.host || obj.hostname + (obj.port ? ":".concat(obj.port) : '')) + (obj.pathname || '') + (obj.search ? "?".concat(formatQS(obj.search || '')) : '') + (obj.hash ? "#".concat(obj.hash) : ''); +} + +var getWinnerBidFromAggregatedEvents = function getWinnerBidFromAggregatedEvents() { + return konduitAnalyticsAdapter.context.aggregatedEvents.filter(function (evt) { + return evt.eventType === __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.BID_WON; + })[0]; +}; + +var isWinnerBidDetected = function isWinnerBidDetected() { + return !!getWinnerBidFromAggregatedEvents(); +}; + +var isWinnerBidExist = function isWinnerBidExist() { + return !!__WEBPACK_IMPORTED_MODULE_4__src_targeting_js__["a" /* targeting */].getWinningBids()[0]; +}; + +var konduitAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (__WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.AUCTION_INIT === eventType) { + konduitAnalyticsAdapter.context.aggregatedEvents.splice(0); + } + + if (eventDataComposerMap[eventType]) { + konduitAnalyticsAdapter.context.aggregatedEvents.push({ + eventType: eventType, + data: eventDataComposerMap[eventType](args) + }); + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.AUCTION_END) { + if (!isWinnerBidDetected() && isWinnerBidExist()) { + var bidWonData = eventDataComposerMap[__WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.BID_WON](__WEBPACK_IMPORTED_MODULE_4__src_targeting_js__["a" /* targeting */].getWinningBids()[0]); + konduitAnalyticsAdapter.context.aggregatedEvents.push({ + eventType: __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.BID_WON, + data: bidWonData + }); + } + + sendRequest({ + method: 'POST', + path: '/analytics-initial-event', + payload: composeRequestPayload() + }); + } + } +}); + +function obtainBidTimeoutInfo(args) { + return args.map(function (item) { + return item.bidder; + }).filter(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["uniques"]); +} + +function obtainAuctionInfo(auction) { + return { + auctionId: auction.auctionId, + timestamp: auction.timestamp, + auctionEnd: auction.auctionEnd, + auctionStatus: auction.auctionStatus, + adUnitCodes: auction.adUnitCodes, + labels: auction.labels, + timeout: auction.timeout + }; +} + +function obtainBidRequestsInfo(bidRequests) { + return { + bidderCode: bidRequests.bidderCode, + time: bidRequests.start, + bids: bidRequests.bids.map(function (bid) { + return { + transactionId: bid.transactionId, + adUnitCode: bid.adUnitCode, + bidId: bid.bidId, + startTime: bid.startTime, + sizes: __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["parseSizesInput"](bid.sizes).toString(), + params: bid.params + }; + }) + }; +} + +function obtainBidResponseInfo(bidResponse) { + return { + bidderCode: bidResponse.bidder, + transactionId: bidResponse.transactionId, + adUnitCode: bidResponse.adUnitCode, + statusMessage: bidResponse.statusMessage, + mediaType: bidResponse.mediaType, + renderedSize: bidResponse.size, + cpm: bidResponse.cpm, + currency: bidResponse.currency, + netRevenue: bidResponse.netRevenue, + timeToRespond: bidResponse.timeToRespond, + bidId: bidResponse.bidId, + requestId: bidResponse.requestId, + creativeId: bidResponse.creativeId + }; +} + +function obtainNoBidInfo(bidResponse) { + return { + bidderCode: bidResponse.bidder, + transactionId: bidResponse.transactionId, + adUnitCode: bidResponse.adUnitCode, + bidId: bidResponse.bidId + }; +} + +function obtainWinnerBidInfo(bidResponse) { + return { + adId: bidResponse.adId, + bidderCode: bidResponse.bidder, + adUnitCode: bidResponse.adUnitCode, + statusMessage: bidResponse.statusMessage, + mediaType: bidResponse.mediaType, + renderedSize: bidResponse.size, + cpm: bidResponse.cpm, + currency: bidResponse.currency, + netRevenue: bidResponse.netRevenue, + timeToRespond: bidResponse.timeToRespond, + bidId: bidResponse.requestId, + dealId: bidResponse.dealId, + status: bidResponse.status, + creativeId: bidResponse.creativeId + }; +} + +function composeRequestPayload() { + var konduitId = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('konduit.konduitId'); + var _window$screen = window.screen, + width = _window$screen.width, + height = _window$screen.height; + return { + konduitId: konduitId, + prebidVersion: "4.2.0", + konduitPrebidModuleVersion: KONDUIT_PREBID_MODULE_VERSION, + environment: { + screen: { + width: width, + height: height + }, + language: navigator.language + }, + events: konduitAnalyticsAdapter.context.aggregatedEvents + }; +} + +function sendRequest(_ref2) { + var _ref2$host = _ref2.host, + host = _ref2$host === void 0 ? TRACKER_HOST : _ref2$host, + method = _ref2.method, + path = _ref2.path, + payload = _ref2.payload; + var formattedUrlOptions = { + protocol: 'https', + hostname: host, + pathname: path + }; + + if (method === 'GET') { + formattedUrlOptions.search = payload; + } + + var konduitAnalyticsRequestUrl = buildUrl(formattedUrlOptions); + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(konduitAnalyticsRequestUrl, undefined, method === 'POST' ? JSON.stringify(payload) : null, { + contentType: 'application/json', + method: method, + withCredentials: true + }); +} + +konduitAnalyticsAdapter.originEnableAnalytics = konduitAnalyticsAdapter.enableAnalytics; + +konduitAnalyticsAdapter.enableAnalytics = function (analyticsConfig) { + var konduitId = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('konduit.konduitId'); + + if (!konduitId) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('A konduitId in config is required to use konduitAnalyticsAdapter'); + return; + } + + konduitAnalyticsAdapter.context = { + aggregatedEvents: [] + }; + konduitAnalyticsAdapter.originEnableAnalytics(analyticsConfig); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: konduitAnalyticsAdapter, + code: 'konduit' +}); +/* harmony default export */ __webpack_exports__["default"] = (konduitAnalyticsAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[480]); \ No newline at end of file diff --git a/build/dist/konduitWrapper.js b/build/dist/konduitWrapper.js new file mode 100644 index 00000000000..50642c71a54 --- /dev/null +++ b/build/dist/konduitWrapper.js @@ -0,0 +1,286 @@ +pbjsChunk([189],{ + +/***/ 482: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(483); + + +/***/ }), + +/***/ 483: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "errorMessages", function() { return errorMessages; }); +/* harmony export (immutable) */ __webpack_exports__["processBids"] = processBids; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adServerManager_js__ = __webpack_require__(69); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_targeting_js__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_cpmBucketManager_js__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_auction_js__ = __webpack_require__(40); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_auctionManager_js__ = __webpack_require__(26); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + + + +var SERVER_PROTOCOL = 'https'; +var SERVER_HOST = 'p.konduit.me'; +var KONDUIT_PREBID_MODULE_VERSION = '1.0.0'; +var MODULE_NAME = 'Konduit'; +var KONDUIT_ID_CONFIG = 'konduit.konduitId'; +var SEND_ALL_BIDS_CONFIG = 'enableSendAllBids'; +var errorMessages = { + NO_KONDUIT_ID: 'A konduitId param is required to be in configs', + NO_BIDS: 'No bids received in the auction', + NO_BID: 'A bid was not found', + CACHE_FAILURE: 'A bid was not cached' +}; // This function is copy from prebid core + +function formatQS(query) { + return Object.keys(query).map(function (k) { + return Array.isArray(query[k]) ? query[k].map(function (v) { + return "".concat(k, "[]=").concat(v); + }).join('&') : "".concat(k, "=").concat(query[k]); + }).join('&'); +} // This function is copy from prebid core + + +function buildUrl(obj) { + return (obj.protocol || 'http') + '://' + (obj.host || obj.hostname + (obj.port ? ":".concat(obj.port) : '')) + (obj.pathname || '') + (obj.search ? "?".concat(formatQS(obj.search || '')) : '') + (obj.hash ? "#".concat(obj.hash) : ''); +} + +function addLogLabel(args) { + args = [].slice.call(args); + args.unshift("".concat(MODULE_NAME, ": ")); + return args; +} + +function logInfo() { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"].apply(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__, _toConsumableArray(addLogLabel(arguments))); +} + +function logError() { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"].apply(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__, _toConsumableArray(addLogLabel(arguments))); +} + +function sendRequest(_ref) { + var _ref$host = _ref.host, + host = _ref$host === void 0 ? SERVER_HOST : _ref$host, + _ref$protocol = _ref.protocol, + protocol = _ref$protocol === void 0 ? SERVER_PROTOCOL : _ref$protocol, + _ref$method = _ref.method, + method = _ref$method === void 0 ? 'GET' : _ref$method, + path = _ref.path, + payload = _ref.payload, + callbacks = _ref.callbacks, + timeout = _ref.timeout; + var formattedUrlOptions = { + protocol: protocol, + hostname: host, + pathname: path + }; + + if (method === 'GET') { + formattedUrlOptions.search = payload; + } + + var konduitAnalyticsRequestUrl = buildUrl(formattedUrlOptions); + var ajax = Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["b" /* ajaxBuilder */])(timeout); + ajax(konduitAnalyticsRequestUrl, callbacks, method === 'POST' ? JSON.stringify(payload) : null, { + contentType: 'application/json', + method: method, + withCredentials: true + }); +} + +function composeBidsProcessorRequestPayload(bid) { + return { + auctionId: bid.auctionId, + vastUrl: bid.vastUrl, + bidderCode: bid.bidderCode, + creativeId: bid.creativeId, + adUnitCode: bid.adUnitCode, + cpm: bid.cpm, + currency: bid.currency + }; +} + +function setDefaultKCpmToBid(bid, winnerBid, priceGranularity) { + bid.kCpm = bid.cpm; + + if (!bid.adserverTargeting) { + bid.adserverTargeting = {}; + } + + var kCpm = Object(__WEBPACK_IMPORTED_MODULE_6__src_auction_js__["h" /* getPriceByGranularity */])(priceGranularity)(bid); + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(SEND_ALL_BIDS_CONFIG)) { + bid.adserverTargeting["k_cpm_".concat(bid.bidderCode)] = kCpm; + } + + if (winnerBid.bidderCode === bid.bidderCode && winnerBid.creativeId === bid.creativeId) { + bid.adserverTargeting.k_cpm = kCpm; + } +} + +function addKCpmToBid(kCpm, bid, winnerBid, priceGranularity) { + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isNumber"](kCpm)) { + bid.kCpm = kCpm; + var priceStringsObj = Object(__WEBPACK_IMPORTED_MODULE_5__src_cpmBucketManager_js__["a" /* getPriceBucketString */])(kCpm, __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('customPriceBucket'), __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.granularityMultiplier')); + var calculatedKCpm = priceStringsObj.custom || priceStringsObj[priceGranularity] || priceStringsObj.med; + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(SEND_ALL_BIDS_CONFIG)) { + bid.adserverTargeting["k_cpm_".concat(bid.bidderCode)] = calculatedKCpm; + } + + if (winnerBid.bidderCode === bid.bidderCode && winnerBid.creativeId === bid.creativeId) { + bid.adserverTargeting.k_cpm = calculatedKCpm; + } + } +} + +function addKonduitCacheKeyToBid(cacheKey, bid, winnerBid) { + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](cacheKey)) { + bid.konduitCacheKey = cacheKey; + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(SEND_ALL_BIDS_CONFIG)) { + bid.adserverTargeting["k_cache_key_".concat(bid.bidderCode)] = cacheKey; + } + + if (winnerBid.bidderCode === bid.bidderCode && winnerBid.creativeId === bid.creativeId) { + bid.adserverTargeting.k_cache_key = cacheKey; + bid.adserverTargeting.konduit_cache_key = cacheKey; + } + } +} +/** + * This function accepts an object with bid and tries to cache it while generating k_cache_key for it. + * In addition, it returns a list with updated bid objects where k_cpm key is added + * @param {Object} options + * @param {Object} [options.bid] - a winner bid provided by a client + * @param {Object} [options.bids] - bids array provided by a client for "Send All Bids" scenario + * @param {string} [options.adUnitCode] - ad unit code that is used to get winning bids + * @param {string} [options.timeout] - timeout for Konduit bids processor HTTP request + * @param {function} [options.callback] - callback function to be executed on HTTP request end; the function is invoked with two parameters - error and bids + */ + + +function processBids() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var konduitId = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(KONDUIT_ID_CONFIG); + options = options || {}; + + if (!konduitId) { + logError(errorMessages.NO_KONDUIT_ID); + + if (options.callback) { + options.callback(new Error(errorMessages.NO_KONDUIT_ID), []); + } + + return null; + } + + var publisherBids = options.bids || __WEBPACK_IMPORTED_MODULE_7__src_auctionManager_js__["a" /* auctionManager */].getBidsReceived(); + var winnerBid = options.bid || __WEBPACK_IMPORTED_MODULE_1__src_targeting_js__["a" /* targeting */].getWinningBids(options.adUnitCode, publisherBids)[0]; + var bids = []; + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(SEND_ALL_BIDS_CONFIG)) { + bids.push.apply(bids, _toConsumableArray(publisherBids)); + } else if (winnerBid) { + bids.push(winnerBid); + } + + if (!bids.length) { + logError(errorMessages.NO_BIDS); + + if (options.callback) { + options.callback(new Error(errorMessages.NO_BIDS), []); + } + + return null; + } + + var priceGranularity = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('priceGranularity'); + var bidsToProcess = []; + bids.forEach(function (bid) { + setDefaultKCpmToBid(bid, winnerBid, priceGranularity); + bidsToProcess.push(composeBidsProcessorRequestPayload(bid)); + }); + sendRequest({ + method: 'POST', + path: '/api/bidsProcessor', + timeout: options.timeout || 1000, + payload: { + clientId: konduitId, + konduitPrebidModuleVersion: KONDUIT_PREBID_MODULE_VERSION, + enableSendAllBids: __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(SEND_ALL_BIDS_CONFIG), + bids: bidsToProcess, + bidResponsesCount: __WEBPACK_IMPORTED_MODULE_7__src_auctionManager_js__["a" /* auctionManager */].getBidsReceived().length + }, + callbacks: { + success: function success(data) { + var error = null; + logInfo('Bids processed successfully ', data); + + try { + var _JSON$parse = JSON.parse(data), + kCpmData = _JSON$parse.kCpmData, + cacheData = _JSON$parse.cacheData; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](cacheData)) { + throw new Error(errorMessages.CACHE_FAILURE); + } + + winnerBid.adserverTargeting.konduit_id = konduitId; + winnerBid.adserverTargeting.k_id = konduitId; + bids.forEach(function (bid) { + var processedBidKey = "".concat(bid.bidderCode, ":").concat(bid.creativeId); + addKCpmToBid(kCpmData[processedBidKey], bid, winnerBid, priceGranularity); + addKonduitCacheKeyToBid(cacheData[processedBidKey], bid, winnerBid); + }); + } catch (err) { + error = err; + logError('Error parsing JSON response for bidsProcessor data: ', err); + } + + if (options.callback) { + options.callback(error, bids); + } + }, + error: function error(_error) { + logError('Bids were not processed successfully ', _error); + + if (options.callback) { + options.callback(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](_error) ? new Error(_error) : _error, bids); + } + } + } + }); +} +Object(__WEBPACK_IMPORTED_MODULE_0__src_adServerManager_js__["a" /* registerVideoSupport */])('konduit', { + processBids: processBids +}); + +/***/ }) + +},[482]); \ No newline at end of file diff --git a/build/dist/lemmaBidAdapter.js b/build/dist/lemmaBidAdapter.js new file mode 100644 index 00000000000..29e70c1269d --- /dev/null +++ b/build/dist/lemmaBidAdapter.js @@ -0,0 +1,493 @@ +pbjsChunk([188],{ + +/***/ 484: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(485); + + +/***/ }), + +/***/ 485: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'lemma'; +var LOG_WARN_PREFIX = 'LEMMA: '; +var ENDPOINT = 'https://ads.lemmatechnologies.com/lemma/servad'; +var DEFAULT_CURRENCY = 'USD'; +var AUCTION_TYPE = 2; +var DEFAULT_TMAX = 300; +var DEFAULT_NET_REVENUE = false; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (bid && bid.params) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.params.pubId)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: publisherId is mandatory and cannot be string. Call to OpenBid will not be sent for ad unit: ' + JSON.stringify(bid)); + return false; + } + + if (!bid.params.adunitId) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: adUnitId is mandatory. Call to OpenBid will not be sent for ad unit: ' + JSON.stringify(bid)); + return false; + } // video ad validation + + + if (bid.params.hasOwnProperty('video')) { + if (!bid.params.video.hasOwnProperty('mimes') || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.params.video.mimes) || bid.params.video.mimes.length === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: For video ads, mimes is mandatory and must specify atlease 1 mime value. Call to OpenBid will not be sent for ad unit:' + JSON.stringify(bid)); + return false; + } + } + + return true; + } + + return false; + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var refererInfo; + + if (bidderRequest && bidderRequest.refererInfo) { + refererInfo = bidderRequest.refererInfo; + } + + var conf = _initConf(refererInfo); + + var request = oRTBTemplate(bidRequests, conf); + + if (request.imp.length == 0) { + return; + } + + setOtherParams(bidderRequest, request); + var endPoint = endPointURL(bidRequests); + return { + method: 'POST', + url: endPoint, + data: JSON.stringify(request) + }; + }, + interpretResponse: function interpretResponse(response, request) { + return parseRTBResponse(request, response.body); + } +}; + +function _initConf(refererInfo) { + var conf = {}; + conf.pageURL = refererInfo && refererInfo.referer ? refererInfo.referer : window.location.href; + + if (refererInfo && refererInfo.referer) { + conf.refURL = refererInfo.referer; + } else { + conf.refURL = ''; + } + + return conf; +} + +function parseRTBResponse(request, response) { + var bidResponses = []; + + try { + if (response.seatbid) { + var currency = response.curr || DEFAULT_CURRENCY; + var seatbid = response.seatbid; + seatbid.forEach(function (seatbidder) { + var bidder = seatbidder.bid; + bidder.forEach(function (bid) { + var req = parse(request.data); + var newBid = { + requestId: bid.impid, + cpm: parseFloat(bid.price).toFixed(2), + width: bid.w, + height: bid.h, + creativeId: bid.crid, + currency: currency, + netRevenue: DEFAULT_NET_REVENUE, + ttl: 300, + referrer: req.site.ref, + ad: bid.adm + }; + + if (bid.dealid) { + newBid.dealId = bid.dealid; + } + + if (req.imp && req.imp.length > 0) { + newBid.mediaType = req.mediaType; + req.imp.forEach(function (robj) { + if (bid.impid === robj.id) { + switch (newBid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]: + newBid.width = bid.hasOwnProperty('w') ? bid.w : robj.video.w; + newBid.height = bid.hasOwnProperty('h') ? bid.h : robj.video.h; + newBid.vastXml = bid.adm; + break; + } + } + }); + } + + bidResponses.push(newBid); + }); + }); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_WARN_PREFIX, 'ERROR ', error); + } + + return bidResponses; +} + +function oRTBTemplate(bidRequests, conf) { + try { + var oRTBObject = { + id: '' + new Date().getTime(), + at: AUCTION_TYPE, + tmax: DEFAULT_TMAX, + cur: [DEFAULT_CURRENCY], + imp: _getImpressionArray(bidRequests), + user: {}, + ext: {} + }; + var bid = bidRequests[0]; + + var app = _getAppObject(bid); + + var site = _getSiteObject(bid, conf); + + var device = _getDeviceObject(bid); + + if (app) { + oRTBObject.app = app; + } + + if (site) { + oRTBObject.site = site; + } + + if (device) { + oRTBObject.device = device; + } + + return oRTBObject; + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_WARN_PREFIX, 'ERROR ', ex); + } +} + +function _getImpressionArray(request) { + var impArray = []; + var map = request.map(function (bid) { + return _getImpressionObject(bid); + }); + + if (map) { + map.forEach(function (o) { + if (o) { + impArray.push(o); + } + }); + } + + return impArray; +} + +function endPointURL(request) { + var params = request && request[0].params ? request[0].params : null; + + if (params) { + var pubId = params.pubId ? params.pubId : 0; + var adunitId = params.adunitId ? params.adunitId : 0; + return ENDPOINT + '?pid=' + pubId + '&aid=' + adunitId; + } + + return null; +} + +function _getDomain(url) { + var a = document.createElement('a'); + a.setAttribute('href', url); + return a.hostname; +} + +function _getSiteObject(request, conf) { + var params = request && request.params ? request.params : null; + + if (params) { + var pubId = params.pubId ? params.pubId : '0'; + var siteId = params.siteId ? params.siteId : '0'; + var appParams = params.app; + + if (!appParams) { + return { + publisher: { + id: pubId.toString() + }, + domain: _getDomain(conf.pageURL), + id: siteId.toString(), + ref: conf.refURL, + page: conf.pageURL + }; + } + } + + return null; +} + +function _getAppObject(request) { + var params = request && request.params ? request.params : null; + + if (params) { + var pubId = params.pubId ? params.pubId : 0; + var appParams = params.app; + + if (appParams) { + return { + publisher: { + id: pubId.toString() + }, + id: appParams.id, + name: appParams.name, + bundle: appParams.bundle, + storeurl: appParams.storeUrl, + domain: appParams.domain, + cat: appParams.categories, + pagecat: appParams.page_category + }; + } + } + + return null; +} + +function _getDeviceObject(request) { + var params = request && request.params ? request.params : null; + + if (params) { + return { + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0, + ua: navigator.userAgent, + language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage, + w: window.screen.width || window.innerWidth, + h: window.screen.height || window.innerHeigh, + geo: { + country: params.country, + lat: params.latitude, + lon: params.longitude, + region: params.region, + city: params.city, + zip: params.zip + }, + ip: params.ip, + devicetype: params.device_type, + ifa: params.ifa + }; + } + + return null; +} + +function setOtherParams(request, ortbRequest) { + var params = request && request.params ? request.params : null; + + if (request && request.gdprConsent) { + ortbRequest.regs = { + ext: { + gdpr: request.gdprConsent.gdprApplies ? 1 : 0 + } + }; + ortbRequest.user = { + ext: { + consent: request.gdprConsent.consentString + } + }; + } + + if (params) { + ortbRequest.tmax = params.tmax; + ortbRequest.bcat = params.bcat; + } +} + +function _getSizes(request) { + if (request.sizes && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](request.sizes[0]) && request.sizes[0].length > 0) { + return request.sizes[0]; + } + + return null; +} + +function _getBannerRequest(bid) { + var bObj; + var adFormat = []; + + if (bid.mediaType === 'banner' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner')) { + var params = bid ? bid.params : null; + var bannerData = params.banner; + var sizes = _getSizes(bid) || []; + + if (sizes && sizes.length == 0) { + sizes = bid.mediaTypes.banner.sizes[0]; + } + + if (sizes && sizes.length > 0) { + bObj = {}; + bObj.w = sizes[0]; + bObj.h = sizes[1]; + bObj.pos = 0; + + if (bannerData) { + bObj = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](bannerData); + } + + sizes = bid.mediaTypes.banner.sizes; + + if (sizes.length > 0) { + adFormat = []; + sizes.forEach(function (size) { + if (size.length > 1) { + adFormat.push({ + w: size[0], + h: size[1] + }); + } + }); + + if (adFormat.length > 0) { + bObj.format = adFormat; + } + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: mediaTypes.banner.sizes missing for adunit: ' + bid.params.adunitId); + } + } + + return bObj; +} + +function _getVideoRequest(bid) { + var vObj; + + if (bid.mediaType === 'video' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video')) { + var params = bid ? bid.params : null; + var sizes = _getSizes(bid) || []; + + if (sizes && sizes.length == 0) { + sizes = bid.mediaTypes && bid.mediaTypes.video ? bid.mediaTypes.video.playerSize : []; + } + + if (sizes && sizes.length > 0) { + var videoData = params.video; + vObj = {}; + + if (videoData) { + vObj = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](videoData); + } + + vObj.w = sizes[0]; + vObj.h = sizes[1]; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: mediaTypes.video.sizes missing for adunit: ' + bid.params.adunitId); + } + } + + return vObj; +} + +function _getImpressionObject(bid) { + var impression = {}; + var bObj; + var vObj; + var sizes = bid.hasOwnProperty('sizes') ? bid.sizes : []; + var mediaTypes = ''; + var format = []; + var params = bid && bid.params ? bid.params : null; + impression = { + id: bid.bidId, + tagid: params.adunitId ? params.adunitId.toString() : undefined, + secure: window.location.protocol === 'https:' ? 1 : 0, + bidfloorcur: params.currency ? params.currency : DEFAULT_CURRENCY + }; + + if (params.bidFloor) { + impression.bidfloor = params.bidFloor; + } + + if (bid.hasOwnProperty('mediaTypes')) { + for (mediaTypes in bid.mediaTypes) { + switch (mediaTypes) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + bObj = _getBannerRequest(bid); + + if (bObj) { + impression.banner = bObj; + } + + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]: + vObj = _getVideoRequest(bid); + + if (vObj) { + impression.video = vObj; + } + + break; + } + } + } else { + bObj = { + pos: 0, + w: sizes && sizes[0] ? sizes[0][0] : 0, + h: sizes && sizes[0] ? sizes[0][1] : 0 + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes) && sizes.length > 1) { + sizes = sizes.splice(1, sizes.length - 1); + sizes.forEach(function (size) { + format.push({ + w: size[0], + h: size[1] + }); + }); + bObj.format = format; + } + + impression.banner = bObj; + } + + return impression.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]) || impression.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]) ? impression : undefined; +} + +function parse(rawResp) { + try { + if (rawResp) { + return JSON.parse(rawResp); + } + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_WARN_PREFIX, 'ERROR', ex); + } + + return null; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[484]); \ No newline at end of file diff --git a/build/dist/lifestreetBidAdapter.js b/build/dist/lifestreetBidAdapter.js new file mode 100644 index 00000000000..61c64e20b52 --- /dev/null +++ b/build/dist/lifestreetBidAdapter.js @@ -0,0 +1,184 @@ +pbjsChunk([187],{ + +/***/ 486: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(487); + + +/***/ }), + +/***/ 487: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +function _templateObject() { + var data = _taggedTemplateLiteral(["https://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=", ""]); + + _templateObject = function _templateObject() { + return data; + }; + + return data; +} + +function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + + + + +var BIDDER_CODE = 'lifestreet'; +var ADAPTER_VERSION = "4.2.0"; +var urlTemplate = template(_templateObject(), 'adapter', 'slot', 'adkey', 'ad_size', 'location', 'referrer', 'wn', 'sf', 'fif', 'if', 'stamp', 'hbver'); +/** + * A helper function for template to generate string from boolean + */ + +function boolToString(value) { + return value ? '1' : '0'; +} +/** + * A helper function to form URL from the template + */ + + +function template(strings) { + for (var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + keys[_key - 1] = arguments[_key]; + } + + return function () { + for (var _len2 = arguments.length, values = new 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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isInteger"](key) ? values[key] : dict[key]; + result.push(value, strings[i + 1]); + }); + return result.join(''); + }; +} +/** + * Creates a bid requests for a given bid. + * + * @param {BidRequest} bid The bid params to use for formatting a request + */ + + +function formatBidRequest(bid) { + var bidderRequest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var params = bid.params; + + var _ref = bidderRequest.refererInfo || {}, + referer = _ref.referer; + + var url = urlTemplate({ + adapter: 'prebid', + slot: params.slot, + adkey: params.adkey, + ad_size: params.ad_size, + location: referer, + referrer: referer, + 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 + }); + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.gdprApplies !== undefined) { + var gdpr = '&__gdpr=' + (bidderRequest.gdprConsent.gdprApplies ? '1' : '0'); + url += gdpr; + } + + if (bidderRequest.gdprConsent.consentString !== undefined) { + url += "&__consent=".concat(bidderRequest.gdprConsent.consentString); + } + } // ccpa support + + + if (bidderRequest.uspConsent) { + url += "&__us_privacy=".concat(bidderRequest.uspConsent); + } + + return { + method: 'GET', + url: url, + bidId: bid.bidId + }; +} + +function isResponseValid(response) { + return !/^\s*\{\s*"advertisementAvailable"\s*:\s*false/i.test(response.content) && response.content.indexOf('') === -1 && typeof response.cpm !== 'undefined' && response.status === 1; +} + +var spec = { + code: BIDDER_CODE, + aliases: ['lsm'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid() { + var bid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var _bid$params = bid.params, + params = _bid$params === void 0 ? {} : _bid$params; + return !!(params.slot && params.adkey && params.ad_size); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bid) { + return formatBidRequest(bid, bidderRequest); + }); + }, + 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 = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + } else { + bidResponse.ad = response.content; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } + + bidResponses.push(bidResponse); + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[486]); \ No newline at end of file diff --git a/build/dist/liveIntentIdSystem.js b/build/dist/liveIntentIdSystem.js new file mode 100644 index 00000000000..d78c47206e2 --- /dev/null +++ b/build/dist/liveIntentIdSystem.js @@ -0,0 +1,2748 @@ +pbjsChunk([31],{ + +/***/ 488: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(489); + + +/***/ }), + +/***/ 489: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (immutable) */ __webpack_exports__["reset"] = reset; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "liveIntentIdSubmodule", function() { return liveIntentIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_live_connect_js_cjs_live_connect_js__ = __webpack_require__(490); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_live_connect_js_cjs_live_connect_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_live_connect_js_cjs_live_connect_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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; } + +/** + * This module adds LiveIntentId to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/liveIntentIdSystem + * @requires module:modules/userId + */ + + + + + + +var MODULE_NAME = 'liveIntentId'; +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(null, MODULE_NAME); +var eventFired = false; +var liveConnect = null; +/** + * This function is used in tests + */ + +function reset() { + if (window && window.liQ) { + window.liQ = []; + } + + eventFired = false; + liveConnect = null; +} + +function parseLiveIntentCollectorConfig(collectConfig) { + var config = {}; + + if (collectConfig) { + if (collectConfig.appId) { + config.appId = collectConfig.appId; + } + + if (collectConfig.fpiStorageStrategy) { + config.storageStrategy = collectConfig.fpiStorageStrategy; + } + + if (collectConfig.fpiExpirationDays) { + config.expirationDays = collectConfig.fpiExpirationDays; + } + + if (collectConfig.collectorUrl) { + config.collectorUrl = collectConfig.collectorUrl; + } + } + + return config; +} + +function initializeLiveConnect(configParams) { + configParams = configParams || {}; + + if (liveConnect) { + return liveConnect; + } + + var publisherId = configParams.publisherId || 'any'; + var identityResolutionConfig = { + source: 'prebid', + publisherId: publisherId + }; + + if (configParams.url) { + identityResolutionConfig.url = configParams.url; + } + + if (configParams.partner) { + identityResolutionConfig.source = configParams.partner; + } + + var liveConnectConfig = parseLiveIntentCollectorConfig(configParams.liCollectConfig); + liveConnectConfig.wrapperName = 'prebid'; + liveConnectConfig.identityResolutionConfig = identityResolutionConfig; + liveConnectConfig.identifiersToResolve = configParams.identifiersToResolve || []; + var usPrivacyString = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["uspDataHandler"].getConsentData(); + + if (usPrivacyString) { + liveConnectConfig.usPrivacyString = usPrivacyString; + } // The second param is the storage object, which means that all LS & Cookie manipulation will go through PBJS utils. + + + liveConnect = Object(__WEBPACK_IMPORTED_MODULE_3_live_connect_js_cjs_live_connect_js__["LiveConnect"])(liveConnectConfig, storage); + return liveConnect; +} + +function tryFireEvent() { + if (!eventFired && liveConnect) { + liveConnect.fire(); + eventFired = true; + } +} +/** @type {Submodule} */ + + +var liveIntentIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: MODULE_NAME, + + /** + * decode the stored id value for passing to bid requests. Note that lipb object is a wrapper for everything, and + * internally it could contain more data other than `lipbid`(e.g. `segments`) depending on the `partner` and + * `publisherId` params. + * @function + * @param {{unifiedId:string}} value + * @param {SubmoduleParams|undefined} [configParams] + * @returns {{lipb:Object}} + */ + decode: function decode(value, configParams) { + function composeIdObject(value) { + var base = { + 'lipbid': value['unifiedId'] + }; + delete value.unifiedId; + return { + 'lipb': _objectSpread(_objectSpread({}, base), value) + }; + } + + if (!liveConnect) { + initializeLiveConnect(configParams); + } + + tryFireEvent(); + return value && typeof value['unifiedId'] === 'string' ? composeIdObject(value) : undefined; + }, + + /** + * performs action to obtain id and return a value in the callback's response argument + * @function + * @param {SubmoduleParams} [configParams] + * @returns {IdResponse|undefined} + */ + getId: function getId(configParams) { + var liveConnect = initializeLiveConnect(configParams); + + if (!liveConnect) { + return; + } + + tryFireEvent(); // Don't do the internal ajax call, but use the composed url and fire it via PBJS ajax module + + var url = liveConnect.resolutionCallUrl(); + + var result = function result(callback) { + var callbacks = { + success: function success(response) { + var responseObj = {}; + + if (response) { + try { + responseObj = JSON.parse(response); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + } + + callback(responseObj); + }, + error: function error(_error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(MODULE_NAME, ": ID fetch encountered an error: "), _error); + callback(); + } + }; + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(url, callbacks, undefined, { + method: 'GET', + withCredentials: true + }); + }; + + return { + callback: result + }; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', liveIntentIdSubmodule); + +/***/ }), + +/***/ 490: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(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 ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + + return keys; +} + +function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys(Object(source), true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; +} + +var UUID = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'; +var uuidRegex = new RegExp("^".concat(UUID, "$"), 'i'); +/** + * @param {*} value + * @returns {string} + */ + +function safeToString(value) { + return _typeof(value) === 'object' ? JSON.stringify(value) : '' + value; +} +function isUUID(value) { + return value && uuidRegex.test(trim(value)); +} +/** + * @param {*} arr + * @returns {boolean} + */ + +function isArray(arr) { + return Object.prototype.toString.call(arr) === '[object Array]'; +} +var hasTrim = !!String.prototype.trim; +/** + * @param value + * @return {string} + */ + +function trim(value) { + return hasTrim ? ('' + value).trim() : ('' + value).replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); +} +/** + * @param {*} str + * @returns {boolean} + */ + +function isString(str) { + return typeof str === 'string'; +} +/** + * @param fistStr + * @param secondStr + * @return {boolean} + */ + +function strEqualsIgnoreCase(fistStr, secondStr) { + return isString(fistStr) && isString(secondStr) && trim(fistStr.toLowerCase()) === trim(secondStr.toLowerCase()); +} +/** + * @param obj + * @return {boolean} + */ + +function isObject(obj) { + return !!obj && _typeof(obj) === 'object' && !isArray(obj); +} +/** + * @param fun + * @return {boolean} + */ + +function isFunction(fun) { + return fun && typeof fun === 'function'; +} +/** + * Returns the string representation when something should expire + * @param expires + * @return {string} + */ + +function expiresInDays(expires) { + return new Date(new Date().getTime() + expires * 864e5).toUTCString(); +} + +/** + * @param {LiveConnectConfiguration} liveConnectConfig + * @param {function} onload + * @returns {{send: *}} + * @constructor + */ +function PixelSender(liveConnectConfig, onload, presend) { + var url = liveConnectConfig && liveConnectConfig.collectorUrl || 'https://rp.liadm.com'; + /** + * @param {StateWrapper} state + * @private + */ + + function _send(state) { + if (state.sendsPixel()) { + if (isFunction(presend)) { + presend(); + } + + var img = new window.Image(); + var now = new Date(); + var utcMillis = new Date(now.toUTCString()).getTime() + now.getMilliseconds(); + var latest = "dtstmp=".concat(utcMillis); + var queryString = state.asQueryString(); + var withDt = queryString ? "&".concat(latest) : "?".concat(latest); + img.src = "".concat(url, "/p").concat(queryString).concat(withDt); + + if (isFunction(onload)) { + img.onload = onload; + } + } + } + + return { + send: _send + }; +} + +/** + * Implementation of atob() according to the HTML and Infra specs, except that + * instead of throwing INVALID_CHARACTER_ERR we return null. + */ + +function atob(data) { + // Web IDL requires DOMStrings to just be converted using ECMAScript + // ToString, which in our case amounts to using a template literal. + data = "".concat(data); // "Remove all ASCII whitespace from data." + + data = data.replace(/[ \t\n\f\r]/g, ""); // "If data's length divides by 4 leaving no remainder, then: if data ends + // with one or two U+003D (=) code points, then remove them from data." + + if (data.length % 4 === 0) { + data = data.replace(/==?$/, ""); + } // "If data's length divides by 4 leaving a remainder of 1, then return + // failure." + // + // "If data contains a code point that is not one of + // + // U+002B (+) + // U+002F (/) + // ASCII alphanumeric + // + // then return failure." + + + if (data.length % 4 === 1 || /[^+/0-9A-Za-z]/.test(data)) { + return null; + } // "Let output be an empty byte sequence." + + + var output = ""; // "Let buffer be an empty buffer that can have bits appended to it." + // + // We append bits via left-shift and or. accumulatedBits is used to track + // when we've gotten to 24 bits. + + var buffer = 0; + var accumulatedBits = 0; // "Let position be a position variable for data, initially pointing at the + // start of data." + // + // "While position does not point past the end of data:" + + for (var i = 0; i < data.length; i++) { + // "Find the code point pointed to by position in the second column of + // Table 1: The Base 64 Alphabet of RFC 4648. Let n be the number given in + // the first cell of the same row. + // + // "Append to buffer the six bits corresponding to n, most significant bit + // first." + // + // atobLookup() implements the table from RFC 4648. + buffer <<= 6; + buffer |= atobLookup(data[i]); + accumulatedBits += 6; // "If buffer has accumulated 24 bits, interpret them as three 8-bit + // big-endian numbers. Append three bytes with values equal to those + // numbers to output, in the same order, and then empty buffer." + + if (accumulatedBits === 24) { + output += String.fromCharCode((buffer & 0xff0000) >> 16); + output += String.fromCharCode((buffer & 0xff00) >> 8); + output += String.fromCharCode(buffer & 0xff); + buffer = accumulatedBits = 0; + } // "Advance position by 1." + + } // "If buffer is not empty, it contains either 12 or 18 bits. If it contains + // 12 bits, then discard the last four and interpret the remaining eight as + // an 8-bit big-endian number. If it contains 18 bits, then discard the last + // two and interpret the remaining 16 as two 8-bit big-endian numbers. Append + // the one or two bytes with values equal to those one or two numbers to + // output, in the same order." + + + if (accumulatedBits === 12) { + buffer >>= 4; + output += String.fromCharCode(buffer); + } else if (accumulatedBits === 18) { + buffer >>= 2; + output += String.fromCharCode((buffer & 0xff00) >> 8); + output += String.fromCharCode(buffer & 0xff); + } // "Return output." + + + return output; +} +/** + * A lookup table for atob(), which converts an ASCII character to the + * corresponding six-bit number. + */ + + +function atobLookup(chr) { + if (/[A-Z]/.test(chr)) { + return chr.charCodeAt(0) - "A".charCodeAt(0); + } + + if (/[a-z]/.test(chr)) { + return chr.charCodeAt(0) - "a".charCodeAt(0) + 26; + } + + if (/[0-9]/.test(chr)) { + return chr.charCodeAt(0) - "0".charCodeAt(0) + 52; + } + + if (chr === "+") { + return 62; + } + + if (chr === "/") { + return 63; + } // Throw exception; should not be hit in tests + + + return undefined; +} + +var atob_1 = atob; + +/** + * btoa() as defined by the HTML and Infra specs, which mostly just references + * RFC 4648. + */ + +function btoa(s) { + var i; // String conversion as required by Web IDL. + + s = "".concat(s); // "The btoa() method must throw an "InvalidCharacterError" DOMException if + // data contains any character whose code point is greater than U+00FF." + + for (i = 0; i < s.length; i++) { + if (s.charCodeAt(i) > 255) { + return null; + } + } + + var out = ""; + + for (i = 0; i < s.length; i += 3) { + var groupsOfSix = [undefined, undefined, undefined, undefined]; + groupsOfSix[0] = s.charCodeAt(i) >> 2; + groupsOfSix[1] = (s.charCodeAt(i) & 0x03) << 4; + + if (s.length > i + 1) { + groupsOfSix[1] |= s.charCodeAt(i + 1) >> 4; + groupsOfSix[2] = (s.charCodeAt(i + 1) & 0x0f) << 2; + } + + if (s.length > i + 2) { + groupsOfSix[2] |= s.charCodeAt(i + 2) >> 6; + groupsOfSix[3] = s.charCodeAt(i + 2) & 0x3f; + } + + for (var j = 0; j < groupsOfSix.length; j++) { + if (typeof groupsOfSix[j] === "undefined") { + out += "="; + } else { + out += btoaLookup(groupsOfSix[j]); + } + } + } + + return out; +} +/** + * Lookup table for btoa(), which converts a six-bit number into the + * corresponding ASCII character. + */ + + +function btoaLookup(idx) { + if (idx < 26) { + return String.fromCharCode(idx + "A".charCodeAt(0)); + } + + if (idx < 52) { + return String.fromCharCode(idx - 26 + "a".charCodeAt(0)); + } + + if (idx < 62) { + return String.fromCharCode(idx - 52 + "0".charCodeAt(0)); + } + + if (idx === 62) { + return "+"; + } + + if (idx === 63) { + return "/"; + } // Throw INVALID_CHARACTER_ERR exception here -- won't be hit in the tests. + + + return undefined; +} + +var btoa_1 = btoa; + +var abab = { + atob: atob_1, + btoa: btoa_1 +}; +var abab_2 = abab.btoa; + +/** + * @param {string} s + * @returns {string} + * @private + */ + +function _safeBtoa(s) { + var res = abab_2(s); + return res || ''; +} +/** + * @type {RegExp} + * @private + */ + + +var _base64encodeRegex = /[+/]|=+$/g; +/** + * @type {{'+': string, '/': string}} + * @private + */ + +var _base64ToUrlEncodedChars = { + '+': '-', + '/': '_' +}; +/** + * @param {char} x + * @returns {*|string} + * @private + */ + +function _replaceBase64Chars(x) { + return _base64ToUrlEncodedChars[x] || ''; +} +/** + * @param {string} s + * @returns {*} + */ + + +function base64UrlEncode(s) { + var btoa = null; // First we escape the string using encodeURIComponent to get the UTF-8 encoding of the characters, + // then we convert the percent encodings into raw bytes, and finally feed it to btoa() function. + + var utf8Bytes = encodeURIComponent(s).replace(/%([0-9A-F]{2})/g, function (match, p1) { + return String.fromCharCode('0x' + p1); + }); + + try { + btoa = window && isFunction(window.btoa) ? window.btoa : _safeBtoa; + } catch (e) { + btoa = _safeBtoa; + } + + return btoa(utf8Bytes).replace(_base64encodeRegex, _replaceBase64Chars); +} + +var EVENT_BUS_NAMESPACE = '__li__evt_bus'; +var ERRORS_PREFIX = 'li_errors'; +var PIXEL_SENT_PREFIX = 'lips'; +var PRELOAD_PIXEL = 'pre_lips'; + +function _emit(prefix, message) { + window && window[EVENT_BUS_NAMESPACE] && window[EVENT_BUS_NAMESPACE].emit(prefix, message); +} + +function send(prefix, message) { + _emit(prefix, message); +} +function error(name, message, e) { + var wrapped = new Error(message || e.message); + wrapped.stack = e.stack; + wrapped.name = name || 'unknown error'; + wrapped.lineNumber = e.lineNumber; + wrapped.columnNumber = e.columnNumber; + + _emit(ERRORS_PREFIX, wrapped); +} + +var emailRegex = function emailRegex() { + return /\S+(@|%40)\S+\.\S+/; +}; +/** + * @param {string} s + * @returns {boolean} + */ + + +function isEmail(s) { + return emailRegex().test(s); +} +var emailLikeRegex = /"([^"]+(@|%40)[^"]+[.][a-z]*(\s+)?)(\\"|")/; +/** + * @param {string} s + * @returns {boolean} + */ + +function containsEmailField(s) { + return emailLikeRegex.test(s); +} +function extractEmail(s) { + var result = s.match(emailRegex()); + return result && result.map(trim)[0]; +} +/** + * @param {string} s + * @returns {string[]} + */ + +function listEmailsInString(s) { + var result = []; + var multipleEmailLikeRegex = new RegExp(emailLikeRegex.source, 'g'); + var current = multipleEmailLikeRegex.exec(s); + + while (current) { + result.push(trim(current[1])); + current = multipleEmailLikeRegex.exec(s); + } + + return result; +} + +var MASK = '*********'; +function replacer(key, value) { + if (typeof value === 'string' && isEmail(trim(value))) { + return MASK; + } else { + return value; + } +} + +for (var r = [], o = 0; o < 64;) { + r[o] = 0 | 4294967296 * Math.sin(++o % Math.PI); +} + +function md5 (t) { + var e, + f, + n, + a = [e = 1732584193, f = 4023233417, ~e, ~f], + c = [], + h = unescape(encodeURI(t)) + "€", + u = h.length; + + for (t = --u / 4 + 2 | 15, c[--t] = 8 * u; ~u;) { + c[u >> 2] |= h.charCodeAt(u) << 8 * u--; + } + + for (o = h = 0; o < t; o += 16) { + for (u = a; h < 64; u = [n = u[3], e + ((n = u[0] + [e & f | ~e & n, n & e | ~n & f, e ^ f ^ n, f ^ (e | ~n)][u = h >> 4] + r[h] + ~~c[o | 15 & [h, 5 * h + 1, 3 * h + 5, 7 * h][u]]) << (u = [7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21][4 * u + h++ % 4]) | n >>> -u), e, f]) { + e = 0 | u[1], f = u[2]; + } + + for (h = 4; h;) { + a[--h] += u[h]; + } + } + + for (t = ""; h < 32;) { + t += (a[h >> 3] >> 4 * (1 ^ h++) & 15).toString(16); + } + + return t; +} + +function sha1 (r) { + var o, + e, + t, + f, + n, + a = [], + c = [e = 1732584193, t = 4023233417, ~e, ~t, 3285377520], + u = [], + d = unescape(encodeURI(r)) + "€", + g = d.length; + + for (u[r = --g / 4 + 2 | 15] = 8 * g; ~g;) { + u[g >> 2] |= d.charCodeAt(g) << 8 * ~g--; + } + + for (o = g = 0; o < r; o += 16) { + for (e = c; g < 80; e = [e[4] + (a[g] = g < 16 ? ~~u[o + g] : 2 * d | d < 0) + 1518500249 + [t & f | ~t & n, d = 341275144 + (t ^ f ^ n), 882459459 + (t & f | t & n | f & n), d + 1535694389][g++ / 5 >> 2] + ((d = e[0]) << 5 | d >>> 27), d, t << 30 | t >>> 2, f, n]) { + d = a[g - 3] ^ a[g - 8] ^ a[g - 14] ^ a[g - 16], t = e[1], f = e[2], n = e[3]; + } + + for (g = 5; g;) { + c[--g] += e[g]; + } + } + + for (d = ""; g < 40;) { + d += (c[g >> 3] >> 4 * (7 - g++) & 15).toString(16); + } + + return d; +} + +for (var r$1, o$1 = 18, n = [], t = []; o$1 > 1; o$1--) { + for (r$1 = o$1; r$1 < 320;) { + n[r$1 += o$1] = 1; + } +} + +function e(r, o) { + return 4294967296 * Math.pow(r, 1 / o) | 0; +} + +for (r$1 = 0; r$1 < 64;) { + n[++o$1] || (t[r$1] = e(o$1, 2), n[r$1++] = e(o$1, 3)); +} + +function f(r, o) { + return r >>> o | r << -o; +} + +function sha256 (u) { + var c = t.slice(o$1 = r$1 = 0, 8), + i = [], + a = unescape(encodeURI(u)) + "€", + p = a.length; + + for (i[u = --p / 4 + 2 | 15] = 8 * p; ~p;) { + i[p >> 2] |= a.charCodeAt(p) << 8 * ~p--; + } + + for (p = []; o$1 < u; o$1 += 16) { + for (e = c.slice(); r$1 < 64; e.unshift(a + (f(a = e[0], 2) ^ f(a, 13) ^ f(a, 22)) + (a & e[1] ^ e[1] & e[2] ^ e[2] & a))) { + e[3] += a = 0 | (p[r$1] = r$1 < 16 ? ~~i[r$1 + o$1] : (f(a = p[r$1 - 2], 17) ^ f(a, 19) ^ a >>> 10) + p[r$1 - 7] + (f(a = p[r$1 - 15], 7) ^ f(a, 18) ^ a >>> 3) + p[r$1 - 16]) + e.pop() + (f(a = e[4], 6) ^ f(a, 11) ^ f(a, 25)) + (a & e[5] ^ ~a & e[6]) + n[r$1++]; + } + + for (r$1 = 8; r$1;) { + c[--r$1] += e[r$1]; + } + } + + for (a = ""; r$1 < 64;) { + a += (c[r$1 >> 3] >> 4 * (7 - r$1++) & 15).toString(16); + } + + return a; +} + +/** + * @typedef {Object} HashedEmail + * @property {string} md5 + * @property {string} sha1 + * @property {string} sha256 + */ + +var hashLikeRegex = function hashLikeRegex() { + return /(\s+)?[a-f0-9]{32,64}(\s+)?/gi; +}; + +var lengthToHashType = { + 32: 'md5', + 40: 'sha1', + 64: 'sha256' +}; +function isHash(hash) { + var extractedHash = extractHashValue(hash); + return !!extractedHash && lengthToHashType[extractedHash.length] != null; +} +function extractHashValue(s) { + var result = s.match(hashLikeRegex()); + return result && result.map(trim)[0]; +} +/** + * @param {string} email + * @returns {HashedEmail} + */ + +function hashEmail(email) { + var lowerCasedEmail = email.toLowerCase(); + return { + md5: md5(lowerCasedEmail), + sha1: sha1(lowerCasedEmail), + sha256: sha256(lowerCasedEmail) + }; +} +/** + * @param {string} domain + * @param limit + * @returns {string} + */ + +function domainHash(domain) { + var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 12; + return sha1(domain.replace(/^\./, '')).substring(0, limit); +} + +var MAX_ITEMS = 10; +var LIMITING_KEYS = ['items', 'itemids']; +var HASH_BEARERS = ['email', 'emailhash', 'hash', 'hashedemail']; + +function _provided(state) { + var eventSource = state.eventSource; + var objectKeys = Object.keys(eventSource); + + for (var _i = 0, _objectKeys = objectKeys; _i < _objectKeys.length; _i++) { + var key = _objectKeys[_i]; + var lowerCased = key.toLowerCase(); + + if (HASH_BEARERS.indexOf(lowerCased) > -1) { + var value = trim(safeToString(eventSource[key])); + var extractedEmail = extractEmail(value); + var extractedHash = extractHashValue(value); + + if (extractedEmail) { + var hashes = hashEmail(decodeURIComponent(extractedEmail)); + var hashesArray = [hashes.md5, hashes.sha1, hashes.sha256]; + return _objectSpread2(_objectSpread2({}, { + hashedEmail: hashesArray + }), state); + } else if (extractedHash && isHash(extractedHash)) { + var _hashesArray = [extractedHash.toLowerCase()]; + return _objectSpread2(_objectSpread2({}, { + hashedEmail: _hashesArray + }), state); + } + } + } + + return state; +} + +function _itemsLimiter(state) { + var event = state.eventSource; + Object.keys(event).forEach(function (key) { + var lowerCased = key.toLowerCase(); + + if (LIMITING_KEYS.indexOf(lowerCased) > -1 && isArray(event[key]) && event[key].length > MAX_ITEMS) { + event[key].length = MAX_ITEMS; + } + }); + return {}; +} + +var fiddlers = [_provided, _itemsLimiter]; +function fiddle(state) { + var reducer = function reducer(accumulator, func) { + return _objectSpread2(_objectSpread2({}, accumulator), func(accumulator)); + }; + + if (isObject(state.eventSource)) { + return fiddlers.reduce(reducer, state); + } else { + return state; + } +} + +var toParams = function toParams(tuples) { + var acc = ''; + tuples.forEach(function (tuple) { + var operator = ''; + + if (acc.length === 0) { + operator = '?'; + } else { + operator = '&'; + } + + if (tuple && tuple.length && tuple.length === 2 && tuple[0] && tuple[1]) { + acc = "".concat(acc).concat(operator).concat(tuple[0], "=").concat(tuple[1]); + } + }); + return acc; +}; + +function _decode(s) { + return s.indexOf('%') === -1 ? s : decodeURIComponent(s); +} + +function _isNum(v) { + return isNaN(+v) ? v : +v; +} + +function _isNull(v) { + return v === 'null' || v === 'undefined' ? null : v; +} + +function _isBoolean(v) { + return v === 'false' ? false : v === 'true' ? true : v; +} + +function _convert(v) { + return _isBoolean(_isNull(_isNum(v))); +} + +function urlParams(url) { + var questionMarkIndex, queryParams, historyIndex; + var obj = {}; + + if (!url || (questionMarkIndex = url.indexOf('?')) === -1 || !(queryParams = url.slice(questionMarkIndex + 1))) { + return obj; + } + + if ((historyIndex = queryParams.indexOf('#')) !== -1 && !(queryParams = queryParams.slice(0, historyIndex))) { + return obj; + } + + queryParams.split('&').forEach(function (query) { + if (query) { + query = ((query = query.split('=')) && query.length === 2 ? query : [query[0], 'true']).map(_decode); + if (query[0].slice(-2) === '[]') obj[query[0] = query[0].slice(0, -2)] = obj[query[0]] || []; + if (!obj[query[0]]) return obj[query[0]] = _convert(query[1]); + + if (isArray(obj[query[0]])) { + obj[query[0]].push(_convert(query[1])); + } else { + obj[query[0]] = [obj[query[0]], _convert(query[1])]; + } + } + }); + return obj; +} + +/** + * @param {string} param + * @param {string|null} value + * @param {function} transform + * @return {*[]|Array} + * @private + */ + +var noOpEvents = ['setemail', 'setemailhash', 'sethashedemail']; + +function _asParamOrEmpty(param, value, transform) { + if (value && trim(value).length > 0) { + return [param, isFunction(transform) ? transform(value) : value]; + } else { + return []; + } +} + +var _pMap = { + appId: function appId(aid) { + return _asParamOrEmpty('aid', aid, function (s) { + return encodeURIComponent(s); + }); + }, + eventSource: function eventSource(source) { + return _asParamOrEmpty('se', source, function (s) { + return base64UrlEncode(JSON.stringify(s, replacer)); + }); + }, + liveConnectId: function liveConnectId(fpc) { + return _asParamOrEmpty('duid', fpc, function (s) { + return encodeURIComponent(s); + }); + }, + legacyId: function legacyId(legacyFpc) { + return _asParamOrEmpty('lduid', legacyFpc && legacyFpc.duid, function (s) { + return encodeURIComponent(s); + }); + }, + trackerName: function trackerName(tn) { + return _asParamOrEmpty('tna', tn || 'unknown', function (s) { + return encodeURIComponent(s); + }); + }, + pageUrl: function pageUrl(purl) { + return _asParamOrEmpty('pu', purl, function (s) { + return encodeURIComponent(s); + }); + }, + errorDetails: function errorDetails(ed) { + return _asParamOrEmpty('ae', ed, function (s) { + return base64UrlEncode(JSON.stringify(s)); + }); + }, + retrievedIdentifiers: function retrievedIdentifiers(identifiers) { + var identifierParams = []; + + for (var i = 0; i < identifiers.length; i++) { + identifierParams.push(_asParamOrEmpty("ext_".concat(identifiers[i].name), identifiers[i].value, function (s) { + return encodeURIComponent(s); + })); + } + + return identifierParams; + }, + hashesFromIdentifiers: function hashesFromIdentifiers(hashes) { + var hashParams = []; + + for (var i = 0; i < hashes.length; i++) { + hashParams.push(_asParamOrEmpty('scre', hashes[i], function (h) { + return "".concat(h.md5, ",").concat(h.sha1, ",").concat(h.sha256); + })); + } + + return hashParams; + }, + decisionIds: function decisionIds(dids) { + return _asParamOrEmpty('li_did', dids.join(','), function (s) { + return encodeURIComponent(s); + }); + }, + hashedEmail: function hashedEmail(he) { + return _asParamOrEmpty('e', he.join(','), function (s) { + return encodeURIComponent(s); + }); + }, + usPrivacyString: function usPrivacyString(usps) { + return _asParamOrEmpty('us_privacy', encodeURIComponent(usps), function (s) { + return encodeURIComponent(s); + }); + }, + wrapperName: function wrapperName(wrapper) { + return _asParamOrEmpty('wpn', encodeURIComponent(wrapper), function (s) { + return encodeURIComponent(s); + }); + } +}; +/** + * @param {State} state + * @returns {StateWrapper} + * @constructor + */ + +function StateWrapper(state) { + /** + * @type {State} + */ + var _state = {}; + + if (state) { + _state = _safeFiddle(state); + } + + function _sendsPixel() { + var source = isObject(_state.eventSource) ? _state.eventSource : {}; + var eventKeys = Object.keys(source).filter(function (objKey) { + return objKey.toLowerCase() === 'eventname' || objKey.toLowerCase() === 'event'; + }); + var eventKey = eventKeys && eventKeys.length >= 1 && eventKeys[0]; + var eventName = eventKey && trim(_state.eventSource[eventKey]); + return !eventName || noOpEvents.indexOf(eventName.toLowerCase()) === -1; + } + + function _safeFiddle(newInfo) { + try { + return fiddle(JSON.parse(JSON.stringify(newInfo))); + } catch (e) { + error('StateCombineWith', 'Error while extracting event data', e); + return _state; + } + } + /** + * @param {State} newInfo + * @return {StateWrapper} + * @private + */ + + + function _combineWith(newInfo) { + return new StateWrapper(_objectSpread2(_objectSpread2({}, _state), newInfo)); + } + /** + * @returns {string [][]} + * @private + */ + + + function _asTuples() { + var array = []; + Object.keys(_state).forEach(function (key) { + var value = _state[key]; + + if (_pMap[key]) { + var params = _pMap[key](value); + + if (params && params.length) { + if (params[0] instanceof Array) { + array = array.concat(params); + } else { + array.push(params); + } + } + } + }); + return array; + } + /** + * @returns {string} + * @private + */ + + + function _asQueryString() { + return toParams(_asTuples()); + } + + return { + data: _state, + combineWith: _combineWith, + asQueryString: _asQueryString, + asTuples: _asTuples, + sendsPixel: _sendsPixel + }; +} + +function unwrapExports (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var dist = createCommonjsModule(function (module, exports) { + + Object.defineProperty(exports, '__esModule', { + value: true + }); // These values should NEVER change. If + // they do, we're no longer making ulids! + + var ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"; // Crockford's Base32 + + var ENCODING_LEN = ENCODING.length; + var TIME_MAX = Math.pow(2, 48) - 1; + var TIME_LEN = 10; + var RANDOM_LEN = 16; + + function createError(message) { + var err = new Error(message); + err.source = "ulid"; + return err; + } + + function detectPrng(root) { + if (!root) { + root = typeof window !== "undefined" ? window : null; + } + + var browserCrypto = root && (root.crypto || root.msCrypto); + + if (browserCrypto) { + return function () { + var buffer = new Uint8Array(1); + browserCrypto.getRandomValues(buffer); + return buffer[0] / 0xff; + }; + } + + return function () { + return Math.random(); + }; + } + + function decodeTime(id) { + if (id.length !== TIME_LEN + RANDOM_LEN) { + throw createError("malformed ulid"); + } + + var time = id.substr(0, TIME_LEN).split("").reverse().reduce(function (carry, char, index) { + var encodingIndex = ENCODING.indexOf(char); + + if (encodingIndex === -1) { + throw createError("invalid character found: " + char); + } + + return carry += encodingIndex * Math.pow(ENCODING_LEN, index); + }, 0); + + if (time > TIME_MAX) { + throw createError("malformed ulid, timestamp too large"); + } + + return time; + } + + function encodeRandom(len, prng) { + var str = ""; + + for (; len > 0; len--) { + str = randomChar(prng) + str; + } + + return str; + } + + function encodeTime(now, len) { + if (isNaN(now)) { + throw new Error(now + " must be a number"); + } + + if (now > TIME_MAX) { + throw createError("cannot encode time greater than " + TIME_MAX); + } + + if (now < 0) { + throw createError("time must be positive"); + } + + if (isInteger(now) === false) { + throw createError("time must be an integer"); + } + + var mod = void 0; + var str = ""; + + for (; len > 0; len--) { + mod = now % ENCODING_LEN; + str = ENCODING.charAt(mod) + str; + now = (now - mod) / ENCODING_LEN; + } + + return str; + } + + function factory(currPrng) { + if (!currPrng) { + currPrng = detectPrng(); + } + + return function ulid(seedTime) { + if (isNaN(seedTime)) { + seedTime = Date.now(); + } + + return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, currPrng); + }; + } + + function incrementBase32(str) { + var done = undefined; + var index = str.length; + var char = void 0; + var charIndex = void 0; + var maxCharIndex = ENCODING_LEN - 1; + + while (!done && index-- >= 0) { + char = str[index]; + charIndex = ENCODING.indexOf(char); + + if (charIndex === -1) { + throw createError("incorrectly encoded string"); + } + + if (charIndex === maxCharIndex) { + str = replaceCharAt(str, index, ENCODING[0]); + continue; + } + + done = replaceCharAt(str, index, ENCODING[charIndex + 1]); + } + + if (typeof done === "string") { + return done; + } + + throw createError("cannot increment this string"); + } + + function isInteger(value) { + return typeof value === "number" && isFinite(value) && Math.floor(value) === value; + } + + function monotonicFactory(currPrng) { + if (!currPrng) { + currPrng = detectPrng(); + } + + var lastTime = 0; + var lastRandom = void 0; + return function ulid(seedTime) { + if (isNaN(seedTime)) { + seedTime = Date.now(); + } + + if (seedTime <= lastTime) { + var incrementedRandom = lastRandom = incrementBase32(lastRandom); + return encodeTime(lastTime, TIME_LEN) + incrementedRandom; + } + + lastTime = seedTime; + var newRandom = lastRandom = encodeRandom(RANDOM_LEN, currPrng); + return encodeTime(seedTime, TIME_LEN) + newRandom; + }; + } + + function randomChar(prng) { + var rand = Math.floor(prng() * ENCODING_LEN); + + if (rand === ENCODING_LEN) { + rand = ENCODING_LEN - 1; + } + + return ENCODING.charAt(rand); + } + + function replaceCharAt(str, index, char) { + if (index > str.length - 1) { + return str; + } + + return str.substr(0, index) + char + str.substr(index + 1); + } // Init + + + var ulid = factory(); + exports.detectPrng = detectPrng; + exports.decodeTime = decodeTime; + exports.encodeRandom = encodeRandom; + exports.encodeTime = encodeTime; + exports.factory = factory; + exports.incrementBase32 = incrementBase32; + exports.monotonicFactory = monotonicFactory; + exports.randomChar = randomChar; + exports.replaceCharAt = replaceCharAt; + exports.ulid = ulid; +}); +unwrapExports(dist); +var dist_1 = dist.detectPrng; +var dist_2 = dist.decodeTime; +var dist_3 = dist.encodeRandom; +var dist_4 = dist.encodeTime; +var dist_5 = dist.factory; +var dist_6 = dist.incrementBase32; +var dist_7 = dist.monotonicFactory; +var dist_8 = dist.randomChar; +var dist_9 = dist.replaceCharAt; +var dist_10 = dist.ulid; + +/** + * @returns {boolean} + */ +function isIframe() { + try { + return window.self !== window.top; + } catch (e) { + return true; + } +} +/** + * @returns {string} + * @private + */ + +function getPage() { + try { + return isIframe() ? document.referrer : document.location.href; + } catch (e) { + return document.location.href; + } +} +/** + * @return {string} + */ + +function loadedDomain() { + return document.domain || document.location && document.location.host || window && window.location && window.location.host || 'localhost'; +} + +/** + * @typedef {Object} StorageStrategy + * @type {{cookie: string, localStorage: string, none: string}} + */ +var StorageStrategy = { + cookie: 'cookie', + localStorage: 'ls', + none: 'none' +}; + +var NEXT_GEN_FP_NAME = '_lc2_fpi'; +var TLD_CACHE_KEY = '_li_dcdm_c'; +var DEFAULT_EXPIRATION_DAYS = 730; +/** + * @param {State} state + * @param {StorageHandler} storageHandler + */ + +function resolve(state, storageHandler) { + try { + + var determineTld = function determineTld() { + var cachedDomain = storageHandler.getCookie(TLD_CACHE_KEY); + + if (cachedDomain) { + return cachedDomain; + } + + var domain = loadedDomain(); + var arr = domain.split('.').reverse(); + + for (var i = 1; i < arr.length; i++) { + var newD = ".".concat(arr.slice(0, i).reverse().join('.')); + storageHandler.setCookie(TLD_CACHE_KEY, newD, undefined, 'Lax', newD); + + if (storageHandler.getCookie(TLD_CACHE_KEY)) { + return newD; + } + } + + return ".".concat(domain); + }; + + var addDays = function addDays(days) { + return new Date().getTime() + days * 864e5; + }; + + var lsGetOrAdd = function lsGetOrAdd(key, value, storageOptions) { + var ret = null; + + try { + if (storageHandler.hasLocalStorage()) { + var expirationKey = "".concat(key, "_exp"); + var oldLsExpirationEntry = storageHandler.getDataFromLocalStorage(expirationKey); + + var _expiry = addDays(storageOptions.expires); + + if (oldLsExpirationEntry && parseInt(oldLsExpirationEntry) <= new Date().getTime()) { + storageHandler.removeDataFromLocalStorage(key); + } + + var oldLsEntry = storageHandler.getDataFromLocalStorage(key); + + if (!oldLsEntry) { + storageHandler.setDataInLocalStorage(key, value); + } + + storageHandler.setDataInLocalStorage(expirationKey, "".concat(_expiry)); + ret = storageHandler.getDataFromLocalStorage(key); + } + } catch (e) { + error('LSGetOrAdd', 'Error manipulating LS', e); + } + + return ret; + }; + + var cookieGetOrAdd = function cookieGetOrAdd(key, value, storageOptions) { + var ret = null; + + try { + var oldCookie = storageHandler.getCookie(key); + + if (oldCookie) { + storageHandler.setCookie(key, oldCookie, expiresInDays(storageOptions.expires), 'Lax', storageOptions.domain); + } else { + storageHandler.setCookie(key, value, expiresInDays(storageOptions.expires), 'Lax', storageOptions.domain); + } + + ret = storageHandler.getCookie(key); + } catch (e) { + error('CookieGetOrAdd', 'Failed manipulating cookie jar', e); + } + + return ret; + }; + + var getOrAddWithExpiration = function getOrAddWithExpiration(key, value, storageOptions, storageStrategy) { + if (strEqualsIgnoreCase(storageStrategy, StorageStrategy.localStorage)) { + return lsGetOrAdd(key, value, storageOptions); + } else if (strEqualsIgnoreCase(storageStrategy, StorageStrategy.none)) { + return null; + } else { + return cookieGetOrAdd(key, value, storageOptions); + } + }; + /** + * @param {string} apexDomain + * @returns {string} + * @private + */ + + + var generateCookie = function generateCookie(apexDomain) { + var ulid = dist_10(); + var cookie = "".concat(domainHash(apexDomain), "--").concat(ulid); + return cookie.toLocaleLowerCase(); + }; + + var expiry = state.expirationDays || DEFAULT_EXPIRATION_DAYS; + var cookieDomain = determineTld(); + var storageOptions = { + expires: expiry, + domain: cookieDomain + }; + var liveConnectIdentifier = getOrAddWithExpiration(NEXT_GEN_FP_NAME, generateCookie(cookieDomain), storageOptions, state.storageStrategy); + return { + domain: cookieDomain, + liveConnectId: liveConnectIdentifier + }; + } catch (e) { + error('IdentifiersResolve', 'Error while managing identifiers', e); + return {}; + } +} + +var DEFAULT_DECISION_ID_COOKIE_EXPIRES = expiresInDays(30); +var DECISION_ID_QUERY_PARAM_NAME = 'li_did'; +var DECISION_ID_COOKIE_NAMESPACE = 'lidids.'; + +var _onlyUnique = function _onlyUnique(value, index, self) { + return self.indexOf(value) === index; +}; + +var _validUuid = function _validUuid(value) { + return isUUID(value); +}; + +var _nonEmpty = function _nonEmpty(value) { + return value && trim(value).length > 0; +}; +/** + * @param {State} state + * @param {StorageHandler} storageHandler + */ + + +function resolve$1(state, storageHandler) { + var ret = {}; + + function _addDecisionId(key, cookieDomain) { + if (key) { + storageHandler.setCookie("".concat(DECISION_ID_COOKIE_NAMESPACE).concat(key), key, DEFAULT_DECISION_ID_COOKIE_EXPIRES, 'Lax', cookieDomain); + } + } + + try { + var params = state.pageUrl ? urlParams(state.pageUrl) || {} : {}; + var freshDecisions = [].concat(params[DECISION_ID_QUERY_PARAM_NAME] || []); + var storedDecisions = storageHandler.findSimilarCookies(DECISION_ID_COOKIE_NAMESPACE); + freshDecisions.map(trim).filter(_nonEmpty).filter(_validUuid).filter(_onlyUnique).forEach(function (decision) { + return _addDecisionId(decision, state.domain); + }); + var allDecisions = freshDecisions.concat(storedDecisions).map(trim).filter(_nonEmpty).filter(_validUuid).filter(_onlyUnique); + ret = { + decisionIds: allDecisions + }; + } catch (e) { + error('DecisionsResolve', 'Error while managing decision ids', e); + } + + return ret; +} + +var REPLACEMENT_THRESHOLD_MILLIS = 181 * 864e5; +var PEOPLE_VERIFIED_LS_ENTRY = '_li_duid'; + +function _setPeopleVerifiedStore(id, storageHandler) { + if (id) { + storageHandler.setDataInLocalStorage(PEOPLE_VERIFIED_LS_ENTRY, id); + } +} +/** + * @param {State} state + * @param {StorageHandler} storageHandler + */ + + +function resolve$2(state, storageHandler) { + + try { + var timeBefore = (new Date().getTime() - REPLACEMENT_THRESHOLD_MILLIS) / 1000; + var legacyIdentifier = state.legacyId || {}; + var lastVisit = legacyIdentifier.currVisitTs ? parseInt(legacyIdentifier.currVisitTs) : 0; // Only overwrite the peopleVerified id if the entry for the legacy identifier exists, and it's old + + if (legacyIdentifier.currVisitTs && timeBefore > lastVisit && state.liveConnectId) { + _setPeopleVerifiedStore(state.liveConnectId, storageHandler); + } + + if (!storageHandler.getDataFromLocalStorage(PEOPLE_VERIFIED_LS_ENTRY)) { + _setPeopleVerifiedStore(legacyIdentifier.duid || state.liveConnectId, storageHandler); + } + + return { + peopleVerifiedId: storageHandler.getDataFromLocalStorage(PEOPLE_VERIFIED_LS_ENTRY) + }; + } catch (e) { + error('PeopleVerifiedResolve', 'Error while managing people verified', e); + return {}; + } +} + +/** + * @typedef {Object} ReplayEmitter + * @property {(function)} on + * @property {(function)} once + * @property {(function)} emit + * @property {(function)} off + */ +function E(replaySize) { + this.replaySize = parseInt(replaySize) || 5; + this.handlers = {}; + this.queue = {}; +} +E.prototype = { + on: function on(name, callback, ctx) { + (this.handlers[name] || (this.handlers[name] = [])).push({ + fn: callback, + ctx: ctx + }); + var eventQueueLen = (this.queue[name] || []).length; + + for (var i = 0; i < eventQueueLen; i++) { + callback.apply(ctx, this.queue[name][i]); + } + + return this; + }, + once: function once(name, callback, ctx) { + var self = this; + var eventQueue = this.queue[name] || []; + + if (eventQueue.length > 0) { + callback.apply(ctx, eventQueue[0]); + return this; + } else { + var listener = function listener() { + self.off(name, listener); + callback.apply(ctx, arguments); + }; + + listener._ = callback; + return this.on(name, listener, ctx); + } + }, + emit: function emit(name) { + var data = [].slice.call(arguments, 1); + var evtArr = (this.handlers[name] || []).slice(); + var i = 0; + var len = evtArr.length; + + for (i; i < len; i++) { + evtArr[i].fn.apply(evtArr[i].ctx, data); + } + + var eventQueue = this.queue[name] || (this.queue[name] = []); + + if (eventQueue.length >= this.replaySize) { + eventQueue.shift(); + } + + eventQueue.push(data); + return this; + }, + off: function off(name, callback) { + var handlers = this.handlers[name]; + var liveEvents = []; + + if (handlers && callback) { + for (var i = 0, len = handlers.length; i < len; i++) { + if (handlers[i].fn !== callback && handlers[i].fn._ !== callback) { + liveEvents.push(handlers[i]); + } + } + } + + liveEvents.length ? this.handlers[name] = liveEvents : delete this.handlers[name]; + return this; + } +}; + +/** + * @param {number} size + * @param {function} errorCallback + * @return {ReplayEmitter} + */ + +function init(size, errorCallback) { + if (!size) { + size = 5; + } + + try { + + if (!window) { + errorCallback(new Error('Bus can only be attached to the window, which is not present')); + } + + if (window && !window[EVENT_BUS_NAMESPACE]) { + window[EVENT_BUS_NAMESPACE] = new E(size); + } + + return window[EVENT_BUS_NAMESPACE]; + } catch (e) { + errorCallback(e); + } +} + +/** + * @private + */ + +var _currentPage = null; +/** + * @param state + * @return {{pageUrl: *}} + */ + +function enrich(state) { + if (!_currentPage) { + _currentPage = getPage(); + } + + return { + pageUrl: _currentPage + }; +} + +var _state = null; +var _pixelSender = null; +var MAX_ERROR_FIELD_LENGTH = 120; +var _defaultReturn = { + errorDetails: { + message: 'Unknown message', + name: 'Unknown name' + } +}; + +function _asInt(field) { + try { + var intValue = field * 1; + return isNaN(intValue) ? undefined : intValue; + } catch (_unused) {} +} + +function _truncate(value) { + try { + if (value && value.length && value.length > MAX_ERROR_FIELD_LENGTH) { + return "".concat(value.substr(0, MAX_ERROR_FIELD_LENGTH), "..."); + } else { + return value; + } + } catch (_unused2) {} +} +/** + * @param {Error} e + * @return {State} + */ + + +function asErrorDetails(e) { + if (e) { + return { + errorDetails: { + message: _truncate(e.message), + name: _truncate(e.name), + stackTrace: _truncate(e.stack), + lineNumber: _asInt(e.lineNumber), + lineColumn: _asInt(e.lineColumn), + fileName: _truncate(e.fileName) + } + }; + } else { + return _defaultReturn; + } +} +/** + * @param {Error} error + * @private + */ + +function _pixelError(error) { + + if (_pixelSender) { + _pixelSender.send(new StateWrapper(asErrorDetails(error)).combineWith(_state || {}).combineWith(enrich())); + } +} + +function register(state) { + try { + + if (window && window[EVENT_BUS_NAMESPACE] && isFunction(window[EVENT_BUS_NAMESPACE].on)) { + window[EVENT_BUS_NAMESPACE].on(ERRORS_PREFIX, _pixelError); + } + + _pixelSender = new PixelSender(state, null); + _state = state || {}; + } catch (e) { + } +} + +/** + * @typedef {Object} RetrievedIdentifier + * @property {string} name + * @property {string} value + */ +/** + * @param {State} state + * @param {StorageHandler} storageHandler + * @returns {{hashesFromIdentifiers: HashedEmail[], retrievedIdentifiers: RetrievedIdentifier[]} | {}} + */ + +function enrich$1(state, storageHandler) { + try { + return _getIdentifiers(_parseIdentifiersToResolve(state), storageHandler); + } catch (e) { + error('IdentifiersEnricher', e.message, e); + return {}; + } +} +/** + * @param {State} state + * @returns {string[]} + * @private + */ + +function _parseIdentifiersToResolve(state) { + var cookieNames = []; + + if (state.identifiersToResolve) { + if (isArray(state.identifiersToResolve)) { + cookieNames = state.identifiersToResolve; + } else if (isString(state.identifiersToResolve)) { + cookieNames = state.identifiersToResolve.split(','); + } + } + + for (var i = 0; i < cookieNames.length; i++) { + cookieNames[i] = cookieNames[i].trim(); + } + + return cookieNames; +} +/** + * @param {string[]} cookieNames + * @param {State} state + * @param {StorageHandler} storageHandler + * @returns {{hashesFromIdentifiers: HashedEmail[], retrievedIdentifiers: RetrievedIdentifier[]}} + * @private + */ + + +function _getIdentifiers(cookieNames, storageHandler) { + var identifiers = []; + var hashes = []; + + for (var i = 0; i < cookieNames.length; i++) { + var identifierName = cookieNames[i]; + var identifierValue = storageHandler.getCookie(identifierName) || storageHandler.getDataFromLocalStorage(identifierName); + + if (identifierValue) { + var cookieAndHashes = _findAndReplaceRawEmails(safeToString(identifierValue)); + + identifiers.push({ + name: identifierName, + value: cookieAndHashes.identifierWithoutRawEmails + }); + hashes = hashes.concat(cookieAndHashes.hashesFromIdentifier); + } + } + + return { + retrievedIdentifiers: identifiers, + hashesFromIdentifiers: _deduplicateHashes(hashes) + }; +} +/** + * @param {string} cookieValue + * @returns {{hashesFromIdentifier: HashedEmail[], identifierWithoutRawEmails: string}} + * @private + */ + + +function _findAndReplaceRawEmails(cookieValue) { + if (containsEmailField(cookieValue)) { + return _replaceEmailsWithHashes(cookieValue); + } else if (isEmail(cookieValue)) { + var hashes = hashEmail(cookieValue); + return { + identifierWithoutRawEmails: hashes.md5, + hashesFromIdentifier: [hashes] + }; + } else { + return { + identifierWithoutRawEmails: cookieValue, + hashesFromIdentifier: [] + }; + } +} +/** + * + * @param cookieValue + * @returns {{hashesFromIdentifier: HashedEmail[], identifierWithoutRawEmails: string}} + * @private + */ + + +function _replaceEmailsWithHashes(cookieValue) { + var emailsInCookie = listEmailsInString(cookieValue); + var hashes = []; + + for (var i = 0; i < emailsInCookie.length; i++) { + var email = emailsInCookie[i]; + var emailHashes = hashEmail(email); + cookieValue = cookieValue.replace(email, emailHashes.md5); + hashes.push(emailHashes); + } + + return { + identifierWithoutRawEmails: cookieValue, + hashesFromIdentifier: hashes + }; +} +/** + * @param {HashedEmail[]} hashes + * @returns {HashedEmail[]} + * @private + */ + + +function _deduplicateHashes(hashes) { + var seen = {}; + var result = []; + + for (var i = 0; i < hashes.length; i++) { + if (!(hashes[i].md5 in seen)) { + result.push(hashes[i]); + seen[hashes[i].md5] = true; + } + } + + return result; +} + +var APP_ID = '[a-z]-[a-z0-9]{4}'; +var NUMBERS = '\\+?\\d+'; +var LEGACY_COOKIE_FORMAT = "(".concat(APP_ID, "--").concat(UUID, ")\\.(").concat(NUMBERS, ")\\.(").concat(NUMBERS, ")\\.(").concat(NUMBERS, ")\\.(").concat(NUMBERS, ")\\.(").concat(UUID, ")"); +var LEGACY_COOKIE_REGEX = new RegExp(LEGACY_COOKIE_FORMAT, 'i'); +var LEGACY_IDENTIFIER_PREFIX = '_litra_id.'; + +function _fixupDomain(domain) { + var dl = domain.length; // remove trailing '.' + + if (domain.charAt(--dl) === '.') { + domain = domain.slice(0, dl); + } // remove leading '*' + + + if (domain.slice(0, 2) === '*.') { + domain = domain.slice(1); + } + + return domain; +} + +function getLegacyIdentifierKey() { + var domain = loadedDomain(); + var domainKey = domainHash(_fixupDomain(domain) + '/', 4); + return "".concat(LEGACY_IDENTIFIER_PREFIX).concat(domainKey); +} +/** + * @return {LegacyId|null|undefined} + * @private + */ + +function getLegacyId(entry) { + if (entry) { + var matches = entry.match(LEGACY_COOKIE_REGEX); + + if (matches && matches.length === 7) { + return { + duid: matches[1], + creationTs: matches[2], + sessionCount: matches[3], + currVisitTs: matches[4], + lastSessionVisitTs: matches[5], + sessionId: matches[6] + }; + } + } +} + +/** + * @param {State} state + * @param {StorageHandler} storageHandler + */ + +function enrich$2(state, storageHandler) { + var duidLsKey = getLegacyIdentifierKey(); + + try { + if (state.appId && storageHandler.hasLocalStorage()) { + var previousIdentifier = storageHandler.getDataFromLocalStorage(duidLsKey); + var legacyId = getLegacyId(previousIdentifier); + return { + legacyId: legacyId + }; + } + } catch (e) { + error('LegacyDuidEnrich', 'Error while getting legacy duid', e); + } + + return {}; +} + +/** + * @param url + * @param responseHandler + * @param fallback + * @param timeout + */ + +var get = function get(url, responseHandler) { + var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; + var timeout = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1000; + + function errorCallback(name, message, error$1, request) { + error(name, message, error$1); + fallback(); + } + + function xhrCall() { + var xhr = new XMLHttpRequest(); + + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + var status = xhr.status; + + if (status >= 200 && status < 300 || status === 304) { + responseHandler(xhr.responseText, xhr); + } else { + var error = new Error("Incorrect status received : ".concat(status)); + errorCallback('XHRError', "Error during XHR call: ".concat(status, ", url: ").concat(url), error); + } + } + }; + + return xhr; + } + + function xdrCall() { + var xdr = new window.XDomainRequest(); + + xdr.onprogress = function () {}; + + xdr.onerror = function () { + var error = new Error("XDR Error received: ".concat(xdr.responseText)); + errorCallback('XDRError', "Error during XDR call: ".concat(xdr.responseText, ", url: ").concat(url), error); + }; + + xdr.onload = function () { + return responseHandler(xdr.responseText, xdr); + }; + + return xdr; + } + + try { + var request = window && window.XDomainRequest ? xdrCall() : xhrCall(); + + request.ontimeout = function () { + var error = new Error("Timeout after ".concat(timeout, ", url : ").concat(url)); + errorCallback('AjaxTimeout', "Timeout after ".concat(timeout), error, request); + }; + + request.open('GET', url, true); + request.timeout = timeout; + request.withCredentials = true; + request.send(); + } catch (error) { + errorCallback('AjaxCompositionError', "Error while constructing ajax request, ".concat(error), error); + } +}; + +var IDEX_STORAGE_KEY = '__li_idex_cache'; +var DEFAULT_IDEX_URL = 'https://idx.liadm.com/idex'; +var DEFAULT_EXPIRATION_DAYS$1 = 1; +var DEFAULT_AJAX_TIMEOUT = 1000; + +function _responseReceived(storageHandler, domain, expirationDays, successCallback) { + return function (response) { + var responseObj = {}; + + if (response) { + try { + responseObj = JSON.parse(response); + } catch (ex) { + error('IdentityResolverParser', "Error parsing Idex response: ".concat(response), ex); + } + } + + try { + storageHandler.setCookie(IDEX_STORAGE_KEY, JSON.stringify(responseObj), expiresInDays(expirationDays), 'Lax', domain); + } catch (ex) { + error('IdentityResolverStorage', 'Error putting the Idex response in a cookie jar', ex); + } + + successCallback(responseObj); + }; +} + +var _additionalParams = function _additionalParams(params) { + if (params && isObject(params)) { + var array = []; + Object.keys(params).forEach(function (key) { + var value = params[key]; + + if (value && !isObject(value) && value.length) { + array.push([encodeURIComponent(key), encodeURIComponent(value)]); + } + }); + return array; + } else { + return []; + } +}; +/** + * @param {State} config + * @param {StorageHandler} storageHandler + * @return {{resolve: function(callback: function, additionalParams: Object), getUrl: function(additionalParams: Object)}} + * @constructor + */ + + +function IdentityResolver(config, storageHandler) { + var encodedOrNull = function encodedOrNull(value) { + return value && encodeURIComponent(value); + }; + + var fallback = function fallback(successCallback) { + if (isFunction(successCallback)) { + successCallback({}, undefined); + } + }; + + try { + var nonNullConfig = config || {}; + var idexConfig = nonNullConfig.identityResolutionConfig || {}; + var externalIds = nonNullConfig.retrievedIdentifiers || []; + var expirationDays = idexConfig.expirationDays || DEFAULT_EXPIRATION_DAYS$1; + var source = idexConfig.source || 'unknown'; + var publisherId = idexConfig.publisherId || 'any'; + var url = idexConfig.url || DEFAULT_IDEX_URL; + var timeout = idexConfig.ajaxTimeout || DEFAULT_AJAX_TIMEOUT; + var tuples = []; + tuples.push(['duid', encodedOrNull(nonNullConfig.peopleVerifiedId)]); + tuples.push(['us_privacy', encodedOrNull(nonNullConfig.usPrivacyString)]); + externalIds.forEach(function (retrievedIdentifier) { + var key = encodedOrNull(retrievedIdentifier.name); + var value = encodedOrNull(retrievedIdentifier.value); + tuples.push([key, value]); + }); + + var composeUrl = function composeUrl(additionalParams) { + var originalParams = tuples.slice().concat(_additionalParams(additionalParams)); + var params = toParams(originalParams); + return "".concat(url, "/").concat(source, "/").concat(publisherId).concat(params); + }; + + var unsafeResolve = function unsafeResolve(successCallback, additionalParams) { + var finalUrl = composeUrl(additionalParams); + var storedCookie = storageHandler.getCookie(IDEX_STORAGE_KEY); + + if (storedCookie) { + successCallback(JSON.parse(storedCookie)); + } else { + get(finalUrl, _responseReceived(storageHandler, nonNullConfig.domain, expirationDays, successCallback), function () { + return fallback(successCallback); + }, timeout); + } + }; + + return { + resolve: function resolve(callback, additionalParams) { + try { + unsafeResolve(callback, additionalParams); + } catch (e) { + fallback(callback); + error('IdentityResolve', 'Resolve threw an unhandled exception', e); + } + }, + getUrl: function getUrl(additionalParams) { + return composeUrl(additionalParams); + } + }; + } catch (e) { + error('IdentityResolver', 'IdentityResolver not created', e); + return { + resolve: function resolve(successCallback) { + fallback(successCallback); + error('IdentityResolver.resolve', 'Resolve called on an uninitialised IdentityResolver', e); + }, + getUrl: function getUrl() { + error('IdentityResolver.getUrl', 'getUrl called on an uninitialised IdentityResolver', e); + } + }; + } +} + +var browserCookies = createCommonjsModule(function (module, exports) { + exports.defaults = {}; + + exports.set = function (name, value, options) { + // Retrieve options and defaults + var opts = options || {}; + var defaults = exports.defaults; // Apply default value for unspecified options + + var expires = opts.expires || defaults.expires; + var domain = opts.domain || defaults.domain; + var path = opts.path !== undefined ? opts.path : defaults.path !== undefined ? defaults.path : '/'; + var secure = opts.secure !== undefined ? opts.secure : defaults.secure; + var httponly = opts.httponly !== undefined ? opts.httponly : defaults.httponly; + var samesite = opts.samesite !== undefined ? opts.samesite : defaults.samesite; // Determine cookie expiration date + // If succesful the result will be a valid Date, otherwise it will be an invalid Date or false(ish) + + var expDate = expires ? new Date( // in case expires is an integer, it should specify the number of days till the cookie expires + typeof expires === 'number' ? new Date().getTime() + expires * 864e5 : // else expires should be either a Date object or in a format recognized by Date.parse() + expires) : 0; // Set cookie + + document.cookie = name.replace(/[^+#$&^`|]/g, encodeURIComponent) // Encode cookie name + .replace('(', '%28').replace(')', '%29') + '=' + value.replace(/[^+#$&/:<-\[\]-}]/g, encodeURIComponent) + ( // Encode cookie value (RFC6265) + expDate && expDate.getTime() >= 0 ? ';expires=' + expDate.toUTCString() : '') + ( // Add expiration date + domain ? ';domain=' + domain : '') + ( // Add domain + path ? ';path=' + path : '') + ( // Add path + secure ? ';secure' : '') + ( // Add secure option + httponly ? ';httponly' : '') + ( // Add httponly option + samesite ? ';samesite=' + samesite : ''); // Add samesite option + }; + + exports.get = function (name) { + var cookies = document.cookie.split(';'); // Iterate all cookies + + while (cookies.length) { + var cookie = cookies.pop(); // Determine separator index ("name=value") + + var separatorIndex = cookie.indexOf('='); // IE<11 emits the equal sign when the cookie value is empty + + separatorIndex = separatorIndex < 0 ? cookie.length : separatorIndex; + var cookie_name = decodeURIComponent(cookie.slice(0, separatorIndex).replace(/^\s+/, '')); // Return cookie value if the name matches + + if (cookie_name === name) { + return decodeURIComponent(cookie.slice(separatorIndex + 1)); + } + } // Return `null` as the cookie was not found + + + return null; + }; + + exports.erase = function (name, options) { + exports.set(name, '', { + expires: -1, + domain: options && options.domain, + path: options && options.path, + secure: 0, + httponly: 0 + }); + }; + + exports.all = function () { + var all = {}; + var cookies = document.cookie.split(';'); // Iterate all cookies + + while (cookies.length) { + var cookie = cookies.pop(); // Determine separator index ("name=value") + + var separatorIndex = cookie.indexOf('='); // IE<11 emits the equal sign when the cookie value is empty + + separatorIndex = separatorIndex < 0 ? cookie.length : separatorIndex; // add the cookie name and value to the `all` object + + var cookie_name = decodeURIComponent(cookie.slice(0, separatorIndex).replace(/^\s+/, '')); + all[cookie_name] = decodeURIComponent(cookie.slice(separatorIndex + 1)); + } + + return all; + }; +}); +var browserCookies_1 = browserCookies.defaults; +var browserCookies_2 = browserCookies.set; +var browserCookies_3 = browserCookies.get; +var browserCookies_4 = browserCookies.erase; +var browserCookies_5 = browserCookies.all; + +/** + * @typedef {Object} StorageOptions + * @property {(number| Date |undefined)} [expires] + * @property {(string|undefined)} [domain] + * @property {(string|undefined)} [path] + * @property {(boolean|undefined)} [secure] + * @property {(boolean|undefined)} [httponly] + * @property {((''|'Strict'|'Lax')|undefined)} [samesite] + */ +var _hasLocalStorage = null; +/** + * @returns {boolean} + * @private + */ + +function hasLocalStorage() { + if (_hasLocalStorage == null) { + _hasLocalStorage = _checkLocalStorage(); + } + + return _hasLocalStorage; +} +/** + * @returns {boolean} + * @private + */ + +function _checkLocalStorage() { + var enabled = false; + + try { + if (window && window.localStorage) { + var key = Math.random().toString(); + window.localStorage.setItem(key, key); + enabled = window.localStorage.getItem(key) === key; + window.localStorage.removeItem(key); + } + } catch (e) { + error('LSCheckError', e.message, e); + } + + return enabled; +} +/** + * @param {string} key + * @returns {string|null} + */ + + +function getCookie(key) { + return browserCookies_3(key); +} +/** + * @param key + * @return {string|null} + * @private + */ + +function _unsafeGetFromLs(key) { + return window.localStorage.getItem(key); +} +/** + * @param {string} key + * @returns {string|null} + */ + + +function getDataFromLocalStorage(key) { + var ret = null; + + if (hasLocalStorage()) { + ret = _unsafeGetFromLs(key); + } + + return ret; +} +/** + * @param keyLike + * @return {[String]} + */ + +function findSimilarCookies(keyLike) { + var ret = []; + + try { + var allCookies = browserCookies_5(); + + for (var cookieName in allCookies) { + if (allCookies[cookieName] && cookieName.indexOf(keyLike) >= 0) { + ret.push(browserCookies_3(cookieName)); + } + } + } catch (e) { + error('CookieFindSimilarInJar', 'Failed fetching from a cookie jar', e); + } + + return ret; +} +/** + * @param {string} key + * @param {string} value + * @param {number} expires + * @param {string} sameSite + * @param {string} domain + * @returns void + */ + +function setCookie(key, value, expires, sameSite, domain) { + browserCookies_2(key, value, { + domain: domain, + expires: expires, + samesite: sameSite + }); +} +/** + * @param {string} key + * @returns {string|null} + */ + +function removeDataFromLocalStorage(key) { + if (hasLocalStorage()) { + window.localStorage.removeItem(key); + } +} +/** + * @param {string} key + * @param {string} value + * @returns {string|null} + */ + +function setDataInLocalStorage(key, value) { + if (hasLocalStorage()) { + window.localStorage.setItem(key, value); + } +} + +var lcStorage = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasLocalStorage: hasLocalStorage, + getCookie: getCookie, + getDataFromLocalStorage: getDataFromLocalStorage, + findSimilarCookies: findSimilarCookies, + setCookie: setCookie, + removeDataFromLocalStorage: removeDataFromLocalStorage, + setDataInLocalStorage: setDataInLocalStorage +}); + +/** + * @typedef {Object} StorageHandler + * @property {function} [hasLocalStorage] + * @property {function} [getCookie] + * @property {function} [setCookie] + * @property {function} [getDataFromLocalStorage] + * @property {function} [removeDataFromLocalStorage] + * @property {function} [setDataInLocalStorage] + * @property {function} [findSimilarCookies] + */ + +var _noOp = function _noOp() { + return undefined; +}; +/** + * + * @param {string} storageStrategy + * @param {StorageHandler} [externalStorageHandler] + * @return {StorageHandler} + * @constructor + */ + + +function StorageHandler(storageStrategy, externalStorageHandler) { + function _externalOrDefault(functionName) { + var hasExternal = externalStorageHandler && externalStorageHandler[functionName] && isFunction(externalStorageHandler[functionName]); + + if (hasExternal) { + return externalStorageHandler[functionName]; + } else { + return lcStorage[functionName] || _noOp; + } + } + + var _orElseNoOp = function _orElseNoOp(fName) { + return strEqualsIgnoreCase(storageStrategy, StorageStrategy.none) ? _noOp : _externalOrDefault(fName); + }; + + return { + hasLocalStorage: _orElseNoOp('hasLocalStorage'), + getCookie: _externalOrDefault('getCookie'), + setCookie: _orElseNoOp('setCookie'), + getDataFromLocalStorage: _externalOrDefault('getDataFromLocalStorage'), + removeDataFromLocalStorage: _orElseNoOp('removeDataFromLocalStorage'), + setDataInLocalStorage: _orElseNoOp('setDataInLocalStorage'), + findSimilarCookies: _externalOrDefault('findSimilarCookies') + }; +} + +var hemStore = {}; + +function _pushSingleEvent(event, pixelClient, enrichedState) { + if (!event || !isObject(event)) { + error('EventNotAnObject', 'Received event was not an object', new Error(event)); + } else if (event.config) { + error('StrayConfig', 'Received a config after LC has already been initialised', new Error(event)); + } else { + var combined = enrichedState.combineWith({ + eventSource: event + }); + hemStore.hashedEmail = hemStore.hashedEmail || combined.data.hashedEmail; + + var withHemStore = _objectSpread2({ + eventSource: event + }, hemStore); + + pixelClient.send(enrichedState.combineWith(withHemStore)); + } +} +/** + * + * @param {LiveConnectConfiguration} previousConfig + * @param {LiveConnectConfiguration} newConfig + * @return {Object|null} + * @private + */ + + +function _configMatcher(previousConfig, newConfig) { + var equalConfigs = previousConfig.appId === newConfig.appId && previousConfig.wrapperName === newConfig.wrapperName && previousConfig.collectorUrl === newConfig.collectorUrl; + + if (!equalConfigs) { + return { + appId: [previousConfig.appId, newConfig.appId], + wrapperName: [previousConfig.wrapperName, newConfig.wrapperName], + collectorUrl: [previousConfig.collectorUrl, newConfig.collectorUrl] + }; + } +} + +function _processArgs(args, pixelClient, enrichedState) { + try { + args.forEach(function (arg) { + var event = arg; + + if (isArray(event)) { + event.forEach(function (e) { + return _pushSingleEvent(e, pixelClient, enrichedState); + }); + } else { + _pushSingleEvent(event, pixelClient, enrichedState); + } + }); + } catch (e) { + error('LCPush', 'Failed sending an event', e); + } +} +/** + * + * @param {LiveConnectConfiguration} liveConnectConfig + * @return {LiveConnect|null} + * @private + */ + + +function _getInitializedLiveConnect(liveConnectConfig) { + try { + if (window && window.liQ && window.liQ.ready) { + var mismatchedConfig = window.liQ.config && _configMatcher(window.liQ.config, liveConnectConfig); + + if (mismatchedConfig) { + var error$1 = new Error(); + error$1.name = 'ConfigSent'; + error$1.message = 'Additional configuration received'; + error('LCDuplication', JSON.stringify(mismatchedConfig), error$1); + } + + return window.liQ; + } + } catch (e) { + } +} +/** + * @param {LiveConnectConfiguration} liveConnectConfig + * @param {StorageHandler} externalStorageHandler + * @returns {LiveConnect} + * @private + */ + + +function _standardInitialization(liveConnectConfig, externalStorageHandler) { + try { + init(); + register(liveConnectConfig); + } catch (e) { + } + + try { + var storageHandler = StorageHandler(liveConnectConfig.storageStrategy, externalStorageHandler); + + var reducer = function reducer(accumulator, func) { + return accumulator.combineWith(func(accumulator.data, storageHandler)); + }; + + var enrichers = [enrich, enrich$1, enrich$2]; + var managers = [resolve, resolve$2, resolve$1]; + var enrichedState = enrichers.reduce(reducer, new StateWrapper(liveConnectConfig)); + var postManagedState = managers.reduce(reducer, enrichedState); + + var syncContainerData = _objectSpread2(_objectSpread2({}, liveConnectConfig), { + peopleVerifiedId: postManagedState.data.peopleVerifiedId + }); + + var onPixelLoad = function onPixelLoad() { + return send(PIXEL_SENT_PREFIX, syncContainerData); + }; + + var onPixelPreload = function onPixelPreload() { + return send(PRELOAD_PIXEL, '0'); + }; + + var pixelClient = new PixelSender(liveConnectConfig, onPixelLoad, onPixelPreload); + var resolver = IdentityResolver(postManagedState.data, storageHandler); + + var _push = function _push() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _processArgs(args, pixelClient, postManagedState); + }; + + return { + push: _push, + fire: function fire() { + return _push({}); + }, + peopleVerifiedId: postManagedState.data.peopleVerifiedId, + ready: true, + resolve: resolver.resolve, + resolutionCallUrl: resolver.getUrl, + config: liveConnectConfig + }; + } catch (x) { + error('LCConstruction', 'Failed to build LC', x); + } +} +/** + * @param {LiveConnectConfiguration} liveConnectConfig + * @param {StorageHandler} externalStorageHandler + * @returns {LiveConnect} + * @constructor + */ + + +function LiveConnect(liveConnectConfig, externalStorageHandler) { + + try { + var queue = window.liQ || []; + var configuration = isObject(liveConnectConfig) && liveConnectConfig || {}; + window && (window.liQ = _getInitializedLiveConnect(configuration) || _standardInitialization(configuration, externalStorageHandler) || queue); + + if (isArray(queue)) { + for (var i = 0; i < queue.length; i++) { + window.liQ.push(queue[i]); + } + } + } catch (x) { + error('LCConstruction', 'Failed to build LC', x); + } + + return window.liQ; +} + +exports.LiveConnect = LiveConnect; + + +/***/ }) + +},[488]); \ No newline at end of file diff --git a/build/dist/livewrappedAnalyticsAdapter.js b/build/dist/livewrappedAnalyticsAdapter.js new file mode 100644 index 00000000000..8be9be86974 --- /dev/null +++ b/build/dist/livewrappedAnalyticsAdapter.js @@ -0,0 +1,557 @@ +pbjsChunk([30],{ + +/***/ 491: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(492); + + +/***/ }), + +/***/ 492: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BID_WON_TIMEOUT", function() { return BID_WON_TIMEOUT; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__ = __webpack_require__(7); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var ANALYTICSTYPE = 'endpoint'; +var URL = 'https://lwadm.com/analytics/10'; +var EMPTYURL = ''; +var REQUESTSENT = 1; +var RESPONSESENT = 2; +var WINSENT = 4; +var TIMEOUTSENT = 8; +var initOptions; +var BID_WON_TIMEOUT = 500; +var cache = { + auctions: {} +}; + +var livewrappedAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_2__src_AnalyticsAdapter_js__["a" /* default */])({ + EMPTYURL: EMPTYURL, + ANALYTICSTYPE: ANALYTICSTYPE +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + var time = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"](); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_EVENT:', [eventType, args]); + + switch (eventType) { + case __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_INIT: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_AUCTION_INIT:', args); + cache.auctions[args.auctionId] = { + bids: {}, + bidAdUnits: {} + }; + break; + + case __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_REQUESTED: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_BID_REQUESTED:', args); + cache.auctions[args.auctionId].timeStamp = args.start; + args.bids.forEach(function (bidRequest) { + cache.auctions[args.auctionId].bids[bidRequest.bidId] = { + bidder: bidRequest.bidder, + adUnit: bidRequest.adUnitCode, + isBid: false, + won: false, + timeout: false, + sendStatus: 0, + readyToSend: 0, + start: args.start + }; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"](bidRequest); + }); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"](livewrappedAnalyticsAdapter.requestEvents); + break; + + case __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_RESPONSE: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_BID_RESPONSE:', args); + var bidResponse = cache.auctions[args.auctionId].bids[args.requestId]; + bidResponse.isBid = args.getStatusCode() === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.STATUS.GOOD; + bidResponse.width = args.width; + bidResponse.height = args.height; + bidResponse.cpm = args.cpm; + bidResponse.ttr = args.timeToRespond; + bidResponse.readyToSend = 1; + bidResponse.mediaType = args.mediaType == 'native' ? 2 : 1; + + if (!bidResponse.ttr) { + bidResponse.ttr = time - bidResponse.start; + } + + if (!cache.auctions[args.auctionId].bidAdUnits[bidResponse.adUnit]) { + cache.auctions[args.auctionId].bidAdUnits[bidResponse.adUnit] = { + sent: 0, + timeStamp: cache.auctions[args.auctionId].timeStamp + }; + } + + break; + + case __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BIDDER_DONE: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_BIDDER_DONE:', args); + args.bids.forEach(function (doneBid) { + var bid = cache.auctions[doneBid.auctionId].bids[doneBid.bidId || doneBid.requestId]; + + if (!bid.ttr) { + bid.ttr = time - bid.start; + } + + bid.readyToSend = 1; + }); + break; + + case __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_WON: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_BID_WON:', args); + var wonBid = cache.auctions[args.auctionId].bids[args.requestId]; + wonBid.won = true; + + if (wonBid.sendStatus != 0) { + livewrappedAnalyticsAdapter.sendEvents(); + } + + break; + + case __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_TIMEOUT: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_BID_TIMEOUT:', args); + args.forEach(function (timeout) { + cache.auctions[timeout.auctionId].bids[timeout.bidId].timeout = true; + }); + break; + + case __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_END: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('LIVEWRAPPED_AUCTION_END:', args); + setTimeout(function () { + livewrappedAnalyticsAdapter.sendEvents(); + }, BID_WON_TIMEOUT); + break; + } + } +}); // save the base class function + + +livewrappedAnalyticsAdapter.originEnableAnalytics = livewrappedAnalyticsAdapter.enableAnalytics; +livewrappedAnalyticsAdapter.allRequestEvents = []; // override enableAnalytics so we can get access to the config passed in from the page + +livewrappedAnalyticsAdapter.enableAnalytics = function (config) { + initOptions = config.options; + livewrappedAnalyticsAdapter.originEnableAnalytics(config); +}; + +livewrappedAnalyticsAdapter.sendEvents = function () { + var events = { + publisherId: initOptions.publisherId, + requests: getSentRequests(), + responses: getResponses(), + wins: getWins(), + timeouts: getTimeouts(), + bidAdUnits: getbidAdUnits(), + rcv: getAdblockerRecovered() + }; + + if (events.requests.length == 0 && events.responses.length == 0 && events.wins.length == 0 && events.timeouts.length == 0) { + return; + } + + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(initOptions.endpoint || URL, undefined, JSON.stringify(events), { + method: 'POST' + }); +}; + +function getAdblockerRecovered() { + try { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().I12C && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().I12C.Morph === 1; + } catch (e) {} +} + +function getSentRequests() { + var sentRequests = []; + Object.keys(cache.auctions).forEach(function (auctionId) { + Object.keys(cache.auctions[auctionId].bids).forEach(function (bidId) { + var auction = cache.auctions[auctionId]; + var bid = auction.bids[bidId]; + + if (!(bid.sendStatus & REQUESTSENT)) { + bid.sendStatus |= REQUESTSENT; + sentRequests.push({ + timeStamp: auction.timeStamp, + adUnit: bid.adUnit, + bidder: bid.bidder + }); + } + }); + }); + return sentRequests; +} + +function getResponses() { + var responses = []; + Object.keys(cache.auctions).forEach(function (auctionId) { + Object.keys(cache.auctions[auctionId].bids).forEach(function (bidId) { + var auction = cache.auctions[auctionId]; + var bid = auction.bids[bidId]; + + if (bid.readyToSend && !(bid.sendStatus & RESPONSESENT) && !bid.timeout) { + bid.sendStatus |= RESPONSESENT; + responses.push({ + timeStamp: auction.timeStamp, + adUnit: bid.adUnit, + bidder: bid.bidder, + width: bid.width, + height: bid.height, + cpm: bid.cpm, + ttr: bid.ttr, + IsBid: bid.isBid, + mediaType: bid.mediaType + }); + } + }); + }); + return responses; +} + +function getWins() { + var wins = []; + Object.keys(cache.auctions).forEach(function (auctionId) { + Object.keys(cache.auctions[auctionId].bids).forEach(function (bidId) { + var auction = cache.auctions[auctionId]; + var bid = auction.bids[bidId]; + + if (!(bid.sendStatus & WINSENT) && bid.won) { + bid.sendStatus |= WINSENT; + wins.push({ + timeStamp: auction.timeStamp, + adUnit: bid.adUnit, + bidder: bid.bidder, + width: bid.width, + height: bid.height, + cpm: bid.cpm, + mediaType: bid.mediaType + }); + } + }); + }); + return wins; +} + +function getTimeouts() { + var timeouts = []; + Object.keys(cache.auctions).forEach(function (auctionId) { + Object.keys(cache.auctions[auctionId].bids).forEach(function (bidId) { + var auction = cache.auctions[auctionId]; + var bid = auction.bids[bidId]; + + if (!(bid.sendStatus & TIMEOUTSENT) && bid.timeout) { + bid.sendStatus |= TIMEOUTSENT; + timeouts.push({ + bidder: bid.bidder, + adUnit: bid.adUnit, + timeStamp: auction.timeStamp + }); + } + }); + }); + return timeouts; +} + +function getbidAdUnits() { + var bidAdUnits = []; + Object.keys(cache.auctions).forEach(function (auctionId) { + var auction = cache.auctions[auctionId]; + Object.keys(auction.bidAdUnits).forEach(function (adUnit) { + var bidAdUnit = auction.bidAdUnits[adUnit]; + + if (!bidAdUnit.sent) { + bidAdUnit.sent = 1; + bidAdUnits.push({ + adUnit: adUnit, + timeStamp: bidAdUnit.timeStamp + }); + } + }); + }); + return bidAdUnits; +} + +__WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: livewrappedAnalyticsAdapter, + code: 'livewrapped' +}); +/* harmony default export */ __webpack_exports__["default"] = (livewrappedAnalyticsAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[491]); \ No newline at end of file diff --git a/build/dist/livewrappedBidAdapter.js b/build/dist/livewrappedBidAdapter.js new file mode 100644 index 00000000000..8e76a155eb9 --- /dev/null +++ b/build/dist/livewrappedBidAdapter.js @@ -0,0 +1,378 @@ +pbjsChunk([186],{ + +/***/ 493: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(494); + + +/***/ }), + +/***/ 494: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "URL", function() { return URL; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'livewrapped'; +var URL = 'https://lwadm.com/ad'; +var VERSION = '1.3'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]], + + /** + * Determines whether or not the given bid request is valid. + * + * Parameters should be + * + * adUnitId: LiveWrapped's id of the ad unit. Optional. A guid identifying the ad unit. + * adUnitName: LiveWrapped's name of the ad unit Optional. (Prebid's ad unit code will be used otherwise.) + * publisherId: Publisher id. Required if adUnitName is used or both adUnitName and adUnitId is omitted, otherwise optional. + * userId: A persistent user id if available. Optional. + * url: Page url Optional. Use if page url cannot be determined due to use of iframes. + * bidUrl: Bidding endpoint Optional. + * seats: List of bidders and seats Optional. {"bidder name": ["seat 1", "seat 2"], ...} + * deviceId: Device id if available Optional. + * ifa: Advertising ID Optional. + * bundle: App bundle Optional. Read from config if exists. + * options Dynamic data Optional. Optional data to send into adapter. + * + * @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.adUnitId || (bid.params.adUnitName || bid.adUnitCode || bid.placementCode) && bid.params.publisherId) !== undefined; + }, + + /** + * 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 userId = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasUserId); + var pubcid = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasPubcid); + var publisherId = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasPublisherId); + var auctionId = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasAuctionId); + var bidUrl = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasBidUrl); + var url = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasUrl); + var test = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasTestParam); + var seats = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasSeatsParam); + var deviceId = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasDeviceIdParam); + var ifa = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasIfaParam); + var bundle = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasBundleParam); + var tid = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(bidRequests, hasTidParam); + var schain = bidRequests[0].schain; + bidUrl = bidUrl ? bidUrl.params.bidUrl : URL; + url = url ? url.params.url : getAppDomain() || getTopWindowLocation(bidderRequest); + test = test ? test.params.test : undefined; + var adRequests = bidRequests.map(bidToAdRequest); + var payload = { + auctionId: auctionId ? auctionId.auctionId : undefined, + publisherId: publisherId ? publisherId.params.publisherId : undefined, + userId: userId ? userId.params.userId : pubcid ? pubcid.crumbs.pubcid : undefined, + url: url, + test: test, + seats: seats ? seats.params.seats : undefined, + deviceId: deviceId ? deviceId.params.deviceId : undefined, + ifa: ifa ? ifa.params.ifa : getDeviceIfa(), + bundle: bundle ? bundle.params.bundle : getAppBundle(), + width: getDeviceWidth(), + height: getDeviceHeight(), + tid: tid ? tid.params.tid : undefined, + version: VERSION, + gdprApplies: bidderRequest.gdprConsent ? bidderRequest.gdprConsent.gdprApplies : undefined, + gdprConsent: bidderRequest.gdprConsent ? bidderRequest.gdprConsent.consentString : undefined, + cookieSupport: !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isSafariBrowser"]() && storage.cookiesAreEnabled(), + rcv: getAdblockerRecovered(), + adRequests: _toConsumableArray(adRequests), + rtbData: handleEids(bidRequests), + schain: schain + }; + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig().debug) { + payload.dbg = true; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: bidUrl, + 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) { + var bidResponses = []; + + if (serverResponse.body.dbg && window.livewrapped && window.livewrapped.s2sDebug) { + window.livewrapped.s2sDebug(serverResponse.body.dbg); + } + + serverResponse.body.ads.forEach(function (ad) { + var bidResponse = { + requestId: ad.bidId, + bidderCode: BIDDER_CODE, + cpm: ad.cpmBid, + width: ad.width, + height: ad.height, + ad: ad.tag, + ttl: ad.ttl, + creativeId: ad.creativeId, + netRevenue: true, + currency: serverResponse.body.currency, + meta: ad.meta + }; + + if (ad.native) { + bidResponse.native = ad.native; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]; + } + + bidResponses.push(bidResponse); + }); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (serverResponses.length == 0) return []; + var syncList = []; + var userSync = serverResponses[0].body.pixels || []; + userSync.forEach(function (sync) { + if (syncOptions.pixelEnabled && sync.type == 'Redirect') { + syncList.push({ + type: 'image', + url: sync.url + }); + } + + if (syncOptions.iframeEnabled && sync.type == 'Iframe') { + syncList.push({ + type: 'iframe', + url: sync.url + }); + } + }); + return syncList; + } +}; + +function hasUserId(bid) { + return !!bid.params.userId; +} + +function hasPublisherId(bid) { + return !!bid.params.publisherId; +} + +function hasUrl(bid) { + return !!bid.params.url; +} + +function hasBidUrl(bid) { + return !!bid.params.bidUrl; +} + +function hasAuctionId(bid) { + return !!bid.auctionId; +} + +function hasTestParam(bid) { + return !!bid.params.test; +} + +function hasSeatsParam(bid) { + return !!bid.params.seats; +} + +function hasDeviceIdParam(bid) { + return !!bid.params.deviceId; +} + +function hasIfaParam(bid) { + return !!bid.params.ifa; +} + +function hasBundleParam(bid) { + return !!bid.params.bundle; +} + +function hasTidParam(bid) { + return !!bid.params.tid; +} + +function hasPubcid(bid) { + return !!bid.crumbs && !!bid.crumbs.pubcid; +} + +function bidToAdRequest(bid) { + var adRequest = { + adUnitId: bid.params.adUnitId, + callerAdUnitId: bid.params.adUnitName || bid.adUnitCode || bid.placementCode, + bidId: bid.bidId, + transactionId: bid.transactionId, + formats: getSizes(bid).map(sizeToFormat), + options: bid.params.options + }; + adRequest.native = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.native'); + + if (adRequest.native && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner')) { + adRequest.banner = true; + } + + return adRequest; +} + +function getSizes(bid) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes')) { + return bid.mediaTypes.banner.sizes; + } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) { + return bid.sizes; + } + + return []; +} + +function sizeToFormat(size) { + return { + width: size[0], + height: size[1] + }; +} + +function getAdblockerRecovered() { + try { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().I12C && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().I12C.Morph === 1; + } catch (e) {} +} + +function AddExternalUserId(eids, value, source, atype, rtiPartner) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value)) { + var eid = { + source: source, + uids: [{ + id: value, + atype: atype + }] + }; + + if (rtiPartner) { + eid.uids[0] = { + ext: { + rtiPartner: rtiPartner + } + }; + } + + eids.push(eid); + } +} + +function handleEids(bidRequests) { + var eids = []; + var bidRequest = bidRequests[0]; + + if (bidRequest && bidRequest.userId) { + AddExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.pubcid"), 'pubcommon', 1); // Also add this to eids + + AddExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.id5id"), 'id5-sync.com', 1); + } + + if (eids.length > 0) { + return { + user: { + ext: { + eids: eids + } + } + }; + } + + return undefined; +} + +function getTopWindowLocation(bidderRequest) { + var url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + return __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl') || url; +} + +function getAppBundle() { + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + return __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app').bundle; + } +} + +function getAppDomain() { + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + return __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app').domain; + } +} + +function getDeviceIfa() { + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device')) === 'object') { + return __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device').ifa; + } +} + +function getDeviceWidth() { + var device = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device'); + + if (_typeof(device) === 'object' && device.width) { + return device.width; + } + + return window.innerWidth; +} + +function getDeviceHeight() { + var device = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device'); + + if (_typeof(device) === 'object' && device.height) { + return device.height; + } + + return window.innerHeight; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[493]); \ No newline at end of file diff --git a/build/dist/liveyieldAnalyticsAdapter.js b/build/dist/liveyieldAnalyticsAdapter.js new file mode 100644 index 00000000000..d241ba1e0b5 --- /dev/null +++ b/build/dist/liveyieldAnalyticsAdapter.js @@ -0,0 +1,667 @@ +pbjsChunk([29],{ + +/***/ 495: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(496); + + +/***/ }), + +/***/ 496: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + BID_WON = _CONSTANTS$EVENTS.BID_WON; +var prebidVersion = "4.2.0"; +var adapterConfig = { + /** Name of the `rta` function, override only when instructed. */ + rtaFunctionName: 'rta', + + /** This is optional but highly recommended. The value returned by the + * function will be used as ad impression ad unit attribute value. + * + * As such if you have placement (10293845) or ad unit codes + * (div-gpt-ad-124984-0) but you want these to be translated to meaningful + * values like 'SIDEBAR-AD-01-MOBILE' then this function shall express this + * mapping. + */ + getAdUnitName: function getAdUnitName(placementOrAdUnitCode) { + return placementOrAdUnitCode; + }, + + /** + * Function used to extract placement/adUnitCode (depending on prebid + * version). + * + * The extracted value will be passed to the `getAdUnitName()` for mapping into + * human friendly value. + */ + getPlacementOrAdUnitCode: function getPlacementOrAdUnitCode(bid, version) { + return version[0] === '0' ? bid.placementCode : bid.adUnitCode; + }, + + /** + * Optional reference to Google Publisher Tag (gpt) + */ + googlePublisherTag: false, + + /** + * Do not override unless instructed. Useful for testing. Allows to redefined + * the event that triggers the ad impression event. + */ + wireGooglePublisherTag: function wireGooglePublisherTag(gpt, cb) { + gpt.pubads().addEventListener('slotRenderEnded', function (event) { + cb(event.slot); + }); + }, + + /** + * Map which keeps BID_WON events. Keyed by adId property. + */ + prebidWinnersCache: {}, + + /** + * Map which keeps all BID_RESPONSE events. Keyed by adId property. + */ + prebidBidResponsesCache: {}, + + /** + * Decides if the GPT slot contains prebid ad impression or not. + * + * When BID_WON event is emitted adid is added to prebidWinnersCache, + * then we check if prebidWinnersCache contains slot.hb_adid. + * + * This function is optional and used only when googlePublisherTag is provided. + * + * Default implementation uses slot's `hb_adid` targeting parameter. + * + * @param slot the gpt slot + */ + isPrebidAdImpression: function isPrebidAdImpression(slot) { + var hbAdIdTargeting = slot.getTargeting('hb_adid'); + + if (hbAdIdTargeting.length > 0) { + var hbAdId = hbAdIdTargeting[0]; + return typeof this.prebidWinnersCache[hbAdId] !== 'undefined'; + } + + return false; + }, + + /** + * If isPrebidAdImpression decides that slot contain prebid ad impression, + * this function should return prebids highest ad impression partner for that + * slot. + * + * Default implementation uses slot's `hb_adid` targeting value to find + * highest bid response and when present then returns `bidder`. + * + * @param instanceConfig merged analytics adapter instance configuration + * @param slot the gpt slot for which the name of the highest bidder shall be + * returned + * @param version the version of the prebid.js library + */ + getHighestPrebidAdImpressionPartner: function getHighestPrebidAdImpressionPartner(instanceConfig, slot, version) { + var bid = getHighestPrebidBidResponseBySlotTargeting(instanceConfig, slot, version); // this is bid response event has `bidder` while bid won has bidderCode property + + return bid ? bid.bidderCode || bid.bidder : null; + }, + + /** + * If isPrebidAdImpression decides that slot contain prebid ad impression, + * this function should return prebids highest ad impression value for that + * slot. + * + * Default implementation uses slot's `hb_adid` targeting value to find + * highest bid response and when present then returns `cpm`. + * + * @param instanceConfig merged analytics adapter instance configuration + * @param slot the gpt slot for which the highest ad impression value shall be + * returned + * @param version the version of the prebid.js library + */ + getHighestPrebidAdImpressionValue: function getHighestPrebidAdImpressionValue(instanceConfig, slot, version) { + var bid = getHighestPrebidBidResponseBySlotTargeting(instanceConfig, slot, version); + return bid ? bid.cpm : null; + }, + + /** + * This function should return proper ad unit name for slot given as a + * parameter. Unit names returned by this function should be meaningful, for + * example 'FOO_728x90_TOP'. The values returned shall be inline with + * `getAdUnitName`. + * + * Required when googlePublisherTag is defined. + * + * @param slot the gpt slot to translate into friendly name + * @param version the version of the prebid.js library + */ + getAdUnitNameByGooglePublisherTagSlot: function getAdUnitNameByGooglePublisherTagSlot(slot, version) { + throw 'Required when googlePublisherTag is defined.'; + }, + + /** + * Function used to prepare and return parameters provided to rta. + * More information will be in docs given by LiveYield team. + * + * When googlePublisherTag is not provided, second parameter(slot) will always + * equal null. + * + * @param resolution the original ad impression details + * @param slot gpt slot, will be empty in pure Prebid.js-case (when + * googlePublisherTag is not provided) + * @param hbPartner the name of the highest bidding partner + * @param hbValue the value of the highest bid + * @param version version of the prebid.js library + */ + postProcessResolution: function postProcessResolution(resolution, slot, hbPartner, hbValue, version) { + return resolution; + } +}; + +var cpmToMicroUSD = function cpmToMicroUSD(v) { + return isNaN(v) ? 0 : Math.round(v * 1000); +}; + +var getHighestPrebidBidResponseBySlotTargeting = function getHighestPrebidBidResponseBySlotTargeting(instanceConfig, slot, version) { + var hbAdIdTargeting = slot.getTargeting('hb_adid'); + + if (hbAdIdTargeting.length > 0) { + var hbAdId = hbAdIdTargeting[0]; + return instanceConfig.prebidWinnersCache[hbAdId] || instanceConfig.prebidBidResponsesCache[hbAdId]; + } + + return null; +}; + +var liveyield = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: 'bundle' +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + switch (eventType) { + case BID_REQUESTED: + args.bids.forEach(function (b) { + try { + window[liveyield.instanceConfig.rtaFunctionName]('bidRequested', liveyield.instanceConfig.getAdUnitName(liveyield.instanceConfig.getPlacementOrAdUnitCode(b, prebidVersion)), args.bidderCode); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"](e); + } + }); + break; + + case BID_RESPONSE: + liveyield.instanceConfig.prebidBidResponsesCache[args.adId] = args; + var cpm = args.statusMessage === 'Bid available' ? args.cpm : null; + + try { + window[liveyield.instanceConfig.rtaFunctionName]('addBid', liveyield.instanceConfig.getAdUnitName(liveyield.instanceConfig.getPlacementOrAdUnitCode(args, prebidVersion)), args.bidder || 'unknown', cpmToMicroUSD(cpm), typeof args.bidder === 'undefined', args.statusMessage !== 'Bid available'); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"](e); + } + + break; + + case BID_TIMEOUT: + window[liveyield.instanceConfig.rtaFunctionName]('biddersTimeout', args); + break; + + case BID_WON: + liveyield.instanceConfig.prebidWinnersCache[args.adId] = args; + + if (liveyield.instanceConfig.googlePublisherTag) { + break; + } + + try { + var ad = liveyield.instanceConfig.getAdUnitName(liveyield.instanceConfig.getPlacementOrAdUnitCode(args, prebidVersion)); + + if (!ad) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('Cannot find ad by unit name: ' + liveyield.instanceConfig.getAdUnitName(liveyield.instanceConfig.getPlacementOrAdUnitCode(args, prebidVersion))); + break; + } + + if (!args.bidderCode || !args.cpm) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('Bidder code or cpm is not valid'); + break; + } + + var resolution = { + targetings: [] + }; + resolution.prebidWon = true; + resolution.prebidPartner = args.bidderCode; + resolution.prebidValue = cpmToMicroUSD(parseFloat(args.cpm)); + var resolutionToUse = liveyield.instanceConfig.postProcessResolution(resolution, null, resolution.prebidPartner, resolution.prebidValue, prebidVersion); + window[liveyield.instanceConfig.rtaFunctionName]('resolveSlot', liveyield.instanceConfig.getAdUnitName(liveyield.instanceConfig.getPlacementOrAdUnitCode(args, prebidVersion)), resolutionToUse); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"](e); + } + + break; + } + } +}); + +liveyield.originEnableAnalytics = liveyield.enableAnalytics; +/** + * Minimal valid config: + * + * ``` + * { + * provider: 'liveyield', + * options: { + * // will be provided by the LiveYield team + * customerId: 'UUID', + * // will be provided by the LiveYield team, + * customerName: 'Customer Name', + * // do NOT use window.location.host, use constant value + * customerSite: 'Fixed Site Name', + * // this is used to be inline with GA 'sessionizer' which closes the session on midnight (EST-time). + * sessionTimezoneOffset: '-300' + * } + * } + * ``` + */ + +liveyield.enableAnalytics = function (config) { + if (!config || !config.provider || config.provider !== 'liveyield') { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('expected config.provider to equal liveyield'); + return; + } + + if (!config.options) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('options must be defined'); + return; + } + + if (!config.options.customerId) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('options.customerId is required'); + return; + } + + if (!config.options.customerName) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('options.customerName is required'); + return; + } + + if (!config.options.customerSite) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('options.customerSite is required'); + return; + } + + if (!config.options.sessionTimezoneOffset) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('options.sessionTimezoneOffset is required'); + return; + } + + liveyield.instanceConfig = _extends({ + prebidWinnersCache: {}, + prebidBidResponsesCache: {} + }, adapterConfig, config.options); + + if (typeof window[liveyield.instanceConfig.rtaFunctionName] !== 'function') { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]("Function ".concat(liveyield.instanceConfig.rtaFunctionName, " is not defined.") + "Make sure that LiveYield snippet in included before the Prebid Analytics configuration."); + return; + } + + if (liveyield.instanceConfig.googlePublisherTag) { + liveyield.instanceConfig.wireGooglePublisherTag(liveyield.instanceConfig.googlePublisherTag, onSlotRenderEnded(liveyield.instanceConfig)); + } + + var additionalParams = { + customerTimezone: config.options.customerTimezone, + contentId: config.options.contentId, + contentPart: config.options.contentPart, + contentAuthor: config.options.contentAuthor, + contentTitle: config.options.contentTitle, + contentCategory: config.options.contentCategory, + contentLayout: config.options.contentLayout, + contentVariants: config.options.contentVariants, + contentTimezone: config.options.contentTimezone, + cstringDim1: config.options.cstringDim1, + cstringDim2: config.options.cstringDim2, + cintDim1: config.options.cintDim1, + cintDim2: config.options.cintDim2, + cintArrayDim1: config.options.cintArrayDim1, + cintArrayDim2: config.options.cintArrayDim2, + cuniqueStringMet1: config.options.cuniqueStringMet1, + cuniqueStringMet2: config.options.cuniqueStringMet2, + cavgIntMet1: config.options.cavgIntMet1, + cavgIntMet2: config.options.cavgIntMet2, + csumIntMet1: config.options.csumIntMet1, + csumIntMet2: config.options.csumIntMet2 + }; + Object.keys(additionalParams).forEach(function (key) { + return additionalParams[key] == null && delete additionalParams[key]; + }); + window[liveyield.instanceConfig.rtaFunctionName]('create', config.options.customerId, config.options.customerName, config.options.customerSite, config.options.sessionTimezoneOffset, additionalParams); + liveyield.originEnableAnalytics(config); +}; + +var onSlotRenderEnded = function onSlotRenderEnded(instanceConfig) { + var addDfpDetails = function addDfpDetails(resolution, slot) { + var responseInformation = slot.getResponseInformation(); + + if (responseInformation) { + resolution.dfpAdvertiserId = responseInformation.advertiserId; + resolution.dfpLineItemId = responseInformation.sourceAgnosticLineItemId; + resolution.dfpCreativeId = responseInformation.creativeId; + } + }; + + var addPrebidDetails = function addPrebidDetails(resolution, slot) { + if (instanceConfig.isPrebidAdImpression(slot)) { + resolution.prebidWon = true; + } + + var highestPrebidAdImpPartner = instanceConfig.getHighestPrebidAdImpressionPartner(instanceConfig, slot, prebidVersion); + var highestPrebidAdImpValue = instanceConfig.getHighestPrebidAdImpressionValue(instanceConfig, slot, prebidVersion); + + if (highestPrebidAdImpPartner) { + resolution.prebidPartner = highestPrebidAdImpPartner; + } + + if (highestPrebidAdImpValue) { + resolution.prebidValue = cpmToMicroUSD(parseFloat(highestPrebidAdImpValue)); + } + }; + + return function (slot) { + var resolution = { + targetings: [] + }; + addDfpDetails(resolution, slot); + addPrebidDetails(resolution, slot); + var resolutionToUse = instanceConfig.postProcessResolution(resolution, slot, resolution.highestPrebidAdImpPartner, resolution.highestPrebidAdImpValue, prebidVersion); + window[instanceConfig.rtaFunctionName]('resolveSlot', instanceConfig.getAdUnitNameByGooglePublisherTagSlot(slot, prebidVersion), resolutionToUse); + }; +}; + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: liveyield, + code: 'liveyield' +}); +/* harmony default export */ __webpack_exports__["default"] = (liveyield); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[495]); \ No newline at end of file diff --git a/build/dist/lkqdBidAdapter.js b/build/dist/lkqdBidAdapter.js new file mode 100644 index 00000000000..aa45f30fb58 --- /dev/null +++ b/build/dist/lkqdBidAdapter.js @@ -0,0 +1,328 @@ +pbjsChunk([185],{ + +/***/ 497: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(498); + + +/***/ }), + +/***/ 498: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'lkqd'; +var BID_TTL_DEFAULT = 300; +var ENDPOINT = 'https://v.lkqd.net/ad'; +var PARAM_OUTPUT_DEFAULT = 'vast'; +var PARAM_EXECUTION_DEFAULT = 'any'; +var PARAM_SUPPORT_DEFAULT = 'html5'; +var PARAM_PLAYINIT_DEFAULT = 'auto'; +var PARAM_VOLUME_DEFAULT = '100'; + +function _validateId(id) { + if (id && typeof id !== 'undefined' && parseInt(id) > 0) { + return true; + } + + return false; +} + +function isBidRequestValid(bidRequest) { + if (bidRequest.bidder === BIDDER_CODE && typeof bidRequest.params !== 'undefined') { + if (_validateId(bidRequest.params.siteId) && _validateId(bidRequest.params.placementId)) { + return true; + } + } + + return false; +} + +function buildRequests(validBidRequests, bidderRequest) { + var bidRequests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + var bidRequest = validBidRequests[i]; + var sizes = []; // if width/height not provided to the ad unit for some reason then attempt request with default 640x480 size + + var bidRequestSizes = bidRequest.sizes; + var bidRequestDeepSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize'); + + if ((!bidRequestSizes || !bidRequestSizes.length) && (!bidRequestDeepSizes || !bidRequestDeepSizes.length)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Warning: Could not find valid width/height parameters on the provided adUnit'); + sizes = [[640, 480]]; + } // JWPlayer demo page uses sizes: [640,480] instead of sizes: [[640,480]] so need to handle single-layer array as well as nested arrays + + + if (bidRequestSizes && bidRequestSizes.length > 0) { + sizes = bidRequestSizes; + + if (bidRequestSizes.length === 2 && typeof bidRequestSizes[0] === 'number' && typeof bidRequestSizes[1] === 'number') { + sizes = [bidRequestSizes]; + } + } else if (bidRequestDeepSizes && bidRequestDeepSizes.length > 0) { + sizes = bidRequestDeepSizes; + + if (bidRequestDeepSizes.length === 2 && typeof bidRequestDeepSizes[0] === 'number' && typeof bidRequestDeepSizes[1] === 'number') { + sizes = [bidRequestDeepSizes]; + } + } + + var _loop = function _loop(j) { + var size = sizes[j]; + var playerWidth = void 0; + var playerHeight = void 0; + + if (size && size.length == 2) { + playerWidth = size[0]; + playerHeight = size[1]; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Warning: Could not determine width/height from the provided adUnit'); + } + + var sspUrl = ENDPOINT.concat(); + var sspData = {}; // required parameters + + sspData.pid = bidRequest.params.placementId; + sspData.sid = bidRequest.params.siteId; + sspData.prebid = true; // optional parameters + + if (bidRequest.params.hasOwnProperty('output') && bidRequest.params.output != null) { + sspData.output = bidRequest.params.output; + } else { + sspData.output = PARAM_OUTPUT_DEFAULT; + } + + if (bidRequest.params.hasOwnProperty('execution') && bidRequest.params.execution != null) { + sspData.execution = bidRequest.params.execution; + } else { + sspData.execution = PARAM_EXECUTION_DEFAULT; + } + + if (bidRequest.params.hasOwnProperty('support') && bidRequest.params.support != null) { + sspData.support = bidRequest.params.support; + } else { + sspData.support = PARAM_SUPPORT_DEFAULT; + } + + if (bidRequest.params.hasOwnProperty('playinit') && bidRequest.params.playinit != null) { + sspData.playinit = bidRequest.params.playinit; + } else { + sspData.playinit = PARAM_PLAYINIT_DEFAULT; + } + + if (bidRequest.params.hasOwnProperty('volume') && bidRequest.params.volume != null) { + sspData.volume = bidRequest.params.volume; + } else { + sspData.volume = PARAM_VOLUME_DEFAULT; + } + + if (playerWidth) { + sspData.width = playerWidth; + } + + if (playerHeight) { + sspData.height = playerHeight; + } + + if (bidRequest.params.hasOwnProperty('vpaidmode') && bidRequest.params.vpaidmode != null) { + sspData.vpaidmode = bidRequest.params.vpaidmode; + } + + if (bidRequest.params.hasOwnProperty('appname') && bidRequest.params.appname != null) { + sspData.appname = bidRequest.params.appname; + } + + if (bidRequest.params.hasOwnProperty('bundleid') && bidRequest.params.bundleid != null) { + sspData.bundleid = bidRequest.params.bundleid; + } + + if (bidRequest.params.hasOwnProperty('aid') && bidRequest.params.aid != null) { + sspData.aid = bidRequest.params.aid; + } + + if (bidRequest.params.hasOwnProperty('idfa') && bidRequest.params.idfa != null) { + sspData.idfa = bidRequest.params.idfa; + } + + if (bidRequest.params.hasOwnProperty('gdpr') && bidRequest.params.gdpr != null) { + sspData.gdpr = bidRequest.params.gdpr; + } + + if (bidRequest.params.hasOwnProperty('gdprcs') && bidRequest.params.gdprcs != null) { + sspData.gdprcs = bidRequest.params.gdprcs; + } + + if (bidRequest.params.hasOwnProperty('flrd') && bidRequest.params.flrd != null) { + sspData.flrd = bidRequest.params.flrd; + } + + if (bidRequest.params.hasOwnProperty('flrmp') && bidRequest.params.flrmp != null) { + sspData.flrmp = bidRequest.params.flrmp; + } + + if (bidRequest.params.hasOwnProperty('schain') && bidRequest.params.schain != null) { + sspData.schain = bidRequest.params.schain; + } + + if (bidRequest.params.hasOwnProperty('placement') && bidRequest.params.placement != null) { + sspData.placement = bidRequest.params.placement; + } + + if (bidRequest.params.hasOwnProperty('timeout') && bidRequest.params.timeout != null) { + sspData.timeout = bidRequest.params.timeout; + } + + if (bidRequest.params.hasOwnProperty('dnt') && bidRequest.params.dnt != null) { + sspData.dnt = bidRequest.params.dnt; + } + + if (bidRequest.params.hasOwnProperty('pageurl') && bidRequest.params.pageurl != null) { + sspData.pageurl = bidRequest.params.pageurl; + } else if (bidderRequest && bidderRequest.refererInfo) { + sspData.pageurl = encodeURIComponent(encodeURIComponent(bidderRequest.refererInfo.referer)); + } + + if (bidRequest.params.hasOwnProperty('contentId') && bidRequest.params.contentId != null) { + sspData.contentid = bidRequest.params.contentId; + } + + if (bidRequest.params.hasOwnProperty('contentTitle') && bidRequest.params.contentTitle != null) { + sspData.contenttitle = bidRequest.params.contentTitle; + } + + if (bidRequest.params.hasOwnProperty('contentLength') && bidRequest.params.contentLength != null) { + sspData.contentlength = bidRequest.params.contentLength; + } + + if (bidRequest.params.hasOwnProperty('contentUrl') && bidRequest.params.contentUrl != null) { + sspData.contenturl = bidRequest.params.contentUrl; + } + + if (bidRequest.params.hasOwnProperty('schain') && bidRequest.params.schain) { + sspData.schain = bidRequest.params.schain; + } // random number to prevent caching + + + sspData.rnd = Math.floor(Math.random() * 999999999); // Prebid.js required properties + + sspData.bidId = bidRequest.bidId; + sspData.bidWidth = playerWidth; + sspData.bidHeight = playerHeight; + bidRequests.push({ + method: 'GET', + url: sspUrl, + data: Object.keys(sspData).map(function (key) { + return key + '=' + sspData[key]; + }).join('&') + '&' + }); + }; + + for (var j = 0; j < sizes.length; j++) { + _loop(j); + } + } + + return bidRequests; +} + +function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + + if (serverResponse && serverResponse.body) { + if (serverResponse.error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error: ' + serverResponse.error); + return bidResponses; + } else { + try { + var bidResponse = {}; + + if (bidRequest && bidRequest.data && typeof bidRequest.data === 'string') { + var sspData; + var sspBidId; + var sspBidWidth; + var sspBidHeight; + + if (window.URLSearchParams) { + sspData = new URLSearchParams(bidRequest.data); + sspBidId = sspData.get('bidId'); + sspBidWidth = sspData.get('bidWidth'); + sspBidHeight = sspData.get('bidHeight'); + } else { + if (bidRequest.data.indexOf('bidId=') >= 0) { + sspBidId = bidRequest.data.substr(bidRequest.data.indexOf('bidId=') + 6, bidRequest.data.length); + sspBidId = sspBidId.split('&')[0]; + } + + if (bidRequest.data.indexOf('bidWidth=') >= 0) { + sspBidWidth = bidRequest.data.substr(bidRequest.data.indexOf('bidWidth=') + 9, bidRequest.data.length); + sspBidWidth = sspBidWidth.split('&')[0]; + } + + if (bidRequest.data.indexOf('bidHeight=') >= 0) { + sspBidHeight = bidRequest.data.substr(bidRequest.data.indexOf('bidHeight=') + 10, bidRequest.data.length); + sspBidHeight = sspBidHeight.split('&')[0]; + } + } + + if (sspBidId) { + var sspXmlString = serverResponse.body; + var sspXml = new window.DOMParser().parseFromString(sspXmlString, 'text/xml'); + + if (sspXml && sspXml.getElementsByTagName('parsererror').length == 0) { + var sspUrl = bidRequest.url.concat(); + bidResponse.requestId = sspBidId; + bidResponse.bidderCode = BIDDER_CODE; + bidResponse.ad = ''; + bidResponse.cpm = parseFloat(sspXml.getElementsByTagName('Pricing')[0].textContent); + bidResponse.width = sspBidWidth; + bidResponse.height = sspBidHeight; + bidResponse.ttl = BID_TTL_DEFAULT; + bidResponse.creativeId = sspXml.getElementsByTagName('Ad')[0].getAttribute('id'); + bidResponse.currency = sspXml.getElementsByTagName('Pricing')[0].getAttribute('currency'); + bidResponse.netRevenue = true; + bidResponse.vastUrl = sspUrl; + bidResponse.vastXml = sspXmlString; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponses.push(bidResponse); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error: Server response contained invalid XML'); + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error: Could not associate bid request to server response'); + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error: Could not associate bid request to server response'); + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error: Could not interpret server response'); + } + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error: No server response or server response was empty for the requested URL'); + } + + return bidResponses; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[497]); \ No newline at end of file diff --git a/build/dist/lockerdomeBidAdapter.js b/build/dist/lockerdomeBidAdapter.js new file mode 100644 index 00000000000..5955b0e6536 --- /dev/null +++ b/build/dist/lockerdomeBidAdapter.js @@ -0,0 +1,98 @@ +pbjsChunk([184],{ + +/***/ 499: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(500); + + +/***/ }), + +/***/ 500: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + +var spec = { + code: 'lockerdome', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.adUnitId; + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var schain; + var adUnitBidRequests = bidRequests.map(function (bid) { + if (bid.schain) schain = schain || bid.schain; + return { + requestId: bid.bidId, + adUnitCode: bid.adUnitCode, + adUnitId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('adUnitId', bid.params), + sizes: bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes + }; + }); + var bidderRequestCanonicalUrl = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.canonicalUrl || ''; + var bidderRequestReferer = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer || ''; + var payload = { + bidRequests: adUnitBidRequests, + url: encodeURIComponent(bidderRequestCanonicalUrl), + referrer: encodeURIComponent(bidderRequestReferer) + }; + + if (schain) { + payload.schain = schain; + } + + if (bidderRequest) { + if (bidderRequest.gdprConsent) { + payload.gdpr = { + applies: bidderRequest.gdprConsent.gdprApplies, + consent: bidderRequest.gdprConsent.consentString + }; + } + + if (bidderRequest.uspConsent) { + payload.us_privacy = { + consent: bidderRequest.uspConsent + }; + } + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: 'https://lockerdome.com/ladbid/prebid', + data: payloadString + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + if (!serverResponse || !serverResponse.body || !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: bid.netRevenue, + ad: bid.ad, + ttl: bid.ttl + }; + }); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[499]); \ No newline at end of file diff --git a/build/dist/logicadBidAdapter.js b/build/dist/logicadBidAdapter.js new file mode 100644 index 00000000000..58c5d624db6 --- /dev/null +++ b/build/dist/logicadBidAdapter.js @@ -0,0 +1,92 @@ +pbjsChunk([183],{ + +/***/ 501: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(502); + + +/***/ }), + +/***/ 502: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); + + +var BIDDER_CODE = 'logicad'; +var ENDPOINT_URL = 'https://pb.ladsp.com/adrequest/prebid'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params && bid.params.tid); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var requests = []; + + for (var i = 0, len = bidRequests.length; i < len; i++) { + var request = { + method: 'POST', + url: ENDPOINT_URL, + data: JSON.stringify(newBidRequest(bidRequests[i], bidderRequest)), + options: {}, + bidderRequest: bidderRequest + }; + requests.push(request); + } + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidderRequest) { + serverResponse = serverResponse.body; + var bids = []; + + if (!serverResponse || serverResponse.error) { + return bids; + } + + serverResponse.seatbid.forEach(function (seatbid) { + bids.push(seatbid.bid); + }); + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (serverResponses.length > 0 && serverResponses[0].body.userSync && syncOptions.pixelEnabled && serverResponses[0].body.userSync.type == 'image') { + return [{ + type: 'image', + url: serverResponses[0].body.userSync.url + }]; + } + + return []; + } +}; + +function newBidRequest(bid, bidderRequest) { + return { + auctionId: bid.auctionId, + bidderRequestId: bid.bidderRequestId, + bids: [{ + adUnitCode: bid.adUnitCode, + bidId: bid.bidId, + transactionId: bid.transactionId, + sizes: bid.sizes, + params: bid.params, + mediaTypes: bid.mediaTypes + }], + prebidJsVersion: "4.2.0", + referrer: bidderRequest.refererInfo.referer, + auctionStartTime: bidderRequest.auctionStart + }; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[501]); \ No newline at end of file diff --git a/build/dist/loopmeBidAdapter.js b/build/dist/loopmeBidAdapter.js new file mode 100644 index 00000000000..f10b723c9a5 --- /dev/null +++ b/build/dist/loopmeBidAdapter.js @@ -0,0 +1,167 @@ +pbjsChunk([182],{ + +/***/ 503: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(504); + + +/***/ }), + +/***/ 504: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var LOOPME_ENDPOINT = 'https://loopme.me/api/hb'; + +var entries = function entries(obj) { + var output = []; + + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + output.push([key, obj[key]]); + } + } + + return output; +}; + +var spec = { + code: 'loopme', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + + /** + * @param {object} bid + * @return boolean + */ + isBidRequestValid: function isBidRequestValid(bid) { + if (_typeof(bid.params) !== 'object') { + return false; + } + + return !!bid.params.ak; + }, + + /** + * @param {BidRequest[]} bidRequests + * @param bidderRequest + * @return ServerRequest[] + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + return bidRequests.map(function (bidRequest) { + bidRequest.startTime = new Date().getTime(); + var payload = bidRequest.params; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.user_consent = bidderRequest.gdprConsent.consentString; + } + + var queryString = entries(payload).map(function (item) { + return "".concat(item[0], "=").concat(encodeURI(item[1])); + }).join('&'); + var adUnitSizes = bidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]] ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getAdUnitSizes"](bidRequest) : __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest.mediaTypes, 'video.playerSize'); + var sizes = '&sizes=' + adUnitSizes.map(function (size) { + return "".concat(size[0], "x").concat(size[1]); + }).join('&sizes='); + queryString = "".concat(queryString).concat(sizes).concat(bidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]] ? '&media_type=video' : ''); + return { + method: 'GET', + url: "".concat(LOOPME_ENDPOINT), + options: { + withCredentials: false + }, + bidId: bidRequest.bidId, + data: queryString + }; + }); + }, + + /** + * @param {*} responseObj + * @param {BidRequest} bidRequest + * @return {Bid[]} An array of bids which + */ + interpretResponse: function interpretResponse() { + var response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var bidRequest = arguments.length > 1 ? arguments[1] : undefined; + var responseObj = response.body; + + if (responseObj === null || _typeof(responseObj) !== 'object') { + return []; + } + + if (!responseObj.hasOwnProperty('ad') && !responseObj.hasOwnProperty('vastUrl')) { + return []; + } // responseObj.vastUrl = 'https://rawgit.com/InteractiveAdvertisingBureau/VAST_Samples/master/VAST%201-2.0%20Samples/Inline_NonLinear_Verification_VAST2.0.xml'; + + + if (responseObj.vastUrl) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: bidRequest.bidId, + url: 'https://i.loopme.me/html/vast/loopme_flex.js', + loaded: false + }); + renderer.setRender(function (bid) { + renderer.push(function () { + var adverts = [{ + 'type': 'VAST', + 'url': bid.vastUrl, + 'autoClose': -1 + }]; + var config = { + containerId: bid.adUnitCode, + vastTimeout: 250, + ads: adverts, + user_consent: '%%USER_CONSENT%%' + }; + window.L.flex.loader.load(config); + }); + }); + return [{ + requestId: bidRequest.bidId, + cpm: responseObj.cpm, + width: responseObj.width, + height: responseObj.height, + ttl: responseObj.ttl, + currency: responseObj.currency, + creativeId: responseObj.creativeId, + dealId: responseObj.dealId, + netRevenue: responseObj.netRevenue, + vastUrl: responseObj.vastUrl, + mediaType: __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], + renderer: renderer + }]; + } + + return [{ + requestId: bidRequest.bidId, + cpm: responseObj.cpm, + width: responseObj.width, + height: responseObj.height, + ad: responseObj.ad, + ttl: responseObj.ttl, + currency: responseObj.currency, + creativeId: responseObj.creativeId, + dealId: responseObj.dealId, + netRevenue: responseObj.netRevenue, + mediaType: __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */] + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[503]); \ No newline at end of file diff --git a/build/dist/lotamePanoramaIdSystem.js b/build/dist/lotamePanoramaIdSystem.js new file mode 100644 index 00000000000..33a71a0b787 --- /dev/null +++ b/build/dist/lotamePanoramaIdSystem.js @@ -0,0 +1,266 @@ +pbjsChunk([181],{ + +/***/ 505: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(506); + + +/***/ }), + +/***/ 506: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lotamePanoramaIdSubmodule", function() { return lotamePanoramaIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); +/** + * This module adds LotamePanoramaId to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/lotamePanoramaId + * @requires module:modules/userId + */ + + + + +var KEY_ID = 'panoramaId'; +var KEY_EXPIRY = "".concat(KEY_ID, "_expiry"); +var KEY_PROFILE = '_cc_id'; +var MODULE_NAME = 'lotamePanoramaId'; +var NINE_MONTHS_MS = 23328000 * 1000; +var DAYS_TO_CACHE = 7; +var DAY_MS = 60 * 60 * 24 * 1000; +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(null, MODULE_NAME); +/** + * Set the Lotame First Party Profile ID in the first party namespace + * @param {String} profileId + */ + +function setProfileId(profileId) { + if (storage.cookiesAreEnabled()) { + var expirationDate = new Date(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"]() + NINE_MONTHS_MS).toUTCString(); + storage.setCookie(KEY_PROFILE, profileId, expirationDate, 'Lax', undefined, undefined); + } + + if (storage.hasLocalStorage()) { + storage.setDataInLocalStorage(KEY_PROFILE, profileId, undefined); + } +} +/** + * Get the Lotame profile id by checking cookies first and then local storage + */ + + +function getProfileId() { + if (storage.cookiesAreEnabled()) { + return storage.getCookie(KEY_PROFILE, undefined); + } + + if (storage.hasLocalStorage()) { + return storage.getDataFromLocalStorage(KEY_PROFILE, undefined); + } +} +/** + * Get a value from browser storage by checking cookies first and then local storage + * @param {String} key + */ + + +function getFromStorage(key) { + var value = null; + + if (storage.cookiesAreEnabled()) { + value = storage.getCookie(key, undefined); + } + + if (storage.hasLocalStorage() && value === null) { + var storedValueExp = storage.getDataFromLocalStorage("".concat(key, "_exp"), undefined); + + if (storedValueExp === '') { + value = storage.getDataFromLocalStorage(key, undefined); + } else if (storedValueExp) { + if (new Date(storedValueExp).getTime() - Date.now() > 0) { + value = storage.getDataFromLocalStorage(key, undefined); + } + } + } + + return value; +} +/** + * Save a key/value pair to the browser cache (cookies and local storage) + * @param {String} key + * @param {String} value + * @param {Number} expirationTimestamp + */ + + +function saveLotameCache(key, value) { + var expirationTimestamp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"]() + DAYS_TO_CACHE * DAY_MS; + + if (key && value) { + var expirationDate = new Date(expirationTimestamp).toUTCString(); + + if (storage.cookiesAreEnabled()) { + storage.setCookie(key, value, expirationDate, 'Lax', undefined, undefined); + } + + if (storage.hasLocalStorage()) { + storage.setDataInLocalStorage("".concat(key, "_exp"), String(expirationTimestamp), undefined); + storage.setDataInLocalStorage(key, value, undefined); + } + } +} +/** + * Retrieve all the cached values from cookies and/or local storage + */ + + +function getLotameLocalCache() { + var cache = { + data: getFromStorage(KEY_ID), + expiryTimestampMs: 0 + }; + + try { + var rawExpiry = getFromStorage(KEY_EXPIRY); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](rawExpiry)) { + cache.expiryTimestampMs = parseInt(rawExpiry, 0); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + + return cache; +} +/** + * Clear a cached value from cookies and local storage + * @param {String} key + */ + + +function clearLotameCache(key) { + if (key) { + if (storage.cookiesAreEnabled()) { + var expirationDate = new Date(0).toUTCString(); + storage.setCookie(key, '', expirationDate, 'Lax', undefined, undefined); + } + + if (storage.hasLocalStorage()) { + storage.removeDataFromLocalStorage(key, undefined); + } + } +} +/** @type {Submodule} */ + + +var lotamePanoramaIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: MODULE_NAME, + + /** + * Decode the stored id value for passing to bid requests + * @function decode + * @param {(Object|string)} value + * @returns {(Object|undefined)} + */ + decode: function decode(value, configParams) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value) ? { + 'lotamePanoramaId': value + } : undefined; + }, + + /** + * Retrieve the Lotame Panorama Id + * @function + * @param {SubmoduleParams} [configParams] + * @param {ConsentData} [consentData] + * @param {(Object|undefined)} cacheIdObj + * @returns {IdResponse|undefined} + */ + getId: function getId(configParams, consentData, cacheIdObj) { + var localCache = getLotameLocalCache(); + var refreshNeeded = Date.now() > localCache.expiryTimestampMs; + + if (!refreshNeeded) { + return { + id: localCache.data + }; + } + + var storedUserId = getProfileId(); + + var resolveIdFunction = function resolveIdFunction(callback) { + var queryParams = {}; + + if (storedUserId) { + queryParams.fp = storedUserId; + } + + if (consentData && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isBoolean"](consentData.gdprApplies)) { + queryParams.gdpr_applies = consentData.gdprApplies; + + if (consentData.gdprApplies) { + queryParams.gdpr_consent = consentData.consentString; + } + } + + var url = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["buildUrl"]({ + protocol: 'https', + host: "id.crwdcntrl.net", + pathname: '/id', + search: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](queryParams) ? undefined : queryParams + }); + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(url, function (response) { + var coreId; + + if (response) { + try { + var responseObj = JSON.parse(response); + saveLotameCache(KEY_EXPIRY, responseObj.expiry_ts); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](responseObj.profile_id)) { + setProfileId(responseObj.profile_id); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](responseObj.core_id)) { + saveLotameCache(KEY_ID, responseObj.core_id, responseObj.expiry_ts); + coreId = responseObj.core_id; + } else { + clearLotameCache(KEY_ID); + } + } else { + clearLotameCache(KEY_PROFILE); + clearLotameCache(KEY_ID); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + } + + callback(coreId); + }, undefined, { + method: 'GET', + withCredentials: true + }); + }; + + return { + callback: resolveIdFunction + }; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', lotamePanoramaIdSubmodule); + +/***/ }) + +},[505]); \ No newline at end of file diff --git a/build/dist/lunamediaBidAdapter.js b/build/dist/lunamediaBidAdapter.js new file mode 100644 index 00000000000..2abb19f1cb1 --- /dev/null +++ b/build/dist/lunamediaBidAdapter.js @@ -0,0 +1,494 @@ +pbjsChunk([180],{ + +/***/ 507: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(508); + + +/***/ }), + +/***/ 508: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_ENDPOINT", function() { return VIDEO_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BANNER_ENDPOINT", function() { return BANNER_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OUTSTREAM_SRC", function() { return OUTSTREAM_SRC; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_TARGETING", function() { return VIDEO_TARGETING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_MIMES", function() { return DEFAULT_MIMES; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + +var ADAPTER_VERSION = '1.0'; +var BIDDER_CODE = 'lunamedia'; +var VIDEO_ENDPOINT = 'https://nep.advangelists.com/xp/get?pubid='; // https://api.lunamedia.io/xp/get?pubid=0cf8d6d643e13d86a5b6374148a4afac'; + +var BANNER_ENDPOINT = 'https://nep.advangelists.com/xp/get?pubid='; // 0cf8d6d643e13d86a5b6374148a4afac'; + +var OUTSTREAM_SRC = 'https://player-cdn.beachfrontmedia.com/playerapi/loader/outstream.js'; +var VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'skip']; +var DEFAULT_MIMES = ['video/mp4', 'application/javascript']; +var pubid = ''; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bidRequest) { + if (typeof bidRequest != 'undefined') { + if (bidRequest.bidder !== BIDDER_CODE && typeof bidRequest.params === 'undefined') { + return false; + } + + if (bidRequest === '' || bidRequest.params.placement === '' || bidRequest.params.pubid === '') { + return false; + } + + return true; + } else { + return false; + } + }, + buildRequests: function buildRequests(bids, bidderRequest) { + var requests = []; + var videoBids = bids.filter(function (bid) { + return isVideoBidValid(bid); + }); + var bannerBids = bids.filter(function (bid) { + return isBannerBidValid(bid); + }); + videoBids.forEach(function (bid) { + pubid = getVideoBidParam(bid, 'pubid'); + requests.push({ + method: 'POST', + url: VIDEO_ENDPOINT + pubid, + data: createVideoRequestData(bid, bidderRequest), + bidRequest: bid + }); + }); + bannerBids.forEach(function (bid) { + pubid = getBannerBidParam(bid, 'pubid'); + requests.push({ + method: 'POST', + url: BANNER_ENDPOINT + pubid, + data: createBannerRequestData(bid, bidderRequest), + bidRequest: bid + }); + }); + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, _ref) { + var bidRequest = _ref.bidRequest; + var response = serverResponse.body; + + if (response !== null && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](response) == false) { + if (isVideoBid(bidRequest)) { + var bidResponse = { + 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, + ttl: response.seatbid[0].bid[0].ttl || 60, + creativeId: response.seatbid[0].bid[0].crid, + currency: response.cur, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], + netRevenue: true + }; + + if (response.seatbid[0].bid[0].adm) { + bidResponse.vastXml = response.seatbid[0].bid[0].adm; + bidResponse.adResponse = { + content: response.seatbid[0].bid[0].adm + }; + } else { + bidResponse.vastUrl = response.seatbid[0].bid[0].nurl; + } + + return bidResponse; + } else { + 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, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], + netRevenue: true + }; + } + } + } +}; + +function isBannerBid(bid) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner') || !isVideoBid(bid); +} + +function isVideoBid(bid) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} + +function isVideoBidValid(bid) { + return isVideoBid(bid) && getVideoBidParam(bid, 'pubid') && getVideoBidParam(bid, 'placement'); +} + +function isBannerBidValid(bid) { + return isBannerBid(bid) && getBannerBidParam(bid, 'pubid') && getBannerBidParam(bid, 'placement'); +} + +function getVideoBidParam(bid, key) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.' + key) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.' + key); +} + +function getBannerBidParam(bid, key) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.banner.' + key) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.' + key); +} + +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 findAndFillParam(o, key, value) { + try { + if (typeof value === 'function') { + o[key] = value(); + } else { + o[key] = value; + } + } catch (ex) {} +} + +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 = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(clientStrings, function (cs) { + return cs.r.test(navigator.userAgent); + }); + return cs ? cs.s : 'unknown'; +} + +function getFirstSize(sizes) { + return sizes && sizes.length ? sizes[0] : { + w: undefined, + h: undefined + }; +} + +function parseSizes(sizes) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](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 getVideoSizes(bid) { + return parseSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize') || bid.sizes); +} + +function getBannerSizes(bid) { + return parseSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') || bid.sizes); +} + +function getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return ''; + } +} + +function getVideoTargetingParams(bid) { + return Object.keys(Object(bid.params.video)).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).reduce(function (obj, param) { + obj[param] = bid.params.video[param]; + return obj; + }, {}); +} + +function createVideoRequestData(bid, bidderRequest) { + var topLocation = getTopWindowLocation(bidderRequest); + var topReferrer = getTopWindowReferrer(); // if size is explicitly given via adapter params + + var paramSize = getVideoBidParam(bid, 'size'); + var sizes = []; + + if (typeof paramSize !== 'undefined' && paramSize != '') { + sizes = parseSizes(paramSize); + } else { + sizes = getVideoSizes(bid); + } + + var firstSize = getFirstSize(sizes); + var video = getVideoTargetingParams(bid); + var o = { + 'device': { + 'langauge': global.navigator.language.split('-')[0], + 'dnt': global.navigator.doNotTrack === 1 ? 1 : 0, + 'devicetype': isMobile() ? 4 : isConnectedTV() ? 3 : 2, + 'js': 1, + 'os': getOsVersion() + }, + 'at': 2, + 'site': {}, + 'tmax': 3000, + 'cur': ['USD'], + 'id': bid.bidId, + 'imp': [], + 'regs': { + 'ext': {} + }, + 'user': { + 'ext': {} + } + }; + o.site['page'] = topLocation.href; + o.site['domain'] = topLocation.hostname; + o.site['search'] = topLocation.search; + o.site['domain'] = topLocation.hostname; + o.site['ref'] = topReferrer; + o.site['mobile'] = isMobile() ? 1 : 0; + var secure = topLocation.protocol.indexOf('https') === 0 ? 1 : 0; + o.device['dnt'] = getDoNotTrack() ? 1 : 0; + findAndFillParam(o.site, 'name', function () { + return global.top.document.title; + }); + findAndFillParam(o.device, 'h', function () { + return global.screen.height; + }); + findAndFillParam(o.device, 'w', function () { + return global.screen.width; + }); + var placement = getVideoBidParam(bid, 'placement'); + var floor = getVideoBidParam(bid, 'floor'); + + if (floor == null) { + floor = 0.5; + } + + for (var j = 0; j < sizes.length; j++) { + o.imp.push({ + 'id': '' + j, + 'displaymanager': '' + BIDDER_CODE, + 'displaymanagerver': '' + ADAPTER_VERSION, + 'tagId': placement, + 'bidfloor': floor, + 'bidfloorcur': 'USD', + 'secure': secure, + 'video': _extends({ + 'id': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"](), + 'pos': 0, + 'w': firstSize.w, + 'h': firstSize.h, + 'mimes': DEFAULT_MIMES + }, video) + }); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + var _bidderRequest$gdprCo = bidderRequest.gdprConsent, + gdprApplies = _bidderRequest$gdprCo.gdprApplies, + consentString = _bidderRequest$gdprCo.consentString; + o.regs.ext = { + 'gdpr': gdprApplies ? 1 : 0 + }; + o.user.ext = { + 'consent': consentString + }; + } + + return o; +} + +function getTopWindowLocation(bidderRequest) { + var url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('pageUrl') || url, { + decodeSearchAsString: true + }); +} + +function createBannerRequestData(bid, bidderRequest) { + var topLocation = getTopWindowLocation(bidderRequest); + var topReferrer = getTopWindowReferrer(); // if size is explicitly given via adapter params + + var paramSize = getBannerBidParam(bid, 'size'); + var sizes = []; + + if (typeof paramSize !== 'undefined' && paramSize != '') { + sizes = parseSizes(paramSize); + } else { + sizes = getBannerSizes(bid); + } + + var o = { + 'device': { + 'langauge': global.navigator.language.split('-')[0], + 'dnt': global.navigator.doNotTrack === 1 ? 1 : 0, + 'devicetype': isMobile() ? 4 : isConnectedTV() ? 3 : 2, + 'js': 1 + }, + 'at': 2, + 'site': {}, + 'tmax': 3000, + 'cur': ['USD'], + 'id': bid.bidId, + 'imp': [], + 'regs': { + 'ext': {} + }, + 'user': { + 'ext': {} + } + }; + o.site['page'] = topLocation.href; + o.site['domain'] = topLocation.hostname; + o.site['search'] = topLocation.search; + o.site['domain'] = topLocation.hostname; + o.site['ref'] = topReferrer; + o.site['mobile'] = isMobile() ? 1 : 0; + var secure = topLocation.protocol.indexOf('https') === 0 ? 1 : 0; + o.device['dnt'] = getDoNotTrack() ? 1 : 0; + findAndFillParam(o.site, 'name', function () { + return global.top.document.title; + }); + findAndFillParam(o.device, 'h', function () { + return global.screen.height; + }); + findAndFillParam(o.device, 'w', function () { + return global.screen.width; + }); + var placement = getBannerBidParam(bid, 'placement'); + + for (var j = 0; j < sizes.length; j++) { + var size = sizes[j]; + var floor = getBannerBidParam(bid, 'floor'); + + if (floor == null) { + floor = 0.1; + } + + o.imp.push({ + 'id': '' + j, + 'displaymanager': '' + BIDDER_CODE, + 'displaymanagerver': '' + ADAPTER_VERSION, + 'tagId': placement, + 'bidfloor': floor, + 'bidfloorcur': 'USD', + 'secure': secure, + 'banner': { + 'id': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"](), + 'pos': 0, + 'w': size['w'], + 'h': size['h'] + } + }); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + var _bidderRequest$gdprCo2 = bidderRequest.gdprConsent, + gdprApplies = _bidderRequest$gdprCo2.gdprApplies, + consentString = _bidderRequest$gdprCo2.consentString; + o.regs.ext = { + 'gdpr': gdprApplies ? 1 : 0 + }; + o.user.ext = { + 'consent': consentString + }; + } + + return o; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(33))) + +/***/ }) + +},[507]); \ No newline at end of file diff --git a/build/dist/luponmediaBidAdapter.js b/build/dist/luponmediaBidAdapter.js new file mode 100644 index 00000000000..300c473336b --- /dev/null +++ b/build/dist/luponmediaBidAdapter.js @@ -0,0 +1,434 @@ +pbjsChunk([179],{ + +/***/ 509: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(510); + + +/***/ }), + +/***/ 510: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["hasValidSupplyChainParams"] = hasValidSupplyChainParams; +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var BIDDER_CODE = 'luponmedia'; +var ENDPOINT_URL = 'https://rtb.adxpremium.services/openrtb2/auction'; +var DIGITRUST_PROP_NAMES = { + PREBID_SERVER: { + id: 'id', + keyv: 'keyv' + } +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params && bid.params.siteId && bid.params.keyId); // TODO: check for siteId and keyId + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var bRequest = { + method: 'POST', + url: ENDPOINT_URL, + data: null, + options: {}, + bidderRequest: bidderRequest + }; + var currentImps = []; + + for (var i = 0, len = bidRequests.length; i < len; i++) { + var newReq = newOrtbBidRequest(bidRequests[i], bidderRequest, currentImps); + currentImps = newReq.imp; + bRequest.data = JSON.stringify(newReq); + } + + return bRequest; + }, + interpretResponse: function interpretResponse(response, request) { + var bidResponses = []; + var respCur = 'USD'; + var parsedRequest = JSON.parse(request.data); + var parsedReferrer = parsedRequest.site && parsedRequest.site.ref ? parsedRequest.site.ref : ''; + + try { + if (response.body && response.body.seatbid && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](response.body.seatbid)) { + // Supporting multiple bid responses for same adSize + respCur = response.body.cur || respCur; + response.body.seatbid.forEach(function (seatbidder) { + seatbidder.bid && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](seatbidder.bid) && seatbidder.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: respCur, + netRevenue: false, + ttl: 300, + referrer: parsedReferrer, + ad: bid.adm + }; + bidResponses.push(newBid); + }); + }); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + var allUserSyncs = []; + + if (!hasSynced && (syncOptions.iframeEnabled || syncOptions.pixelEnabled)) { + responses.forEach(function (csResp) { + if (csResp.body && csResp.body.ext && csResp.body.ext.usersyncs) { + try { + var response = csResp.body.ext.usersyncs; + var bidders = response.bidder_status; + + for (var synci in bidders) { + var thisSync = bidders[synci]; + + if (thisSync.no_cookie) { + var url = thisSync.usersync.url; + var type = thisSync.usersync.type; + + if (!url) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("No sync url for bidder luponmedia."); + } else if ((type === 'image' || type === 'redirect') && syncOptions.pixelEnabled) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]("Invoking image pixel user sync for luponmedia"); + allUserSyncs.push({ + type: 'image', + url: url + }); + } else if (type == 'iframe' && syncOptions.iframeEnabled) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]("Invoking iframe user sync for luponmedia"); + allUserSyncs.push({ + type: 'iframe', + url: url + }); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("User sync type \"".concat(type, "\" not supported for luponmedia")); + } + } + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e); + } + } + }); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Luponmedia: Please enable iframe/pixel based user sync.'); + } + + hasSynced = true; + return allUserSyncs; + } +}; + +function newOrtbBidRequest(bidRequest, bidderRequest, currentImps) { + bidRequest.startTime = new Date().getTime(); + var bannerParams = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner'); + var bannerSizes = []; + + if (bannerParams && bannerParams.sizes) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bannerParams.sizes); // get banner sizes in form [{ w: , h: }, ...] + + 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 + }; + }); + bannerSizes = format; + } + + var data = { + id: bidRequest.transactionId, + test: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('debug') ? 1 : 0, + source: { + tid: bidRequest.transactionId + }, + tmax: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('timeout') || 1500, + imp: currentImps.concat([{ + id: bidRequest.bidId, + secure: 1, + ext: _defineProperty({}, bidRequest.bidder, bidRequest.params), + banner: { + format: bannerSizes + } + }]), + ext: { + prebid: { + targeting: { + includewinners: true, + // includebidderkeys always false for openrtb + includebidderkeys: false + } + } + }, + user: {} + }; + var bidFloor = parseFloat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.floor')); + + if (!isNaN(bidFloor)) { + data.imp[0].bidfloor = bidFloor; + } + + appendSiteAppDevice(data, bidRequest, bidderRequest); + + var digiTrust = _getDigiTrustQueryParams(bidRequest, 'PREBID_SERVER'); + + if (digiTrust) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.digitrust', digiTrust); + } + + if (bidderRequest.gdprConsent) { + // note - gdprApplies & consentString may be undefined in certain use-cases for consentManagement module + var gdprApplies; + + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + gdprApplies = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.ext.gdpr', gdprApplies); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } // Set user uuid + + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.id', __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"]()); // set crumbs + + if (bidRequest.crumbs && bidRequest.crumbs.pubcid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.buyeruid', bidRequest.crumbs.pubcid); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.buyeruid', __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"]()); + } + + if (bidRequest.userId && _typeof(bidRequest.userId) === 'object' && (bidRequest.userId.tdid || bidRequest.userId.pubcid || bidRequest.userId.lipb || bidRequest.userId.idl_env)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.eids', []); + + if (bidRequest.userId.tdid) { + data.user.ext.eids.push({ + source: 'adserver.org', + uids: [{ + id: bidRequest.userId.tdid, + ext: { + rtiPartner: 'TDID' + } + }] + }); + } + + if (bidRequest.userId.pubcid) { + data.user.ext.eids.push({ + source: 'pubcommon', + uids: [{ + id: bidRequest.userId.pubcid + }] + }); + } // support liveintent ID + + + if (bidRequest.userId.lipb && bidRequest.userId.lipb.lipbid) { + data.user.ext.eids.push({ + source: 'liveintent.com', + uids: [{ + id: bidRequest.userId.lipb.lipbid + }] + }); + data.user.ext.tpid = { + source: 'liveintent.com', + uid: bidRequest.userId.lipb.lipbid + }; + + if (Array.isArray(bidRequest.userId.lipb.segments) && bidRequest.userId.lipb.segments.length) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'rp.target.LIseg', bidRequest.userId.lipb.segments); + } + } // support identityLink (aka LiveRamp) + + + if (bidRequest.userId.idl_env) { + data.user.ext.eids.push({ + source: 'liveramp.com', + uids: [{ + id: bidRequest.userId.idl_env + }] + }); + } + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.coppa', 1); + } + + if (bidRequest.schain && hasValidSupplyChainParams(bidRequest.schain)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'source.ext.schain', bidRequest.schain); + } + + var siteData = _extends({}, bidRequest.params.inventory, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context')); + + var userData = _extends({}, bidRequest.params.visitor, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user')); + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](siteData) || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userData)) { + var bidderData = { + bidders: [bidderRequest.bidderCode], + config: { + fpd: {} + } + }; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](siteData)) { + bidderData.config.fpd.site = siteData; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userData)) { + bidderData.config.fpd.user = userData; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'ext.prebid.bidderconfig.0', bidderData); + } + + var pbAdSlot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.pbAdSlot'); + + if (typeof pbAdSlot === 'string' && pbAdSlot) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0].ext, 'context.data.adslot', pbAdSlot); + } + + return data; +} + +function hasValidSupplyChainParams(schain) { + var isValid = false; + var requiredFields = ['asi', 'sid', 'hp']; + if (!schain.nodes) return isValid; + isValid = schain.nodes.reduce(function (status, node) { + if (!status) return status; + return requiredFields.every(function (field) { + return node[field]; + }); + }, true); + if (!isValid) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('LuponMedia: required schain params missing'); + return isValid; +} + +function _getDigiTrustQueryParams() { + var _digiTrustQueryParams; + + var bidRequest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var endpointName = arguments.length > 1 ? arguments[1] : undefined; + + if (!endpointName || !DIGITRUST_PROP_NAMES[endpointName]) { + return null; + } + + var propNames = DIGITRUST_PROP_NAMES[endpointName]; + + function getDigiTrustId() { + var bidRequestDigitrust = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'userId.digitrustid.data'); + + if (bidRequestDigitrust) { + return bidRequestDigitrust; + } + + var digiTrustUser = window.DigiTrust && (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* 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; + } + + var digiTrustQueryParams = (_digiTrustQueryParams = {}, _defineProperty(_digiTrustQueryParams, propNames.id, digiTrustId.id), _defineProperty(_digiTrustQueryParams, propNames.keyv, digiTrustId.keyv), _digiTrustQueryParams); + + if (propNames.pref) { + digiTrustQueryParams[propNames.pref] = 0; + } + + return digiTrustQueryParams; +} + +function _getPageUrl(bidRequest, bidderRequest) { + var pageUrl = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl'); + + if (bidRequest.params.referrer) { + pageUrl = bidRequest.params.referrer; + } else if (!pageUrl) { + pageUrl = bidderRequest.refererInfo.referer; + } + + return bidRequest.params.secure ? pageUrl.replace(/^http:/i, 'https:') : pageUrl; +} + +function appendSiteAppDevice(data, bidRequest, bidderRequest) { + if (!data) return; // ORTB specifies app OR site + + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + data.app = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app'); + } else { + data.site = { + page: _getPageUrl(bidRequest, bidderRequest) + }; + } + + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device')) === 'object') { + data.device = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device'); + } +} + +var hasSynced = false; +function resetUserSync() { + hasSynced = false; +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[509]); \ No newline at end of file diff --git a/build/dist/madvertiseBidAdapter.js b/build/dist/madvertiseBidAdapter.js new file mode 100644 index 00000000000..fe340e69c86 --- /dev/null +++ b/build/dist/madvertiseBidAdapter.js @@ -0,0 +1,128 @@ +pbjsChunk([178],{ + +/***/ 511: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(512); + + +/***/ }), + +/***/ 512: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + // use protocol relative urls for http or https + +var MADVERTISE_ENDPOINT = 'https://mobile.mng-ads.com/'; +var spec = { + code: 'madvertise', + + /** + * @param {object} bid + * @return boolean + */ + isBidRequestValid: function isBidRequestValid(bid) { + if (_typeof(bid.params) !== 'object') { + return false; + } + + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes); + + if (!sizes || sizes.length === 0) { + return false; + } + + if (sizes.length > 0 && sizes[0] === undefined) { + return false; + } + + if (typeof bid.params.floor == 'undefined' || parseFloat(bid.params.floor) < 0.01) { + bid.params.floor = 0.01; + } + + return typeof bid.params.s != 'undefined'; + }, + + /** + * @param {BidRequest[]} bidRequests + * @param bidderRequest + * @return ServerRequest[] + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + return bidRequests.map(function (bidRequest) { + bidRequest.startTime = new Date().getTime(); // non-video request builder + + var src = '?rt=bid_request&v=1.0'; + + for (var i = 0; i < bidRequest.sizes.length; i++) { + if (Array.isArray(bidRequest.sizes[i]) && bidRequest.sizes[i].length == 2) { + src = src + '&sizes[' + i + ']=' + bidRequest.sizes[i][0] + 'x' + bidRequest.sizes[i][1]; + } + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidRequest.params, function (item, key) { + return src = src + '&' + key + '=' + item; + }); + + if (typeof bidRequest.params.u == 'undefined') { + src = src + '&u=' + navigator.userAgent; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + src = src + '&gdpr=' + (bidderRequest.gdprConsent.gdprApplies ? '1' : '0') + '&consent[0][format]=' + __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('consentManagement.cmpApi') + '&consent[0][value]=' + bidderRequest.gdprConsent.consentString; + } + + return { + method: 'GET', + url: MADVERTISE_ENDPOINT + src, + options: { + withCredentials: false + }, + bidId: bidRequest.bidId + }; + }); + }, + + /** + * @param {*} responseObj + * @param {BidRequest} bidRequest + * @return {Bid[]} An array of bids which + */ + interpretResponse: function interpretResponse(responseObj, bidRequest) { + responseObj = responseObj.body; // check overall response + + if (responseObj == null || _typeof(responseObj) !== 'object' || !responseObj.hasOwnProperty('ad')) { + return []; + } + + var bid = { + requestId: bidRequest.bidId, + cpm: responseObj.cpm, + width: responseObj.Width, + height: responseObj.height, + ad: responseObj.ad, + ttl: responseObj.ttl, + creativeId: responseObj.creativeId, + netRevenue: responseObj.netRevenue, + currency: responseObj.currency, + dealId: responseObj.dealId + }; + return [bid]; + }, + getUserSyncs: function getUserSyncs(syncOptions) {} +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[511]); \ No newline at end of file diff --git a/build/dist/mantisBidAdapter.js b/build/dist/mantisBidAdapter.js new file mode 100644 index 00000000000..d7977bad81a --- /dev/null +++ b/build/dist/mantisBidAdapter.js @@ -0,0 +1,375 @@ +pbjsChunk([177],{ + +/***/ 513: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(514); + + +/***/ }), + +/***/ 514: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["onVisible"] = onVisible; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["sfPostMessage"] = sfPostMessage; +/* harmony export (immutable) */ __webpack_exports__["iframePostMessage"] = iframePostMessage; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_1__src_storageManager_js__["b" /* getStorageManager */])(); + +function inIframe() { + try { + return window.self !== window.top && !window.mantis_link; + } catch (e) { + return true; + } +} + +function pixel(url, parent) { + var img = document.createElement('img'); + img.src = url; + img.style.cssText = 'display:none !important;'; + (parent || document.body).appendChild(img); +} + +function onVisible(win, element, doOnVisible, time, pct) { + var started = null; + var notified = false; + var onNotVisible = null; + + var whenNotVisible = function whenNotVisible() { + if (notified && onNotVisible) { + onNotVisible(); + } + + notified = false; + }; + + var interval; + var listener; + + var doCheck = function doCheck(winWidth, winHeight, rect) { + var hidden = typeof document.hidden !== 'undefined' && document.hidden; + + if (rect.width == 0 || rect.height == 0 || hidden) { + return whenNotVisible(); + } + + var minHeight = rect.height * pct; + var minWidth = rect.width * pct; + var inView = (rect.top < 0 && rect.bottom >= minHeight || rect.top > 0 && winHeight - rect.top >= minHeight) && (rect.left < 0 && rect.right >= minWidth || rect.left > 0 && winWidth - rect.left >= minWidth); + + if (!inView) { + return whenNotVisible(); + } + + if (!started && time) { + started = Date.now(); + return whenNotVisible(); + } + + if (time && Date.now() - started < time) { + return whenNotVisible(); + } + + if (notified) { + return; + } + + doOnVisible(function (ack) { + if (ack) { + notified = true; + } else { + interval && clearInterval(interval); + listener && listener(); + } + }, function (onHidden) { + onNotVisible = onHidden; + }); + }; + + if (isAmp()) { + listener = win.context.observeIntersection(function (changes) { + changes.forEach(function (change) { + doCheck(change.rootBounds.width, change.rootBounds.height, change.boundingClientRect); + }); + }); + } + + interval = setInterval(function () { + var winHeight = win.innerHeight || document.documentElement.clientHeight; + var winWidth = win.innerWidth || document.documentElement.clientWidth; + doCheck(winWidth, winHeight, element.getBoundingClientRect()); + }, 100); +} + +function storeUuid(uuid) { + if (window.mantis_uuid) { + return false; + } + + window.mantis_uuid = uuid; + + if (storage.hasLocalStorage()) { + try { + storage.setDataInLocalStorage('mantis:uuid', uuid); + } catch (ex) {} + } +} + +function onMessage(type, callback) { + window.addEventListener('message', function (event) { + if (event.data.mantis && event.data.type == type) { + callback(event.data.data); + } + }, false); +} + +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) { + 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 (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(), + version: 9 + }; + + if (window.mantis_uuid) { + params.uuid = window.mantis_uuid; + } else if (storage.hasLocalStorage()) { + var localUuid = storage.getDataFromLocalStorage('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'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.property && (bid.params.code || bid.params.zoneId || bid.params.zone)); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var property = null; + validBidRequests.some(function (bid) { + if (bid.params.property) { + property = bid.params.property; + return true; + } + }); + var query = { + measurable: true, + usp: bidderRequest && bidderRequest.uspConsent, + 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 + }; + + if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) { + // we purposefully do not track data for users in the EU + query.consent = false; + } + + return { + method: 'GET', + url: buildMantisUrl('/prebid/display', query) + '&foo', + data: '' + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + storeUuid(serverResponse.body.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: ad.ttl || serverResponse.body.ttl || 86400, + creativeId: ad.view, + netRevenue: true, + currency: 'USD' + }; + }); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: buildMantisUrl('/prebid/iframe', { + gdpr: gdprConsent, + uspConsent: uspConsent + }) + }]; + } + + if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: buildMantisUrl('/prebid/pixel', { + gdpr: gdprConsent, + uspConsent: uspConsent + }) + }]; + } + } +}; +function sfPostMessage($sf, width, height, callback) { + var viewed = false; // eslint-disable-next-line no-undef + + $sf.ext.register(width, height, function () { + // eslint-disable-next-line no-undef + if ($sf.ext.inViewPercentage() < 50 || viewed) { + return; + } + + viewed = true; + callback(); + }); +} +; +function iframePostMessage(win, name, callback) { + var frames = document.getElementsByTagName('iframe'); + + for (var i = 0; i < frames.length; i++) { + var frame = frames[i]; + + if (frame.name == name) { + onVisible(win, frame, function (stop) { + callback(); + stop(); + }, 1000, 0.50); + } + } +} +onMessage('iframe', function (data) { + if (window.$sf) { + sfPostMessage(window.$sf, data.width, data.height, function () { + return pixel(data.pixel); + }); + } else { + iframePostMessage(window, data.frame, function () { + return pixel(data.pixel); + }); + } +}); +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[513]); \ No newline at end of file diff --git a/build/dist/marsmediaAnalyticsAdapter.js b/build/dist/marsmediaAnalyticsAdapter.js new file mode 100644 index 00000000000..adcc54faa87 --- /dev/null +++ b/build/dist/marsmediaAnalyticsAdapter.js @@ -0,0 +1,333 @@ +pbjsChunk([28],{ + +/***/ 515: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(516); + + +/***/ }), + +/***/ 516: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + +/**** + * Mars Media Analytics + * Contact: prebid@m-m-g.com‏ + * Developer: Chen Saadia + */ + +var MARS_BIDDER_CODE = 'marsmedia'; +var analyticsType = 'endpoint'; +var MARS_VERSION = '1.0.1'; +var MARS_ANALYTICS_URL = 'https://prebid_stats.mars.media/prebidjs/api/analytics.php'; +var events = {}; + +var marsmediaAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* 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 () { + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* 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); + } + } +}); + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: marsmediaAnalyticsAdapter, + code: 'marsmedia' +}); +/* harmony default export */ __webpack_exports__["default"] = (marsmediaAnalyticsAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[515]); \ No newline at end of file diff --git a/build/dist/marsmediaBidAdapter.js b/build/dist/marsmediaBidAdapter.js new file mode 100644 index 00000000000..8564d9db747 --- /dev/null +++ b/build/dist/marsmediaBidAdapter.js @@ -0,0 +1,347 @@ +pbjsChunk([176],{ + +/***/ 517: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(518); + + +/***/ }), + +/***/ 518: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + + + + +function MarsmediaAdapter() { + this.code = 'marsmedia'; + this.aliases = ['mars']; + this.supportedMediaTypes = [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]]; + var SUPPORTED_VIDEO_PROTOCOLS = [2, 3, 5, 6]; + var SUPPORTED_VIDEO_MIMES = ['video/mp4']; + var SUPPORTED_VIDEO_PLAYBACK_METHODS = [1, 2, 3, 4]; + var SUPPORTED_VIDEO_DELIVERY = [1]; + var SUPPORTED_VIDEO_API = [1, 2, 5]; + var slotsToBids = {}; + var that = this; + var version = '2.3'; + + this.isBidRequestValid = function (bid) { + return !!(bid.params && bid.params.zoneId); + }; + + this.getUserSyncs = function (syncOptions, responses, gdprConsent) { + return []; + }; + + function frameImp(BRs, bidderRequest) { + var impList = []; + var isSecure = 0; + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.stack.length) { + // clever trick to get the protocol + var el = document.createElement('a'); + el.href = bidderRequest.refererInfo.stack[0]; + isSecure = el.protocol == 'https:' ? 1 : 0; + } + + for (var i = 0; i < BRs.length; i++) { + slotsToBids[BRs[i].adUnitCode] = BRs[i]; + var impObj = {}; + impObj.id = BRs[i].adUnitCode; + impObj.secure = isSecure; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaTypes.banner') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaType') === 'banner') { + var banner = frameBanner(BRs[i]); + + if (banner) { + impObj.banner = banner; + } + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaTypes.video') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaType') === 'video') { + impObj.video = frameVideo(BRs[i]); + } + + if (!(impObj.banner || impObj.video)) { + continue; + } + + impObj.ext = frameExt(BRs[i]); + impList.push(impObj); + } + + return impList; + } + + function frameSite(bidderRequest) { + var site = { + domain: '', + page: '', + ref: '' + }; + + if (bidderRequest && bidderRequest.refererInfo) { + var ri = bidderRequest.refererInfo; + site.ref = ri.referer; + + if (ri.stack.length) { + site.page = ri.stack[ri.stack.length - 1]; // clever trick to get the domain + + var el = document.createElement('a'); + el.href = ri.stack[0]; + site.domain = el.hostname; + } + } + + return site; + } + + function frameDevice() { + return { + ua: navigator.userAgent, + ip: '', + // Empty Ip string is required, server gets the ip from HTTP header + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0 + }; + } + + function getValidSizeSet(dimensionList) { + var w = parseInt(dimensionList[0]); + var h = parseInt(dimensionList[1]); // clever check for NaN + + if (!(w !== w || h !== h)) { + // eslint-disable-line + return [w, h]; + } + + return false; + } + + function frameBanner(adUnit) { + // adUnit.sizes is scheduled to be deprecated, continue its support but prefer adUnit.mediaTypes.banner + var sizeList = adUnit.sizes; + + if (adUnit.mediaTypes && adUnit.mediaTypes.banner) { + sizeList = adUnit.mediaTypes.banner.sizes; + } + + var sizeStringList = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](sizeList); + var format = []; + sizeStringList.forEach(function (size) { + if (size) { + var dimensionList = getValidSizeSet(size.split('x')); + + if (dimensionList) { + format.push({ + 'w': dimensionList[0], + 'h': dimensionList[1] + }); + } + } + }); + + if (format.length) { + return { + 'format': format + }; + } + + return false; + } + + function frameVideo(bid) { + var size = []; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize')) { + var dimensionSet = bid.mediaTypes.video.playerSize; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.mediaTypes.video.playerSize[0])) { + dimensionSet = bid.mediaTypes.video.playerSize[0]; + } + + var validSize = getValidSizeSet(dimensionSet); + + if (validSize) { + size = validSize; + } + } + + return { + mimes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.mimes') || SUPPORTED_VIDEO_MIMES, + protocols: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.protocols') || SUPPORTED_VIDEO_PROTOCOLS, + w: size[0], + h: size[1], + startdelay: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.startdelay') || 0, + skip: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.skip') || 0, + playbackmethod: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playbackmethod') || SUPPORTED_VIDEO_PLAYBACK_METHODS, + delivery: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.delivery') || SUPPORTED_VIDEO_DELIVERY, + api: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.api') || SUPPORTED_VIDEO_API + }; + } + + function frameExt(bid) { + return { + bidder: { + zoneId: bid.params['zoneId'] + } + }; + } + + function frameBid(BRs, bidderRequest) { + var bid = { + id: BRs[0].bidderRequestId, + imp: frameImp(BRs, bidderRequest), + site: frameSite(bidderRequest), + device: frameDevice(), + user: { + ext: { + consent: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? bidderRequest.gdprConsent.consentString : '' + } + }, + at: 1, + tmax: 650, + regs: { + ext: { + gdpr: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? Boolean(bidderRequest.gdprConsent.gdprApplies & 1) : false + } + } + }; + + if (BRs[0].schain) { + bid.source = { + 'ext': { + 'schain': BRs[0].schain + } + }; + } + + return bid; + } + + 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]; + } + } + } + + this.buildRequests = function (BRs, bidderRequest) { + var fallbackZoneId = getFirstParam('zoneId', BRs); + + if (fallbackZoneId === undefined || BRs.length < 1) { + return []; + } + + var uri = 'https://hb.go2speed.media/bidder/?bid=3mhdom&zoneId=' + fallbackZoneId; + var fat = /(^v|(\.0)+$)/gi; + var prebidVersion = "4.2.0"; + uri += '&hbv=' + prebidVersion.replace(fat, '') + ',' + version.replace(fat, ''); + var bidRequest = frameBid(BRs, bidderRequest); + + if (!bidRequest.imp.length) { + return {}; + } + + return { + method: 'POST', + url: uri, + data: JSON.stringify(bidRequest) + }; + }; + + this.onBidWon = function (bid) { + if (typeof bid.nurl !== 'undefined') { + var cpm = bid.pbMg; + bid.nurl = bid.nurl.replace(/\$\{AUCTION_PRICE\}/, cpm); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](bid.nurl, null); + } + + ; + sendbeacon(bid, 17); + }; + + this.onTimeout = function (bid) { + sendbeacon(bid, 19); + }; + + this.onSetTargeting = function (bid) { + sendbeacon(bid, 20); + }; + + function sendbeacon(bid, type) { + var bidString = JSON.stringify(bid); + var encodedBuf = window.btoa(bidString); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"]('https://ping-hqx-1.go2speed.media/notification/rtb/beacon/?bt=' + type + '&bid=3mhdom&hb_j=' + encodedBuf, null); + } + + 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: 350, + nurl: bid.nurl + }; + + if (bidRequest.mediaTypes && bidRequest.mediaTypes.video) { + if (bid.adm.charAt(0) === '<') { + bidResponse.vastXml = bid.adm; + } else { + bidResponse.vastUrl = bid.adm; + } + + bidResponse.mediaType = 'video'; + bidResponse.ttl = 600; + } else { + bidResponse.ad = bid.adm; + } + + bids.push(bidResponse); + } + + return bids; + }; +} + +var spec = new MarsmediaAdapter(); +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[517]); \ No newline at end of file diff --git a/build/dist/meazyBidAdapter.js b/build/dist/meazyBidAdapter.js new file mode 100644 index 00000000000..6b6e80ace28 --- /dev/null +++ b/build/dist/meazyBidAdapter.js @@ -0,0 +1,170 @@ +pbjsChunk([175],{ + +/***/ 519: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(520); + + +/***/ }), + +/***/ 520: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'meazy'; +var PREBID_ENDPOINT = 'rtb-filter.meazy.co'; +var SYNC_ENDPOINT = 'https://sync.meazy.co/sync/iframe'; +var ENDPOINT_CONFIG = { + defaultCurrency: ['USD'], + availableSize: ['300x250', '320x480', '160x600'] +}; + +var buildURI = function buildURI(pid) { + return "https://".concat(PREBID_ENDPOINT, "/pbjs?host=").concat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getOrigin"](), "&api_key=").concat(pid); +}; + +var validateSize = function validateSize(size) { + return ENDPOINT_CONFIG.availableSize.indexOf(size.join('x')) !== -1; +}; + +var buildImpression = function buildImpression(bidRequest) { + var impression = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + tagid: bidRequest.adUnitCode, + banner: { + format: bidRequest.sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }) + } + }; + return impression; +}; + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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.pid && bid.sizes.some(validateSize); + }, + + /** + * 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 payload = { + id: bidRequests[0].bidId, + site: { + domain: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getOrigin"]() + }, + device: { + w: window.screen.width, + h: window.screen.height, + language: navigator.language + }, + cur: ENDPOINT_CONFIG.defaultCurrency, + imp: bidRequests.map(buildImpression), + user: {} + }; + + if (bidderRequest.refererInfo) { + if (bidderRequest.refererInfo.referer) { + payload.site.ref = bidderRequest.refererInfo.referer; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidderRequest.refererInfo) && bidderRequest.refererInfo.stack.length > 0) { + payload.site.page = bidderRequest.refererInfo.stack[0]; + } + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies')) { + payload.user.ext = { + consent: bidderRequest.gdprConsent.consentString, + gdpr: bidderRequest.gdprConsent.gdprApplies & 1 + }; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: buildURI(bidRequests[0].params.pid), + 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) { + var bids = []; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverResponse.body.seatbid) || !serverResponse.body.seatbid[0]) { + return bids; + } + + serverResponse.body.seatbid[0].bid.forEach(function (bidResponse) { + var bid = { + requestId: serverResponse.body.id, + cpm: bidResponse.price, + width: bidResponse.w, + height: bidResponse.h, + creativeId: bidResponse.crid, + netRevenue: bidResponse.netRevenue !== undefined ? bidResponse.netRevenue : true, + dealId: bidResponse.dealid, + currency: ENDPOINT_CONFIG.defaultCurrency[0], + ttl: bidResponse.exp || 900, + ad: bidResponse.adm + }; + bids.push(bid); + }); + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.pixelEnabled && serverResponses[0] && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverResponses[0], 'body.ext.syncUrl')) { + syncs.push({ + type: 'image', + url: serverResponses[0].body.ext.syncUrl + }); + } + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: SYNC_ENDPOINT + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[519]); \ No newline at end of file diff --git a/build/dist/mediaforceBidAdapter.js b/build/dist/mediaforceBidAdapter.js new file mode 100644 index 00000000000..7680a89d47a --- /dev/null +++ b/build/dist/mediaforceBidAdapter.js @@ -0,0 +1,401 @@ +pbjsChunk([174],{ + +/***/ 521: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(522); + + +/***/ }), + +/***/ 522: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var BIDDER_CODE = 'mediaforce'; +var ENDPOINT_URL = 'https://rtb.mfadsrvr.com/header_bid'; +var TEST_ENDPOINT_URL = 'https://rtb.mfadsrvr.com/header_bid?debug_key=abcdefghijklmnop'; +var NATIVE_ID_MAP = {}; +var NATIVE_PARAMS = { + title: { + id: 1, + name: 'title' + }, + icon: { + id: 2, + type: 1, + name: 'img' + }, + image: { + id: 3, + type: 3, + name: 'img' + }, + body: { + id: 4, + name: 'data', + type: 2 + }, + sponsoredBy: { + id: 5, + name: 'data', + type: 1 + }, + cta: { + id: 6, + type: 12, + name: 'data' + }, + body2: { + id: 7, + name: 'data', + type: 10 + }, + rating: { + id: 8, + name: 'data', + type: 3 + }, + likes: { + id: 9, + name: 'data', + type: 4 + }, + downloads: { + id: 10, + name: 'data', + type: 5 + }, + displayUrl: { + id: 11, + name: 'data', + type: 11 + }, + price: { + id: 12, + name: 'data', + type: 6 + }, + salePrice: { + id: 13, + name: 'data', + type: 7 + }, + address: { + id: 14, + name: 'data', + type: 9 + }, + phone: { + id: 15, + name: 'data', + type: 8 + } +}; +Object.keys(NATIVE_PARAMS).forEach(function (key) { + NATIVE_ID_MAP[NATIVE_PARAMS[key].id] = key; +}); +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* 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 !!(_typeof(bid.params) === 'object' && bid.params.placement_id && bid.params.publisher_id); + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - an array of bids + * @param {bidderRequest} bidderRequest bidder request object + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (validBidRequests.length === 0) { + return; + } + + var referer = bidderRequest && bidderRequest.refererInfo ? encodeURIComponent(bidderRequest.refererInfo.referer) : ''; + var dnt = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0; + var requests = []; + validBidRequests.forEach(function (bid) { + var tagid = bid.params.placement_id; + var bidfloor = bid.params.bidfloor ? parseFloat(bid.params.bidfloor) : 0; + var imp = []; + var validImp = false; + var impObj = { + id: bid.bidId, + tagid: tagid, + secure: 1, + bidfloor: bidfloor + }; + + for (var mediaTypes in bid.mediaTypes) { + switch (mediaTypes) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + impObj.banner = createBannerRequest(bid); + validImp = true; + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]: + impObj.native = createNativeRequest(bid); + validImp = true; + break; + + default: + return; + } + } + + validImp && imp.push(impObj); + var request = { + id: bid.transactionId, + site: { + page: referer, + ref: referer, + id: bid.params.publisher_id, + publisher: { + id: bid.params.publisher_id + } + }, + device: { + ua: navigator.userAgent, + js: 1, + dnt: dnt, + language: getLanguage() + }, + imp: imp + }; + requests.push({ + method: 'POST', + url: bid.params.is_test ? TEST_ENDPOINT_URL : ENDPOINT_URL, + data: JSON.stringify(request) + }); + }); + return requests; + }, + + /** + * 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, bidRequest) { + if (!serverResponse || !serverResponse.body) { + return []; + } + + var responseBody = serverResponse.body; + var bidResponses = []; + var cur = responseBody.cur; + responseBody.seatbid.forEach(function (bids) { + bids.bid.forEach(function (serverBid) { + var bid = { + requestId: serverBid.impid, + cpm: parseFloat(serverBid.price), + creativeId: serverBid.adid, + currency: cur, + netRevenue: true, + ttl: serverBid.ttl || 300, + burl: serverBid.burl + }; + + if (serverBid.dealid) { + bid.dealId = serverBid.dealid; + } + + var jsonAdm; + var adm = serverBid.adm; + var ext = serverBid.ext; + + try { + jsonAdm = JSON.parse(adm); + } catch (err) {} + + if (jsonAdm && jsonAdm.native) { + ext = ext || {}; + ext.native = jsonAdm.native; + adm = null; + } + + if (adm) { + bid.width = serverBid.w; + bid.height = serverBid.h; + bid.ad = adm; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } else if (ext && ext.native) { + bid.native = parseNative(ext.native); + bid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + } + + bidResponses.push(bid); + }); + }); + return bidResponses; + }, + + /** + * Register bidder specific code, which will execute if a bid from this bidder won the auction + * @param {Bid} The bid that won the auction + */ + onBidWon: function onBidWon(bid) { + var cpm = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'adserverTargeting.hb_pb') || ''; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.burl) && bid.burl !== '') { + bid.burl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"](bid.burl, cpm); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](bid.burl); + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function getLanguage() { + var language = navigator.language ? 'language' : 'userLanguage'; + return navigator[language].split('-')[0]; +} + +function createBannerRequest(bid) { + var sizes = bid.mediaTypes.banner.sizes; + if (!sizes.length) return; + var format = []; + var r = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseGPTSingleSizeArrayToRtbSize"](sizes[0]); + + for (var f = 1; f < sizes.length; f++) { + format.push(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseGPTSingleSizeArrayToRtbSize"](sizes[f])); + } + + if (format.length) { + r.format = format; + } + + return r; +} + +function parseNative(native) { + var assets = native.assets, + link = native.link, + imptrackers = native.imptrackers, + jstracker = native.jstracker; + var result = { + clickUrl: link.url, + clickTrackers: link.clicktrackers || [], + impressionTrackers: imptrackers || [], + javascriptTrackers: jstracker ? [jstracker] : [] + }; + (assets || []).forEach(function (asset) { + var id = asset.id, + img = asset.img, + data = asset.data, + title = asset.title; + var key = NATIVE_ID_MAP[id]; + + if (key) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](title)) { + result.title = title.text; + } else if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](img)) { + result[key] = { + url: img.url, + height: img.h, + width: img.w + }; + } else if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](data)) { + result[key] = data.value; + } + } + }); + return result; +} + +function createNativeRequest(bid) { + var assets = []; + + if (bid.nativeParams) { + Object.keys(bid.nativeParams).forEach(function (key) { + if (NATIVE_PARAMS[key]) { + var _NATIVE_PARAMS$key = NATIVE_PARAMS[key], + name = _NATIVE_PARAMS$key.name, + type = _NATIVE_PARAMS$key.type, + id = _NATIVE_PARAMS$key.id; + var assetObj = type ? { + type: type + } : {}; + var _bid$nativeParams$key = bid.nativeParams[key], + len = _bid$nativeParams$key.len, + sizes = _bid$nativeParams$key.sizes, + required = _bid$nativeParams$key.required, + aRatios = _bid$nativeParams$key.aspect_ratios; + + if (len) { + assetObj.len = len; + } + + if (aRatios && aRatios[0]) { + aRatios = aRatios[0]; + var wmin = aRatios.min_width || 0; + var hmin = aRatios.ratio_height * wmin / aRatios.ratio_width | 0; + assetObj.wmin = wmin; + assetObj.hmin = hmin; + } + + if (sizes && sizes.length) { + var _ref; + + sizes = (_ref = []).concat.apply(_ref, _toConsumableArray(sizes)); + assetObj.w = sizes[0]; + assetObj.h = sizes[1]; + } + + var asset = { + required: required ? 1 : 0, + id: id + }; + asset[name] = assetObj; + assets.push(asset); + } + }); + } + + return { + ver: '1.2', + request: { + assets: assets, + context: 1, + plcmttype: 1, + ver: '1.2' + } + }; +} + +/***/ }) + +},[521]); \ No newline at end of file diff --git a/build/dist/medianetAnalyticsAdapter.js b/build/dist/medianetAnalyticsAdapter.js new file mode 100644 index 00000000000..616b318433b --- /dev/null +++ b/build/dist/medianetAnalyticsAdapter.js @@ -0,0 +1,1286 @@ +pbjsChunk([27],{ + +/***/ 523: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(524); + + +/***/ }), + +/***/ 524: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_refererDetection_js__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_auction_js__ = __webpack_require__(40); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + + + + + + + + +var analyticsType = 'endpoint'; +var ENDPOINT = 'https://pb-logs.media.net/log?logid=kfk&evtid=prebid_analytics_events_client'; +var CONFIG_URL = 'https://prebid.media.net/rtb/prebid/analytics/config'; +var EVENT_PIXEL_URL = 'https://qsearch-a.akamaihd.net/log'; +var DEFAULT_LOGGING_PERCENT = 50; +var PRICE_GRANULARITY = { + 'auto': 'pbAg', + 'custom': 'pbCg', + 'dense': 'pbDg', + 'low': 'pbLg', + 'medium': 'pbMg', + 'high': 'pbHg' +}; +var MEDIANET_BIDDER_CODE = 'medianet'; // eslint-disable-next-line no-undef + +var PREBID_VERSION = pbjs.version; +var ERROR_CONFIG_JSON_PARSE = 'analytics_config_parse_fail'; +var ERROR_CONFIG_FETCH = 'analytics_config_ajax_fail'; +var BID_SUCCESS = 1; +var BID_NOBID = 2; +var BID_TIMEOUT = 3; +var BID_FLOOR_REJECTED = 12; +var DUMMY_BIDDER = '-2'; +var CONFIG_PENDING = 0; +var CONFIG_PASS = 1; +var CONFIG_ERROR = 3; +var VALID_URL_KEY = ['canonical_url', 'og_url', 'twitter_url']; +var DEFAULT_URL_KEY = 'page'; +var auctions = {}; +var config; +var pageDetails; +var logsQueue = []; + +var ErrorLogger = /*#__PURE__*/function () { + function ErrorLogger(event, additionalData) { + _classCallCheck(this, ErrorLogger); + + this.event = event; + this.logid = 'kfk'; + this.evtid = 'projectevents'; + this.project = 'prebidanalytics'; + this.dn = pageDetails.domain || ''; + this.requrl = pageDetails.requrl || ''; + this.event = this.event; + this.pbversion = PREBID_VERSION; + this.cid = config.cid || ''; + this.rd = additionalData; + } + + _createClass(ErrorLogger, [{ + key: "send", + value: function send() { + var url = EVENT_PIXEL_URL + '?' + formatQS(this); + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["triggerPixel"](url); + } + }]); + + return ErrorLogger; +}(); + +var Configure = /*#__PURE__*/function () { + function Configure(cid) { + _classCallCheck(this, Configure); + + this.cid = cid; + this.pubLper = -1; + this.ajaxState = CONFIG_PENDING; + this.loggingPercent = DEFAULT_LOGGING_PERCENT; + this.urlToConsume = DEFAULT_URL_KEY; + this.debug = false; + this.gdprConsent = undefined; + this.uspConsent = undefined; + } + + _createClass(Configure, [{ + key: "getLoggingData", + value: function getLoggingData() { + return { + cid: this.cid, + lper: Math.round(100 / this.loggingPercent), + plper: this.pubLper, + gdpr: this.gdprConsent, + ccpa: this.uspConsent, + ajx: this.ajaxState, + pbv: PREBID_VERSION, + flt: 1 + }; + } + }, { + key: "_configURL", + value: function _configURL() { + return CONFIG_URL + '?cid=' + encodeURIComponent(this.cid) + '&dn=' + encodeURIComponent(pageDetails.domain); + } + }, { + key: "_parseResponse", + value: function _parseResponse(response) { + try { + response = JSON.parse(response); + + if (isNaN(response.percentage)) { + throw new Error('not a number'); + } + + this.loggingPercent = response.percentage; + this.urlToConsume = VALID_URL_KEY.includes(response.urlKey) ? response.urlKey : this.urlToConsume; + this.ajaxState = CONFIG_PASS; + } catch (e) { + this.ajaxState = CONFIG_ERROR; + /* eslint no-new: "error" */ + + new ErrorLogger(ERROR_CONFIG_JSON_PARSE, e).send(); + } + } + }, { + key: "_errorFetch", + value: function _errorFetch() { + this.ajaxState = CONFIG_ERROR; + /* eslint no-new: "error" */ + + new ErrorLogger(ERROR_CONFIG_FETCH).send(); + } + }, { + key: "init", + value: function init() { + // Forces Logging % to 100% + var urlObj = URL.parseUrl(pageDetails.page); + + if (__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](urlObj, 'search.medianet_test') || urlObj.hostname === 'localhost') { + this.loggingPercent = 100; + this.ajaxState = CONFIG_PASS; + this.debug = true; + return; + } + + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])(this._configURL(), { + success: this._parseResponse.bind(this), + error: this._errorFetch.bind(this) + }); + } + }, { + key: "publisherLper", + set: function set(plper) { + this.pubLper = plper; + } + }]); + + return Configure; +}(); + +var PageDetail = /*#__PURE__*/function () { + function PageDetail() { + _classCallCheck(this, PageDetail); + + var canonicalUrl = this._getUrlFromSelector('link[rel="canonical"]', 'href'); + + var ogUrl = this._getUrlFromSelector('meta[property="og:url"]', 'content'); + + var twitterUrl = this._getUrlFromSelector('meta[name="twitter:url"]', 'content'); + + var refererInfo = Object(__WEBPACK_IMPORTED_MODULE_5__src_refererDetection_js__["a" /* getRefererInfo */])(); + this.domain = URL.parseUrl(refererInfo.referer).host; + this.page = refererInfo.referer; + this.is_top = refererInfo.reachedTop; + this.referrer = this._getTopWindowReferrer(); + this.canonical_url = canonicalUrl; + this.og_url = ogUrl; + this.twitter_url = twitterUrl; + this.screen = this._getWindowSize(); + } + + _createClass(PageDetail, [{ + key: "_getTopWindowReferrer", + value: function _getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return document.referrer; + } + } + }, { + key: "_getWindowSize", + value: function _getWindowSize() { + var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || -1; + var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || -1; + return "".concat(w, "x").concat(h); + } + }, { + key: "_getAttributeFromSelector", + value: function _getAttributeFromSelector(selector, attribute) { + try { + var doc = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["getWindowTop"]().document; + var element = doc.querySelector(selector); + + if (element !== null && element[attribute]) { + return element[attribute]; + } + } catch (e) {} + } + }, { + key: "_getAbsoluteUrl", + value: function _getAbsoluteUrl(url) { + var aTag = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["getWindowTop"]().document.createElement('a'); + aTag.href = url; + return aTag.href; + } + }, { + key: "_getUrlFromSelector", + value: function _getUrlFromSelector(selector, attribute) { + var attr = this._getAttributeFromSelector(selector, attribute); + + return attr && this._getAbsoluteUrl(attr); + } + }, { + key: "getLoggingData", + value: function getLoggingData() { + return { + requrl: this[config.urlToConsume] || this.page, + dn: this.domain, + ref: this.referrer, + screen: this.screen + }; + } + }]); + + return PageDetail; +}(); + +var AdSlot = /*#__PURE__*/function () { + function AdSlot(mediaTypes, allMediaTypeSizes, tmax, supplyAdCode, adext, context, adSize) { + _classCallCheck(this, AdSlot); + + this.mediaTypes = mediaTypes; + this.allMediaTypeSizes = allMediaTypeSizes; + this.tmax = tmax; + this.supplyAdCode = supplyAdCode; + this.adext = adext; + this.logged = false; + this.targeting = undefined; + this.medianetPresent = 0; // shouldBeLogged is assigned when requested, + // since we are waiting for logging percent response + + this.shouldBeLogged = undefined; + this.context = context; + this.adSize = adSize; // old ad unit sizes + } + + _createClass(AdSlot, [{ + key: "getShouldBeLogged", + value: function getShouldBeLogged() { + if (this.shouldBeLogged === undefined) { + this.shouldBeLogged = isSampled(); + } + + return this.shouldBeLogged; + } + }, { + key: "getLoggingData", + value: function getLoggingData() { + return _extends({ + supcrid: this.supplyAdCode, + mediaTypes: this.mediaTypes && this.mediaTypes.join('|'), + szs: this.allMediaTypeSizes.map(function (sz) { + return sz.join('x'); + }).join('|'), + tmax: this.tmax, + targ: JSON.stringify(this.targeting), + ismn: this.medianetPresent, + vplcmtt: this.context, + sz2: this.adSize.map(function (sz) { + return sz.join('x'); + }).join('|') + }, this.adext && { + 'adext': JSON.stringify(this.adext) + }); + } + }]); + + return AdSlot; +}(); + +var Bid = /*#__PURE__*/function () { + function Bid(bidId, bidder, src, start, supplyAdCode) { + _classCallCheck(this, Bid); + + this.bidId = bidId; + this.bidder = bidder; + this.src = src; + this.start = start; + this.supplyAdCode = supplyAdCode; + this.iwb = 0; + this.winner = 0; + this.status = bidder === DUMMY_BIDDER ? BID_SUCCESS : BID_TIMEOUT; + this.ext = {}; + this.originalCpm = undefined; + this.cpm = undefined; + this.dfpbd = undefined; + this.width = undefined; + this.height = undefined; + this.mediaType = undefined; + this.timeToRespond = undefined; + this.dealId = undefined; + this.creativeId = undefined; + this.adId = undefined; + this.currency = undefined; + this.crid = undefined; + this.pubcrid = undefined; + this.mpvid = undefined; + this.floorPrice = undefined; + this.floorRule = undefined; + } + + _createClass(Bid, [{ + key: "getLoggingData", + value: function getLoggingData() { + return { + adid: this.adId, + pvnm: this.bidder, + src: this.src, + ogbdp: this.originalCpm, + bdp: this.cpm, + cbdp: this.dfpbd, + dfpbd: this.dfpbd, + size: this.size, + mtype: this.mediaType, + dId: this.dealId, + winner: this.winner, + curr: this.currency, + rests: this.timeToRespond, + status: this.status, + iwb: this.iwb, + crid: this.crid, + pubcrid: this.pubcrid, + mpvid: this.mpvid, + bidflr: this.floorPrice, + flrrule: this.floorRule, + ext: JSON.stringify(this.ext) + }; + } + }, { + key: "size", + get: function get() { + if (!this.width || !this.height) { + return ''; + } + + return this.width + 'x' + this.height; + } + }]); + + return Bid; +}(); + +var Auction = /*#__PURE__*/function () { + function Auction(acid) { + _classCallCheck(this, Auction); + + this.acid = acid; + this.status = __WEBPACK_IMPORTED_MODULE_6__src_auction_js__["b" /* AUCTION_IN_PROGRESS */]; + this.bids = []; + this.adSlots = {}; + this.auctionInitTime = undefined; + this.auctionStartTime = undefined; + this.setTargetingTime = undefined; + this.auctionEndTime = undefined; + this.bidWonTime = undefined; + this.floorData = {}; + } + + _createClass(Auction, [{ + key: "hasEnded", + value: function hasEnded() { + return this.status === __WEBPACK_IMPORTED_MODULE_6__src_auction_js__["a" /* AUCTION_COMPLETED */]; + } + }, { + key: "getLoggingData", + value: function getLoggingData() { + return { + sts: this.auctionStartTime - this.auctionInitTime, + ets: this.auctionEndTime - this.auctionInitTime, + tts: this.setTargetingTime - this.auctionInitTime, + wts: this.bidWonTime - this.auctionInitTime, + aucstatus: this.status, + acid: this.acid, + flrdata: this._mergeFieldsToLog({ + ln: this.floorData.location, + skp: this.floorData.skipped, + enfj: __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](this.floorData, 'enforcements.enforceJS'), + enfd: __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](this.floorData, 'enforcements.floorDeals'), + sr: this.floorData.skipRate, + fs: this.floorData.fetchStatus + }), + flrver: this.floorData.modelVersion + }; + } + }, { + key: "addSlot", + value: function addSlot(supplyAdCode, _ref) { + var mediaTypes = _ref.mediaTypes, + allMediaTypeSizes = _ref.allMediaTypeSizes, + tmax = _ref.tmax, + adext = _ref.adext, + context = _ref.context, + adSize = _ref.adSize; + + if (supplyAdCode && this.adSlots[supplyAdCode] === undefined) { + this.adSlots[supplyAdCode] = new AdSlot(mediaTypes, allMediaTypeSizes, tmax, supplyAdCode, adext, context, adSize); + this.addBid(new Bid('-1', DUMMY_BIDDER, 'client', '-1', supplyAdCode)); + } + } + }, { + key: "addBid", + value: function addBid(bid) { + this.bids.push(bid); + } + }, { + key: "findBid", + value: function findBid(key, value) { + return this.bids.filter(function (bid) { + return bid[key] === value; + })[0]; + } + }, { + key: "getAdslotBids", + value: function getAdslotBids(adslot) { + return this.bids.filter(function (bid) { + return bid.supplyAdCode === adslot; + }).map(function (bid) { + return bid.getLoggingData(); + }); + } + }, { + key: "getWinnerAdslotBid", + value: function getWinnerAdslotBid(adslot) { + return this.getAdslotBids(adslot).filter(function (bid) { + return bid.winner; + }); + } + }, { + key: "_mergeFieldsToLog", + value: function _mergeFieldsToLog(objParams) { + var logParams = []; + var value; + + for (var _i = 0, _Object$keys = Object.keys(objParams); _i < _Object$keys.length; _i++) { + var param = _Object$keys[_i]; + value = objParams[param]; + logParams.push(param + '=' + (value === undefined ? '' : value)); + } + + return logParams.join('||'); + } + }]); + + return Auction; +}(); + +function auctionInitHandler(_ref2) { + var auctionId = _ref2.auctionId, + timestamp = _ref2.timestamp, + bidderRequests = _ref2.bidderRequests; + + if (auctionId && auctions[auctionId] === undefined) { + auctions[auctionId] = new Auction(auctionId); + auctions[auctionId].auctionInitTime = timestamp; + } + + var floorData = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bidderRequests, '0.bids.0.floorData'); + + if (floorData) { + auctions[auctionId].floorData = _objectSpread({}, floorData); + } +} + +function bidRequestedHandler(_ref3) { + var auctionId = _ref3.auctionId, + auctionStart = _ref3.auctionStart, + bids = _ref3.bids, + start = _ref3.start, + timeout = _ref3.timeout, + uspConsent = _ref3.uspConsent, + gdpr = _ref3.gdpr; + + if (!(auctions[auctionId] instanceof Auction)) { + return; + } + + if (gdpr && gdpr.gdprApplies) { + config.gdprConsent = gdpr.consentString || ''; + } + + config.uspConsent = config.uspConsent || uspConsent; + bids.forEach(function (bid) { + var adUnitCode = bid.adUnitCode, + bidder = bid.bidder, + mediaTypes = bid.mediaTypes, + sizes = bid.sizes, + bidId = bid.bidId, + src = bid.src; + + if (!auctions[auctionId].adSlots[adUnitCode]) { + auctions[auctionId].auctionStartTime = auctionStart; + + var sizeObject = _getSizes(mediaTypes, sizes); + + auctions[auctionId].addSlot(adUnitCode, _extends({}, mediaTypes instanceof Object && { + mediaTypes: Object.keys(mediaTypes) + }, { + allMediaTypeSizes: [].concat(sizeObject.banner, sizeObject.native, sizeObject.video) + }, { + adext: __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](mediaTypes, 'banner.ext') || '' + }, { + tmax: timeout + }, { + context: __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](mediaTypes, 'video.context') || '' + }, { + adSize: sizeObject.banner + })); + } + + var bidObj = new Bid(bidId, bidder, src, start, adUnitCode); + auctions[auctionId].addBid(bidObj); + + if (bidder === MEDIANET_BIDDER_CODE) { + bidObj.crid = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, 'params.crid'); + bidObj.pubcrid = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, 'params.crid'); + auctions[auctionId].adSlots[adUnitCode].medianetPresent = 1; + } + }); +} + +function _getSizes(mediaTypes, sizes) { + var banner = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](mediaTypes, 'banner.sizes') || sizes || []; + var native = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](mediaTypes, 'native') ? [[1, 1]] : []; + var playerSize = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](mediaTypes, 'video.playerSize') || []; + var video = []; + + if (playerSize.length === 2) { + video = [playerSize]; + } + + return { + banner: banner, + native: native, + video: video + }; +} + +function bidResponseHandler(bid) { + var width = bid.width, + height = bid.height, + mediaType = bid.mediaType, + cpm = bid.cpm, + requestId = bid.requestId, + timeToRespond = bid.timeToRespond, + auctionId = bid.auctionId, + dealId = bid.dealId; + var originalCpm = bid.originalCpm, + bidderCode = bid.bidderCode, + creativeId = bid.creativeId, + adId = bid.adId, + currency = bid.currency; + + if (!(auctions[auctionId] instanceof Auction)) { + return; + } + + var bidObj = auctions[auctionId].findBid('bidId', requestId); + + if (!(bidObj instanceof Bid)) { + return; + } + + _extends(bidObj, { + cpm: cpm, + width: width, + height: height, + mediaType: mediaType, + timeToRespond: timeToRespond, + dealId: dealId, + creativeId: creativeId + }, { + adId: adId, + currency: currency + }); + + bidObj.floorPrice = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, 'floorData.floorValue'); + bidObj.floorRule = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, 'floorData.floorRule'); + bidObj.originalCpm = originalCpm || cpm; + var dfpbd = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, 'adserverTargeting.hb_pb'); + + if (!dfpbd) { + var priceGranularity = Object(__WEBPACK_IMPORTED_MODULE_6__src_auction_js__["i" /* getPriceGranularity */])(mediaType, bid); + var priceGranularityKey = PRICE_GRANULARITY[priceGranularity]; + dfpbd = bid[priceGranularityKey] || cpm; + } + + bidObj.dfpbd = dfpbd; + + if (bid.status === __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.BID_STATUS.BID_REJECTED) { + bidObj.status = BID_FLOOR_REJECTED; + } else { + bidObj.status = BID_SUCCESS; + } + + if (bidderCode === MEDIANET_BIDDER_CODE && bid.ext instanceof Object) { + _extends(bidObj, { + 'ext': bid.ext + }, { + 'mpvid': bid.ext.pvid + }, bid.ext.crid && { + 'crid': bid.ext.crid + }); + } +} + +function noBidResponseHandler(_ref4) { + var auctionId = _ref4.auctionId, + bidId = _ref4.bidId; + + if (!(auctions[auctionId] instanceof Auction)) { + return; + } + + if (auctions[auctionId].hasEnded()) { + return; + } + + var bidObj = auctions[auctionId].findBid('bidId', bidId); + + if (!(bidObj instanceof Bid)) { + return; + } + + bidObj.status = BID_NOBID; +} + +function bidTimeoutHandler(timedOutBids) { + timedOutBids.map(function (_ref5) { + var bidId = _ref5.bidId, + auctionId = _ref5.auctionId; + + if (!(auctions[auctionId] instanceof Auction)) { + return; + } + + var bidObj = auctions[auctionId].findBid('bidId', bidId); + + if (!(bidObj instanceof Bid)) { + return; + } + + bidObj.status = BID_TIMEOUT; + }); +} + +function auctionEndHandler(_ref6) { + var auctionId = _ref6.auctionId, + auctionEnd = _ref6.auctionEnd; + + if (!(auctions[auctionId] instanceof Auction)) { + return; + } + + auctions[auctionId].status = __WEBPACK_IMPORTED_MODULE_6__src_auction_js__["a" /* AUCTION_COMPLETED */]; + auctions[auctionId].auctionEndTime = auctionEnd; +} + +function setTargetingHandler(params) { + var _loop = function _loop() { + var adunit = _Object$keys2[_i2]; + + var _loop2 = function _loop2() { + var auctionId = _Object$keys3[_i3]; + var auctionObj = auctions[auctionId]; + var adunitObj = auctionObj.adSlots[adunit]; + + if (!(adunitObj instanceof AdSlot)) { + return "continue"; + } + + adunitObj.targeting = params[adunit]; + auctionObj.setTargetingTime = Date.now(); + var targetingObj = Object.keys(params[adunit]).reduce(function (result, key) { + if (key.indexOf('hb_adid') !== -1) { + result[key] = params[adunit][key]; + } + + return result; + }, {}); + var bidAdIds = Object.keys(targetingObj).map(function (k) { + return targetingObj[k]; + }); + auctionObj.bids.filter(function (bid) { + return bidAdIds.indexOf(bid.adId) !== -1; + }).map(function (bid) { + bid.iwb = 1; + }); + sendEvent(auctionId, adunit, false); + }; + + for (var _i3 = 0, _Object$keys3 = Object.keys(auctions); _i3 < _Object$keys3.length; _i3++) { + var _ret = _loop2(); + + if (_ret === "continue") continue; + } + }; + + for (var _i2 = 0, _Object$keys2 = Object.keys(params); _i2 < _Object$keys2.length; _i2++) { + _loop(); + } +} + +function bidWonHandler(bid) { + var requestId = bid.requestId, + auctionId = bid.auctionId, + adUnitCode = bid.adUnitCode; + + if (!(auctions[auctionId] instanceof Auction)) { + return; + } + + var bidObj = auctions[auctionId].findBid('bidId', requestId); + + if (!(bidObj instanceof Bid)) { + return; + } + + auctions[auctionId].bidWonTime = Date.now(); + bidObj.winner = 1; + sendEvent(auctionId, adUnitCode, true); +} + +function isSampled() { + return Math.random() * 100 < parseFloat(config.loggingPercent); +} + +function isValidAuctionAdSlot(acid, adtag) { + return auctions[acid] instanceof Auction && auctions[acid].adSlots[adtag] instanceof AdSlot; +} + +function sendEvent(id, adunit, isBidWonEvent) { + if (!isValidAuctionAdSlot(id, adunit)) { + return; + } + + if (isBidWonEvent) { + fireAuctionLog(id, adunit, isBidWonEvent); + } else if (auctions[id].adSlots[adunit].getShouldBeLogged() && !auctions[id].adSlots[adunit].logged) { + auctions[id].adSlots[adunit].logged = true; + fireAuctionLog(id, adunit, isBidWonEvent); + } +} + +function getCommonLoggingData(acid, adtag) { + var commonParams = _extends(pageDetails.getLoggingData(), config.getLoggingData()); + + var adunitParams = auctions[acid].adSlots[adtag].getLoggingData(); + var auctionParams = auctions[acid].getLoggingData(); + return _extends(commonParams, adunitParams, auctionParams); +} + +function fireAuctionLog(acid, adtag, isBidWonEvent) { + var commonParams = getCommonLoggingData(acid, adtag); + var targeting = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](commonParams, 'targ'); + Object.keys(commonParams).forEach(function (key) { + return commonParams[key] == null && delete commonParams[key]; + }); + delete commonParams.targ; + var bidParams; + + if (isBidWonEvent) { + bidParams = auctions[acid].getWinnerAdslotBid(adtag); + commonParams.lper = 1; + } else { + bidParams = auctions[acid].getAdslotBids(adtag).map(function (_ref7) { + var winner = _ref7.winner, + restParams = _objectWithoutProperties(_ref7, ["winner"]); + + return restParams; + }); + delete commonParams.wts; + } + + var mnetPresent = bidParams.filter(function (b) { + return b.pvnm === MEDIANET_BIDDER_CODE; + }).length > 0; + + if (!mnetPresent) { + bidParams = bidParams.map(function (_ref8) { + var mpvid = _ref8.mpvid, + crid = _ref8.crid, + ext = _ref8.ext, + pubcrid = _ref8.pubcrid, + restParams = _objectWithoutProperties(_ref8, ["mpvid", "crid", "ext", "pubcrid"]); + + return restParams; + }); + } + + var url = formatQS(commonParams) + '&'; + bidParams.forEach(function (bidParams) { + url = url + formatQS(bidParams) + '&'; + }); + url = url + formatQS({ + targ: targeting + }); + firePixel(url); +} + +function formatQS(data) { + return __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["_map"](data, function (value, key) { + if (value === undefined) { + return key + '='; + } + + if (__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isPlainObject"](value)) { + value = JSON.stringify(value); + } + + return key + '=' + encodeURIComponent(value); + }).join('&'); +} + +function firePixel(qs) { + logsQueue.push(ENDPOINT + '&' + qs); + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["triggerPixel"](ENDPOINT + '&' + qs); +} + +var URL = /*#__PURE__*/function () { + function URL() { + _classCallCheck(this, URL); + } + + _createClass(URL, null, [{ + key: "parseUrl", + value: function parseUrl(url) { + var parsed = document.createElement('a'); + parsed.href = decodeURIComponent(url); + return { + hostname: parsed.hostname, + search: URL.parseQS(parsed.search || ''), + host: parsed.host || window.location.host + }; + } + }, { + key: "parseQS", + value: 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; + }, {}); + } + }]); + + return URL; +}(); + +var medianetAnalytics = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + URL: URL, + analyticsType: analyticsType +}), { + getlogsQueue: function getlogsQueue() { + return logsQueue; + }, + clearlogsQueue: function clearlogsQueue() { + logsQueue = []; + auctions = {}; + }, + track: function track(_ref9) { + var eventType = _ref9.eventType, + args = _ref9.args; + + if (config.debug) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"](eventType, args); + } + + switch (eventType) { + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_INIT: + { + auctionInitHandler(args); + break; + } + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_REQUESTED: + { + bidRequestedHandler(args); + break; + } + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_RESPONSE: + { + bidResponseHandler(args); + break; + } + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_TIMEOUT: + { + bidTimeoutHandler(args); + break; + } + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.NO_BID: + { + noBidResponseHandler(args); + break; + } + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_END: + { + auctionEndHandler(args); + break; + } + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.SET_TARGETING: + { + setTargetingHandler(args); + break; + } + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_WON: + { + bidWonHandler(args); + break; + } + } + } +}); + +medianetAnalytics.originEnableAnalytics = medianetAnalytics.enableAnalytics; + +medianetAnalytics.enableAnalytics = function (configuration) { + if (!configuration || !configuration.options || !configuration.options.cid) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"]('Media.net Analytics adapter: cid is required.'); + return; + } + + pbjs.medianetGlobals = pbjs.medianetGlobals || {}; + pbjs.medianetGlobals.analyticsEnabled = true; + pageDetails = new PageDetail(); + config = new Configure(configuration.options.cid); + config.publisherLper = configuration.options.sampling || ''; + config.init(); + configuration.options.sampling = 1; + medianetAnalytics.originEnableAnalytics(configuration); +}; + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: medianetAnalytics, + code: 'medianetAnalytics' +}); +/* harmony default export */ __webpack_exports__["default"] = (medianetAnalytics); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[523]); \ No newline at end of file diff --git a/build/dist/medianetBidAdapter.js b/build/dist/medianetBidAdapter.js new file mode 100644 index 00000000000..aa4ce153d86 --- /dev/null +++ b/build/dist/medianetBidAdapter.js @@ -0,0 +1,477 @@ +pbjsChunk([173],{ + +/***/ 525: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(526); + + +/***/ }), + +/***/ 526: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_refererDetection_js__ = __webpack_require__(30); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var BIDDER_CODE = 'medianet'; +var BID_URL = 'https://prebid.media.net/rtb/prebid'; +var SLOT_VISIBILITY = { + NOT_DETERMINED: 0, + ABOVE_THE_FOLD: 1, + BELOW_THE_FOLD: 2 +}; +var EVENTS = { + TIMEOUT_EVENT_NAME: 'client_timeout', + BID_WON_EVENT_NAME: 'client_bid_won' +}; +var EVENT_PIXEL_URL = 'qsearch-a.akamaihd.net/log'; +var refererInfo = Object(__WEBPACK_IMPORTED_MODULE_4__src_refererDetection_js__["a" /* getRefererInfo */])(); +var mnData = {}; +mnData.urlData = { + domain: __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["parseUrl"](refererInfo.referer).hostname, + page: refererInfo.referer, + isTop: refererInfo.reachedTop +}; +pbjs.medianetGlobals = pbjs.medianetGlobals || {}; + +function getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return document.referrer; + } +} + +function siteDetails(site) { + site = site || {}; + var siteData = { + domain: site.domain || mnData.urlData.domain, + page: site.page || mnData.urlData.page, + ref: site.ref || getTopWindowReferrer(), + isTop: site.isTop || mnData.urlData.isTop + }; + return _extends(siteData, getPageMeta()); +} + +function getPageMeta() { + if (mnData.pageMeta) { + return mnData.pageMeta; + } + + var canonicalUrl = getUrlFromSelector('link[rel="canonical"]', 'href'); + var ogUrl = getUrlFromSelector('meta[property="og:url"]', 'content'); + var twitterUrl = getUrlFromSelector('meta[name="twitter:url"]', 'content'); + mnData.pageMeta = _extends({}, canonicalUrl && { + 'canonical_url': canonicalUrl + }, ogUrl && { + 'og_url': ogUrl + }, twitterUrl && { + 'twitter_url': twitterUrl + }); + return mnData.pageMeta; +} + +function getUrlFromSelector(selector, attribute) { + var attr = getAttributeFromSelector(selector, attribute); + return attr && getAbsoluteUrl(attr); +} + +function getAttributeFromSelector(selector, attribute) { + try { + var doc = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"]().document; + var element = doc.querySelector(selector); + + if (element !== null && element[attribute]) { + return element[attribute]; + } + } catch (e) {} +} + +function getAbsoluteUrl(url) { + var aTag = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"]().document.createElement('a'); + aTag.href = url; + return aTag.href; +} + +function filterUrlsByType(urls, type) { + return urls.filter(function (url) { + return url.type === type; + }); +} + +function transformSizes(sizes) { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](sizes) && sizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["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 getWindowSize() { + return { + w: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || -1, + h: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || -1 + }; +} + +function getCoordinates(id) { + var element = document.getElementById(id); + + if (element && element.getBoundingClientRect) { + var rect = element.getBoundingClientRect(); + var coordinates = {}; + coordinates.top_left = { + y: rect.top, + x: rect.left + }; + coordinates.bottom_right = { + y: rect.bottom, + x: rect.right + }; + return coordinates; + } + + return null; +} + +function extParams(params, gdpr, uspConsent, userId) { + var windowSize = spec.getWindowSize(); + var gdprApplies = !!(gdpr && gdpr.gdprApplies); + var uspApplies = !!uspConsent; + var coppaApplies = !!__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa'); + return _extends({}, { + customer_id: params.cid + }, { + prebid_version: pbjs.version + }, { + gdpr_applies: gdprApplies + }, gdprApplies && { + gdpr_consent_string: gdpr.consentString || '' + }, { + usp_applies: uspApplies + }, uspApplies && { + usp_consent_string: uspConsent || '' + }, { + coppa_applies: coppaApplies + }, windowSize.w !== -1 && windowSize.h !== -1 && { + screen: windowSize + }, userId && { + user_id: userId + }, pbjs.medianetGlobals.analyticsEnabled && { + analytics: true + }); +} + +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, + display_count: bidRequest.bidRequestsCount + }, + all: bidRequest.params + }; + var bannerSizes = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes') || []; + var videoInMediaType = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') || {}; + var videoInParams = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequest, 'params.video') || {}; + + var videoCombinedObj = _extends({}, videoInParams, videoInMediaType); + + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](videoCombinedObj)) { + params.video = videoCombinedObj; + } + + if (bannerSizes.length > 0) { + params.banner = transformSizes(bannerSizes); + } + + if (bidRequest.nativeParams) { + try { + params.native = JSON.stringify(bidRequest.nativeParams); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]("".concat(BIDDER_CODE, " : Incorrect JSON : bidRequest.nativeParams")); + } + } + + if (bidRequest.params.crid) { + params.tagid = bidRequest.params.crid.toString(); + } + + var bidFloor = parseFloat(bidRequest.params.bidfloor); + + if (bidFloor) { + params.bidfloor = bidFloor; + } + + var coordinates = getCoordinates(bidRequest.adUnitCode); + + if (coordinates && params.banner && params.banner.length !== 0) { + var normCoordinates = normalizeCoordinates(coordinates); + params.ext.coordinates = normCoordinates; + params.ext.viewability = getSlotVisibility(coordinates.top_left, getMinSize(params.banner)); + + if (getSlotVisibility(normCoordinates.top_left, getMinSize(params.banner)) > 0.5) { + params.ext.visibility = SLOT_VISIBILITY.ABOVE_THE_FOLD; + } else { + params.ext.visibility = SLOT_VISIBILITY.BELOW_THE_FOLD; + } + } else { + params.ext.visibility = SLOT_VISIBILITY.NOT_DETERMINED; + } + + return params; +} + +function getMinSize(sizes) { + return sizes.reduce(function (min, size) { + return size.h * size.w < min.h * min.w ? size : min; + }); +} + +function getSlotVisibility(topLeft, size) { + var maxArea = size.w * size.h; + var windowSize = spec.getWindowSize(); + var bottomRight = { + x: topLeft.x + size.w, + y: topLeft.y + size.h + }; + + if (maxArea === 0 || windowSize.w === -1 || windowSize.h === -1) { + return 0; + } + + return getOverlapArea(topLeft, bottomRight, { + x: 0, + y: 0 + }, { + x: windowSize.w, + y: windowSize.h + }) / maxArea; +} // find the overlapping area between two rectangles + + +function getOverlapArea(topLeft1, bottomRight1, topLeft2, bottomRight2) { + // If no overlap, return 0 + if (topLeft1.x > bottomRight2.x || bottomRight1.x < topLeft2.x || topLeft1.y > bottomRight2.y || bottomRight1.y < topLeft2.y) { + return 0; + } // return overlapping area : [ min of rightmost/bottommost co-ordinates ] - [ max of leftmost/topmost co-ordinates ] + + + return (Math.min(bottomRight1.x, bottomRight2.x) - Math.max(topLeft1.x, topLeft2.x)) * (Math.min(bottomRight1.y, bottomRight2.y) - Math.max(topLeft1.y, topLeft2.y)); +} + +function normalizeCoordinates(coordinates) { + return { + top_left: { + x: coordinates.top_left.x + window.pageXOffset, + y: coordinates.top_left.y + window.pageYOffset + }, + bottom_right: { + x: coordinates.bottom_right.x + window.pageXOffset, + y: coordinates.bottom_right.y + window.pageYOffset + } + }; +} + +function getBidderURL(cid) { + return BID_URL + '?cid=' + encodeURIComponent(cid); +} + +function generatePayload(bidRequests, bidderRequests) { + return { + site: siteDetails(bidRequests[0].params.site), + ext: extParams(bidRequests[0].params, bidderRequests.gdprConsent, bidderRequests.uspConsent, bidRequests[0].userId), + id: bidRequests[0].auctionId, + imp: bidRequests.map(function (request) { + return slotParams(request); + }), + tmax: bidderRequests.timeout || __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; +} + +function isValidBid(bid) { + return bid.no_bid === false && parseFloat(bid.cpm) > 0.0; +} + +function fetchCookieSyncUrls(response) { + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](response) && response[0].body && response[0].body.ext && __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](response[0].body.ext.csUrl)) { + return response[0].body.ext.csUrl; + } + + return []; +} + +function getLoggingData(event, data) { + data = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](data) && data || []; + var params = {}; + params.logid = 'kfk'; + params.evtid = 'projectevents'; + params.project = 'prebid'; + params.acid = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](data, '0.auctionId') || ''; + params.cid = pbjs.medianetGlobals.cid || ''; + params.crid = data.map(function (adunit) { + return __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](adunit, 'params.0.crid') || adunit.adUnitCode; + }).join('|'); + params.adunit_count = data.length || 0; + params.dn = mnData.urlData.domain || ''; + params.requrl = mnData.urlData.page || ''; + params.istop = mnData.urlData.isTop || ''; + params.event = event.name || ''; + params.value = event.value || ''; + params.rd = event.related_data || ''; + return params; +} + +function logEvent(event, data) { + var getParams = { + protocol: 'https', + hostname: EVENT_PIXEL_URL, + search: getLoggingData(event, data) + }; + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["triggerPixel"](__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["buildUrl"](getParams)); +} + +function clearMnData() { + mnData = {}; +} + +var spec = { + code: BIDDER_CODE, + gvlid: 142, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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 (if cid is present), and false otherwise. + */ + isBidRequestValid: function isBidRequestValid(bid) { + if (!bid.params) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]("".concat(BIDDER_CODE, " : Missing bid parameters")); + return false; + } + + if (!bid.params.cid || !__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](bid.params.cid) || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmptyStr"](bid.params.cid)) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]("".concat(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. + * @param {BidderRequests} bidderRequests + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(bidRequests, bidderRequests) { + var payload = generatePayload(bidRequests, bidderRequests); + return { + method: 'POST', + url: getBidderURL(payload.ext.customer_id), + 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) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]("".concat(BIDDER_CODE, " : response is empty")); + return validBids; + } + + var bids = serverResponse.body.bidList; + + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](bids) || bids.length === 0) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]("".concat(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'); + } + }, + + /** + * @param {TimedOutBid} timeoutData + */ + onTimeout: function onTimeout(timeoutData) { + try { + var eventData = { + name: EVENTS.TIMEOUT_EVENT_NAME, + value: timeoutData.length, + related_data: timeoutData[0].timeout || __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; + logEvent(eventData, timeoutData); + } catch (e) {} + }, + + /** + * @param {TimedOutBid} timeoutData + */ + onBidWon: function onBidWon(bid) { + try { + var eventData = { + name: EVENTS.BID_WON_EVENT_NAME, + value: bid.cpm + }; + logEvent(eventData, [bid]); + } catch (e) {} + }, + clearMnData: clearMnData, + getWindowSize: getWindowSize +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[525]); \ No newline at end of file diff --git a/build/dist/mediasquareBidAdapter.js b/build/dist/mediasquareBidAdapter.js new file mode 100644 index 00000000000..8b717908e21 --- /dev/null +++ b/build/dist/mediasquareBidAdapter.js @@ -0,0 +1,225 @@ +pbjsChunk([172],{ + +/***/ 527: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(528); + + +/***/ }), + +/***/ 528: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'mediasquare'; +var BIDDER_URL_PROD = 'https://pbs-front.mediasquare.fr/'; +var BIDDER_URL_TEST = 'https://bidder-test.mediasquare.fr/'; +var BIDDER_ENDPOINT_AUCTION = 'msq_prebid'; +var BIDDER_ENDPOINT_SYNC = 'cookie_sync'; +var BIDDER_ENDPOINT_WINNING = 'winning'; +var spec = { + code: BIDDER_CODE, + aliases: ['msq'], + // short code + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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.owner && bid.params.code); + }, + + /** + * 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 codes = []; + var endpoint = document.location.search.match(/msq_test=true/) ? BIDDER_URL_TEST : BIDDER_URL_PROD; + var test = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('debug') ? 1 : 0; + var adunitValue = null; + Object.keys(validBidRequests).forEach(function (key) { + adunitValue = validBidRequests[key]; + codes.push({ + owner: adunitValue.params.owner, + code: adunitValue.params.code, + adunit: adunitValue.adUnitCode, + bidId: adunitValue.bidId, + auctionId: adunitValue.auctionId, + transactionId: adunitValue.transactionId, + mediatypes: adunitValue.mediaTypes + }); + }); + var payload = { + codes: codes, + referer: encodeURIComponent(bidderRequest.refererInfo.referer) + }; + + if (bidderRequest) { + // modules informations (gdpr, ccpa, schain, userId) + if (bidderRequest.gdprConsent) { + payload.gdpr = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + + if (bidderRequest.uspConsent) { + payload.uspConsent = bidderRequest.uspConsent; + } + + if (bidderRequest.schain) { + payload.schain = bidderRequest.schain; + } + + if (bidderRequest.userId) { + payload.userId = bidderRequest.userId; + } + } + + ; + + if (test) { + payload.debug = true; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: endpoint + BIDDER_ENDPOINT_AUCTION, + data: payloadString + }; + }, + + /** + * 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; // const headerValue = serverResponse.headers.get('some-response-header'); + + var bidResponses = []; + var bidResponse = null; + var value = null; + + if (serverBody.hasOwnProperty('responses')) { + Object.keys(serverBody['responses']).forEach(function (key) { + value = serverBody['responses'][key]; + bidResponse = { + requestId: value['bid_id'], + cpm: value['cpm'], + width: value['width'], + height: value['height'], + creativeId: value['creative_id'], + currency: value['currency'], + netRevenue: value['net_revenue'], + ttl: value['ttl'], + ad: value['ad'], + mediasquare: { + 'bidder': value['bidder'], + 'code': value['code'] + } + }; + + if (value.hasOwnProperty('deal_id')) { + bidResponse['dealId'] = value['deal_id']; + } + + bidResponses.push(bidResponse); + }); + } + + 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, gdprConsent, uspConsent) { + var params = ''; + var endpoint = document.location.search.match(/msq_test=true/) ? BIDDER_URL_TEST : BIDDER_URL_PROD; + + if (serverResponses[0].body.hasOwnProperty('cookies') && _typeof(serverResponses[0].body.cookies) === 'object') { + return serverResponses[0].body.cookies; + } else { + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + params += typeof gdprConsent.gdprApplies === 'boolean' ? "&gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString) : "&gdpr_consent=".concat(gdprConsent.consentString); + } + + if (uspConsent && typeof uspConsent === 'string') { + params += '&uspConsent=' + uspConsent; + } + + return { + type: 'iframe', + url: endpoint + BIDDER_ENDPOINT_SYNC + '?type=iframe' + params + }; + } + }, + + /** + * Register bidder specific code, which will execute if a bid from this bidder won the auction + * @param {Bid} The bid that won the auction + */ + onBidWon: function onBidWon(bid) { + // fires a pixel to confirm a winning bid + var params = []; + var endpoint = document.location.search.match(/msq_test=true/) ? BIDDER_URL_TEST : BIDDER_URL_PROD; + var paramsToSearchFor = ['cpm', 'size', 'mediaType', 'currency', 'creativeId', 'adUnitCode', 'timeToRespond', 'auctionId', 'requestId']; + + if (bid.hasOwnProperty('mediasquare')) { + if (bid['mediasquare'].hasOwnProperty('bidder')) { + params.push('bidder=' + bid['mediasquare']['bidder']); + } + + if (bid['mediasquare'].hasOwnProperty('code')) { + params.push('code=' + bid['mediasquare']['code']); + } + } + + ; + + for (var i = 0; i < paramsToSearchFor.length; i++) { + if (bid.hasOwnProperty(paramsToSearchFor[i])) { + params.push(paramsToSearchFor[i] + '=' + bid[paramsToSearchFor[i]]); + } + } + + if (params.length > 0) { + params = '?' + params.join('&'); + } + + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(endpoint + BIDDER_ENDPOINT_WINNING + params, null); + return true; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[527]); \ No newline at end of file diff --git a/build/dist/mgidBidAdapter.js b/build/dist/mgidBidAdapter.js new file mode 100644 index 00000000000..60a63fcf167 --- /dev/null +++ b/build/dist/mgidBidAdapter.js @@ -0,0 +1,733 @@ +pbjsChunk([171],{ + +/***/ 529: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(530); + + +/***/ }), + +/***/ 530: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); +var DEFAULT_CUR = 'USD'; +var BIDDER_CODE = 'mgid'; +var ENDPOINT_URL = 'https://prebid.mgid.com/prebid/'; +var LOG_WARN_PREFIX = '[MGID warn]: '; +var LOG_INFO_PREFIX = '[MGID info]: '; +var NATIVE_ASSETS = { + 'TITLE': { + ID: 1, + KEY: 'title', + TYPE: 0 + }, + 'IMAGE': { + ID: 2, + KEY: 'image', + TYPE: 0 + }, + 'ICON': { + ID: 3, + KEY: 'icon', + TYPE: 0 + }, + 'SPONSOREDBY': { + ID: 4, + KEY: 'sponsoredBy', + TYPE: 1 + }, + // please note that type of SPONSORED is also 1 + 'DESC': { + ID: 5, + KEY: 'data', + TYPE: 2 + }, + // please note that type of BODY is also set to 2 + 'PRICE': { + ID: 6, + KEY: 'price', + TYPE: 6 + }, + 'SALEPRICE': { + ID: 7, + KEY: 'saleprice', + TYPE: 7 + }, + 'DISPLAYURL': { + ID: 8, + KEY: 'displayurl', + TYPE: 11 + }, + 'CTA': { + ID: 9, + KEY: 'cta', + TYPE: 12 + }, + 'BODY': { + ID: 10, + KEY: 'body', + TYPE: 2 + }, + // please note that type of DESC is also set to 2 + 'SPONSORED': { + ID: 11, + KEY: 'sponsored', + TYPE: 1 + } // please note that type of SPONSOREDBY is also set to 1 + +}; +var NATIVE_ASSET_IMAGE_TYPE = { + 'ICON': 1, + 'IMAGE': 3 +}; +var DEFAULT_IMAGE_WIDTH = 492; +var DEFAULT_IMAGE_HEIGHT = 328; +var DEFAULT_ICON_WIDTH = 50; +var DEFAULT_ICON_HEIGHT = 50; +var DEFAULT_TITLE_LENGTH = 80; +var isInvalidNativeRequest = false; // check if title, image can be added with mandatory field default values + +var NATIVE_MINIMUM_REQUIRED_IMAGE_ASSETS = [{ + id: NATIVE_ASSETS.SPONSOREDBY.ID, + required: true, + data: { + type: 1 + } +}, { + id: NATIVE_ASSETS.TITLE.ID, + required: true +}, { + id: NATIVE_ASSETS.IMAGE.ID, + required: true +}]; +var _NATIVE_ASSET_ID_TO_KEY_MAP = {}; +var _NATIVE_ASSET_KEY_TO_ASSET_MAP = {}; // loading _NATIVE_ASSET_ID_TO_KEY_MAP + +__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["_each"](NATIVE_ASSETS, function (anAsset) { + _NATIVE_ASSET_ID_TO_KEY_MAP[anAsset.ID] = anAsset.KEY; +}); // loading _NATIVE_ASSET_KEY_TO_ASSET_MAP + + +__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["_each"](NATIVE_ASSETS, function (anAsset) { + _NATIVE_ASSET_KEY_TO_ASSET_MAP[anAsset.KEY] = anAsset; +}); + +var spec = { + VERSION: '1.4', + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]], + reId: /^[1-9][0-9]*$/, + NATIVE_ASSET_ID_TO_KEY_MAP: _NATIVE_ASSET_ID_TO_KEY_MAP, + NATIVE_ASSET_KEY_TO_ASSET_MAP: _NATIVE_ASSET_KEY_TO_ASSET_MAP, + + /** + * 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 banner = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner'); + var native = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'mediaTypes.native'); + var nativeOk = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isPlainObject"](native); + + if (nativeOk) { + var nativeParams = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'nativeParams'); + var assetsCount = 0; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isPlainObject"](nativeParams)) { + for (var k in nativeParams) { + var v = nativeParams[k]; + var supportProp = spec.NATIVE_ASSET_KEY_TO_ASSET_MAP.hasOwnProperty(k); + + if (supportProp) { + assetsCount++; + } + + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isPlainObject"](v) || !supportProp && __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](v, 'required')) { + nativeOk = false; + break; + } + } + } + + nativeOk = nativeOk && assetsCount > 0; + } + + var bannerOk = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isPlainObject"](banner); + + if (bannerOk) { + var sizes = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](banner, 'sizes'); + bannerOk = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](sizes) && sizes.length > 0; + + for (var f = 0; bannerOk && f < sizes.length; f++) { + bannerOk = sizes[f].length === 2; + } + } + + var acc = Number(bid.params.accountId); + var plcmt = Number(bid.params.placementId); + return (bannerOk || nativeOk) && __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isPlainObject"](bid.params) && !!bid.adUnitCode && __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](bid.adUnitCode) && (plcmt > 0 ? bid.params.placementId.toString().search(spec.reId) === 0 : true) && !!acc && acc > 0 && bid.params.accountId.toString().search(spec.reId) === 0; + }, + + /** + * 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) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"](LOG_INFO_PREFIX + "buildRequests"); + + if (validBidRequests.length === 0) { + return; + } + + var info = pageInfo(); + var page = info.location || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.referer') || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.canonicalUrl'); + var hostname = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["parseUrl"](page).hostname; + var domain = extractDomainFromHost(hostname) || hostname; + var accountId = setOnAny(validBidRequests, 'params.accountId'); + var muid = getLocalStorageSafely('mgMuidn'); + var url = (setOnAny(validBidRequests, 'params.bidUrl') || ENDPOINT_URL) + accountId; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](muid) && muid.length > 0) { + url += '?muid=' + muid; + } + + var cur = [setOnAny(validBidRequests, 'params.currency') || setOnAny(validBidRequests, 'params.cur') || __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency') || DEFAULT_CUR]; + var secure = window.location.protocol === 'https:' ? 1 : 0; + var imp = []; + validBidRequests.forEach(function (bid) { + var tagid = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'params.placementId') || 0; + tagid = !tagid ? bid.adUnitCode : tagid + '/' + bid.adUnitCode; + var impObj = { + id: bid.bidId, + tagid: tagid, + secure: secure + }; + var bidFloor = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'params.bidFloor') || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'params.bidfloor') || 0; + + if (bidFloor && __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isNumber"](bidFloor)) { + impObj.bidfloor = bidFloor; + } + + for (var mediaTypes in bid.mediaTypes) { + switch (mediaTypes) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + impObj.banner = createBannerRequest(bid); + imp.push(impObj); + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]: + var native = createNativeRequest(bid.nativeParams); + + if (!isInvalidNativeRequest) { + impObj.native = { + 'request': native + }; + imp.push(impObj); + } + + break; + } + } + }); + + if (imp.length === 0) { + return; + } + + var request = { + id: __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidderRequest, 'bidderRequestId'), + site: { + domain: domain, + page: page + }, + cur: cur, + geo: { + utcoffset: info.timeOffset + }, + 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: getLanguage() + }, + ext: { + mgid_ver: spec.VERSION, + prebid_ver: pbjs.version + }, + imp: imp + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + request.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + request.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0 + } + }; + } + + if (info.referrer) { + request.site.ref = info.referrer; + } + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"](LOG_INFO_PREFIX + "buildRequest:", request); + return { + method: 'POST', + url: url, + data: JSON.stringify(request) + }; + }, + + /** + * 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, bidRequests) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"](LOG_INFO_PREFIX + "interpretResponse", serverResponse); + + if (serverResponse == null || serverResponse.body == null || serverResponse.body === '' || !__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](serverResponse.body.seatbid) || !serverResponse.body.seatbid.length) { + return; + } + + var returnedBids = []; + var muidn = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](serverResponse.body, 'ext.muidn'); + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](muidn) && muidn.length > 0) { + setLocalStorageSafely('mgMuidn', muidn); + } + + serverResponse.body.seatbid.forEach(function (bids) { + bids.bid.forEach(function (bid) { + var pbid = prebidBid(bid, serverResponse.body.cur); + + if (pbid.mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */] && __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](pbid.native)) { + return; + } + + returnedBids.push(pbid); + }); + }); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"](LOG_INFO_PREFIX + "interpretedResponse", returnedBids); + return returnedBids; + }, + onBidWon: function onBidWon(bid) { + var cpm = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'adserverTargeting.hb_pb') || ''; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](bid.nurl) && bid.nurl !== '') { + bid.nurl = bid.nurl.replace(/\${AUCTION_PRICE}/, cpm); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["triggerPixel"](bid.nurl); + } + + if (bid.isBurl) { + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]) { + bid.ad = bid.ad.replace(/\${AUCTION_PRICE}/, cpm); + } else { + bid.burl = bid.burl.replace(/\${AUCTION_PRICE}/, cpm); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["triggerPixel"](bid.burl); + } + } + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"](LOG_INFO_PREFIX + "onBidWon"); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"](LOG_INFO_PREFIX + "getUserSyncs"); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function setOnAny(collection, key) { + for (var i = 0, result; i < collection.length; i++) { + result = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](collection[i], key); + + if (result) { + return result; + } + } +} +/** + * Unpack the Server's Bid into a Prebid-compatible one. + * @param serverBid + * @return Bid + */ + + +function prebidBid(serverBid, cur) { + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](cur) || cur === '') { + cur = DEFAULT_CUR; + } + + var bid = { + requestId: serverBid.impid, + ad: serverBid.adm, + cpm: serverBid.price, + creativeId: serverBid.adid, + currency: cur, + dealId: serverBid.dealid || '', + width: serverBid.w, + height: serverBid.h, + mediaType: 'banner', + netRevenue: true, + ttl: serverBid.ttl || 300, + nurl: serverBid.nurl || '', + burl: serverBid.burl || '', + isBurl: __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](serverBid.burl) && serverBid.burl.length > 0 + }; + setMediaType(serverBid, bid); + + switch (bid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]: + parseNativeResponse(serverBid, bid); + break; + } + + return bid; +} + +function setMediaType(bid, newBid) { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'ext.crtype') === 'native') { + newBid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + } else { + newBid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } +} + +function extractDomainFromHost(pageHost) { + if (pageHost == 'localhost') { + return 'localhost'; + } + + var domain = null; + + try { + var domains = /[-\w]+\.([-\w]+|[-\w]{3,}|[-\w]{1,3}\.[-\w]{2})$/i.exec(pageHost); + + if (domains != null && domains.length > 0) { + domain = domains[0]; + + for (var i = 1; i < domains.length; i++) { + if (domains[i].length > domain.length) { + domain = domains[i]; + } + } + } + } catch (e) { + domain = null; + } + + return domain; +} + +function getLanguage() { + var language = navigator.language ? 'language' : 'userLanguage'; + var lang2 = navigator[language].split('-')[0]; + + if (lang2.length === 2 || lang2.length === 3) { + return lang2; + } + + return ''; +} + +function getLocalStorageSafely(key) { + try { + return storage.getDataFromLocalStorage(key); + } catch (e) { + return null; + } +} + +function setLocalStorageSafely(key, val) { + try { + return storage.setDataInLocalStorage(key, val); + } catch (e) { + return null; + } +} + +function createBannerRequest(bid) { + var sizes = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes'); + var format = []; + + if (sizes.length > 1) { + for (var f = 0; f < sizes.length; f++) { + if (sizes[f].length === 2) { + format.push({ + w: sizes[f][0], + h: sizes[f][1] + }); + } + } + } + + var r = { + w: sizes && sizes[0][0], + h: sizes && sizes[0][1] + }; + + if (format.length) { + r.format = format; + } + + return r; +} + +function createNativeRequest(params) { + var nativeRequestObject = { + plcmtcnt: 1, + assets: [] + }; + + for (var key in params) { + var assetObj = {}; + + if (params.hasOwnProperty(key)) { + if (!(nativeRequestObject.assets && nativeRequestObject.assets.length > 0 && nativeRequestObject.assets.hasOwnProperty(key))) { + switch (key) { + case NATIVE_ASSETS.TITLE.KEY: + assetObj = { + id: NATIVE_ASSETS.TITLE.ID, + required: params[key].required ? 1 : 0, + title: { + len: params[key].len || params[key].length || DEFAULT_TITLE_LENGTH + } + }; + break; + + case NATIVE_ASSETS.IMAGE.KEY: + var wmin = params[key].wmin || params[key].minimumWidth || (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](params[key].minsizes) && params[key].minsizes.length > 0 ? params[key].minsizes[0] : 0); + var hmin = params[key].hmin || params[key].minimumHeight || (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](params[key].minsizes) && params[key].minsizes.length > 1 ? params[key].minsizes[1] : 0); + assetObj = { + id: NATIVE_ASSETS.IMAGE.ID, + required: params[key].required ? 1 : 0, + img: { + type: NATIVE_ASSET_IMAGE_TYPE.IMAGE, + w: params[key].w || params[key].width || (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](params[key].sizes) && params[key].sizes.length > 0 ? params[key].sizes[0] : 0), + h: params[key].h || params[key].height || (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](params[key].sizes) && params[key].sizes.length > 1 ? params[key].sizes[1] : 0), + mimes: params[key].mimes, + ext: params[key].ext + } + }; + + if (wmin > 0) { + assetObj.img.wmin = wmin; + } + + if (hmin > 0) { + assetObj.img.hmin = hmin; + } + + if (!assetObj.img.w) { + assetObj.img.w = DEFAULT_IMAGE_WIDTH; + } + + if (!assetObj.img.h) { + assetObj.img.h = DEFAULT_IMAGE_HEIGHT; + } + + break; + + case NATIVE_ASSETS.ICON.KEY: + assetObj = { + id: NATIVE_ASSETS.ICON.ID, + required: params[key].required ? 1 : 0, + img: { + type: NATIVE_ASSET_IMAGE_TYPE.ICON, + w: params[key].w || params[key].width || (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](params[key].sizes) && params[key].sizes.length > 0 ? params[key].sizes[0] : 0), + h: params[key].h || params[key].height || (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](params[key].sizes) && params[key].sizes.length > 0 ? params[key].sizes[1] : 0) + } + }; + + if (!assetObj.img.w) { + assetObj.img.w = DEFAULT_ICON_WIDTH; + } + + if (!assetObj.img.h) { + assetObj.img.h = DEFAULT_ICON_HEIGHT; + } + + break; + + case NATIVE_ASSETS.SPONSORED.KEY: + case NATIVE_ASSETS.SPONSOREDBY.KEY: + case NATIVE_ASSETS.PRICE.KEY: + case NATIVE_ASSETS.SALEPRICE.KEY: + case NATIVE_ASSETS.DESC.KEY: + case NATIVE_ASSETS.BODY.KEY: + case NATIVE_ASSETS.DISPLAYURL.KEY: + case NATIVE_ASSETS.CTA.KEY: + assetObj = commonNativeRequestObject(spec.NATIVE_ASSET_KEY_TO_ASSET_MAP[key], params); + break; + + default: + if (params[key].required) { + isInvalidNativeRequest = true; + return; + } + + } + } + } + + if (assetObj.id) { + nativeRequestObject.assets[nativeRequestObject.assets.length] = assetObj; + } + } // for native image adtype prebid has to have few required assests i.e. title,sponsoredBy, image + // if any of these are missing from the request then request will not be sent + + + var requiredAssetCount = NATIVE_MINIMUM_REQUIRED_IMAGE_ASSETS.length; + var presentrequiredAssetCount = 0; + NATIVE_MINIMUM_REQUIRED_IMAGE_ASSETS.forEach(function (ele) { + var lengthOfExistingAssets = nativeRequestObject.assets.length; + + for (var i = 0; i < lengthOfExistingAssets; i++) { + if (ele.id === nativeRequestObject.assets[i].id) { + presentrequiredAssetCount++; + break; + } else { + if (ele.id === 4 && nativeRequestObject.assets[i].id === 11) { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](nativeRequestObject.assets[i], 'data.type') === ele.data.type) { + presentrequiredAssetCount++; + break; + } + } + } + } + }); + isInvalidNativeRequest = requiredAssetCount !== presentrequiredAssetCount; + return nativeRequestObject; +} + +function commonNativeRequestObject(nativeAsset, params) { + var key = nativeAsset.KEY; + return { + id: nativeAsset.ID, + required: params[key].required ? 1 : 0, + data: { + type: nativeAsset.TYPE, + len: params[key].len, + ext: params[key].ext + } + }; +} + +function parseNativeResponse(bid, newBid) { + newBid.native = {}; + + if (bid.hasOwnProperty('adm')) { + var adm = ''; + + try { + adm = JSON.parse(bid.adm); + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Cannot parse native response for ad response: ' + newBid.adm); + return; + } + + if (adm && adm.native && adm.native.assets && adm.native.assets.length > 0) { + newBid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + + for (var i = 0, len = adm.native.assets.length; i < len; i++) { + switch (adm.native.assets[i].id) { + case NATIVE_ASSETS.TITLE.ID: + newBid.native.title = adm.native.assets[i].title && adm.native.assets[i].title.text; + break; + + case NATIVE_ASSETS.IMAGE.ID: + newBid.native.image = { + url: adm.native.assets[i].img && adm.native.assets[i].img.url, + height: adm.native.assets[i].img && adm.native.assets[i].img.h, + width: adm.native.assets[i].img && adm.native.assets[i].img.w + }; + break; + + case NATIVE_ASSETS.ICON.ID: + newBid.native.icon = { + url: adm.native.assets[i].img && adm.native.assets[i].img.url, + height: adm.native.assets[i].img && adm.native.assets[i].img.h, + width: adm.native.assets[i].img && adm.native.assets[i].img.w + }; + break; + + case NATIVE_ASSETS.SPONSOREDBY.ID: + case NATIVE_ASSETS.SPONSORED.ID: + case NATIVE_ASSETS.PRICE: + case NATIVE_ASSETS.SALEPRICE.ID: + case NATIVE_ASSETS.DESC.ID: + case NATIVE_ASSETS.BODY.ID: + case NATIVE_ASSETS.DISPLAYURL.ID: + case NATIVE_ASSETS.CTA.ID: + newBid.native[spec.NATIVE_ASSET_ID_TO_KEY_MAP[adm.native.assets[i].id]] = adm.native.assets[i].data && adm.native.assets[i].data.value; + break; + } + } + + newBid.native.clickUrl = adm.native.link && adm.native.link.url; + newBid.native.clickTrackers = adm.native.link && adm.native.link.clicktrackers || []; + newBid.native.impressionTrackers = adm.native.imptrackers || []; + newBid.native.jstracker = adm.native.jstracker || []; + newBid.width = 0; + newBid.height = 0; + } + } +} + +function pageInfo() { + var w, d, l, r, m, p, t; + + for (w = window, d = w.document, l = d.location.href, r = d.referrer, m = 0, t = new Date(); w !== w.parent;) { + try { + p = w.parent; + l = p.location.href; + r = p.document.referrer; + w = p; + } catch (e) { + m = top !== w.parent ? 2 : 1; + break; + } + } + + return { + location: l, + referrer: r || '', + masked: m, + wWidth: w.innerWidth, + wHeight: w.innerHeight, + date: t.toUTCString(), + timeOffset: t.getTimezoneOffset() + }; +} + +/***/ }) + +},[529]); \ No newline at end of file diff --git a/build/dist/microadBidAdapter.js b/build/dist/microadBidAdapter.js new file mode 100644 index 00000000000..88b1e0e6374 --- /dev/null +++ b/build/dist/microadBidAdapter.js @@ -0,0 +1,172 @@ +pbjsChunk([170],{ + +/***/ 531: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(532); + + +/***/ }), + +/***/ 532: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ENVIRONMENT", function() { return ENVIRONMENT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); + + +var BIDDER_CODE = 'microad'; +var ENDPOINT_URLS = { + 'production': 'https://s-rtb-pb.send.microad.jp/prebid', + 'test': 'https://rtbtest.send.microad.jp/prebid' +}; +var ENVIRONMENT = 'production'; +/* eslint-disable no-template-curly-in-string */ + +var EXT_URL_STRING = '${COMPASS_EXT_URL}'; +var EXT_REF_STRING = '${COMPASS_EXT_REF}'; +var EXT_IFA_STRING = '${COMPASS_EXT_IFA}'; +var EXT_APPID_STRING = '${COMPASS_EXT_APPID}'; +var EXT_GEO_STRING = '${COMPASS_EXT_GEO}'; +/* eslint-enable no-template-curly-in-string */ + +var BANNER_CODE = 1; +var NATIVE_CODE = 2; +var VIDEO_CODE = 4; + +function createCBT() { + var randomValue = Math.floor(Math.random() * Math.pow(10, 18)).toString(16); + var date = new Date().getTime().toString(16); + return randomValue + date; +} + +function createBitSequenceFromMediaType(hi, code) { + return (hi ? -1 : 0) & code; +} + +function convertMediaTypes(bid) { + return createBitSequenceFromMediaType(bid.mediaTypes.banner, BANNER_CODE) | createBitSequenceFromMediaType(bid.mediaTypes.native, NATIVE_CODE) | createBitSequenceFromMediaType(bid.mediaTypes.video, VIDEO_CODE); +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.spot && bid.mediaTypes && (bid.mediaTypes.banner || bid.mediaTypes.native || bid.mediaTypes.video)); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var requests = []; + validBidRequests.forEach(function (bid) { + var bidParams = bid.params; + var params = { + spot: bidParams.spot, + url: bidderRequest.refererInfo.canonicalUrl || window.location.href, + referrer: bidderRequest.refererInfo.referer, + bid_id: bid.bidId, + transaction_id: bid.transactionId, + media_types: convertMediaTypes(bid), + cbt: createCBT() + }; + + if (bidParams.url) { + params['url_macro'] = bidParams.url.replace(EXT_URL_STRING, ''); + } + + if (bidParams.referrer) { + params['referrer_macro'] = bidParams.referrer.replace(EXT_REF_STRING, ''); + } + + if (bidParams.ifa) { + params['ifa'] = bidParams.ifa.replace(EXT_IFA_STRING, ''); + } + + if (bidParams.appid) { + params['appid'] = bidParams.appid.replace(EXT_APPID_STRING, ''); + } + + if (bidParams.geo) { + var geo = bidParams.geo.replace(EXT_GEO_STRING, ''); + + if (/^[0-9.\-]+,[0-9.\-]+$/.test(geo)) { + params['geo'] = geo; + } + } + + requests.push({ + method: 'GET', + url: ENDPOINT_URLS[ENVIRONMENT], + data: params, + options: { + Accept: 'application/json' + } + }); + }); + return requests; + }, + interpretResponse: function interpretResponse(serverResponse) { + var body = serverResponse.body; + var bidResponses = []; + + if (body.cpm && body.cpm > 0) { + var bidResponse = { + requestId: body.requestId, + cpm: body.cpm, + width: body.width, + height: body.height, + ad: body.ad, + ttl: body.ttl, + creativeId: body.creativeId, + netRevenue: body.netRevenue, + currency: body.currency + }; + + if (body.dealId) { + bidResponse['dealId'] = body.dealId; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (!syncOptions.iframeEnabled && !syncOptions.pixelEnabled) { + return syncs; + } + + serverResponses.forEach(function (resp) { + var syncIframeUrls = resp.body.syncUrls.iframe; + var syncImageUrls = resp.body.syncUrls.image; + + if (syncOptions.iframeEnabled && syncIframeUrls) { + syncIframeUrls.forEach(function (syncIframeUrl) { + syncs.push({ + type: 'iframe', + url: syncIframeUrl + }); + }); + } + + if (syncOptions.pixelEnabled && syncImageUrls) { + syncImageUrls.forEach(function (syncImageUrl) { + syncs.push({ + type: 'image', + url: syncImageUrl + }); + }); + } + }); + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[531]); \ No newline at end of file diff --git a/build/dist/mobfoxBidAdapter.js b/build/dist/mobfoxBidAdapter.js new file mode 100644 index 00000000000..8a3110744fe --- /dev/null +++ b/build/dist/mobfoxBidAdapter.js @@ -0,0 +1,183 @@ +pbjsChunk([169],{ + +/***/ 533: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(534); + + +/***/ }), + +/***/ 534: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __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 = { + 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 ".concat(BIDDER_CODE, " adapter"); + + if (serverResponseBody && serverResponseBody.error) { + errorMessage += ": ".concat(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 "".concat(key, "=").concat(params[key]); + }).join('&'); +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[533]); \ No newline at end of file diff --git a/build/dist/mobsmartBidAdapter.js b/build/dist/mobsmartBidAdapter.js new file mode 100644 index 00000000000..bc9560c31cb --- /dev/null +++ b/build/dist/mobsmartBidAdapter.js @@ -0,0 +1,116 @@ +pbjsChunk([168],{ + +/***/ 535: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(536); + + +/***/ }), + +/***/ 536: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); + + +var BIDDER_CODE = 'mobsmart'; +var ENDPOINT = 'https://prebid.mobsmart.net/prebid/endpoint'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + if (bid.bidder !== BIDDER_CODE) { + return false; + } + + return true; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var timeout = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('bidderTimeout'); + var referrer = encodeURIComponent(bidderRequest.refererInfo.referer); + return validBidRequests.map(function (bidRequest) { + var adUnit = { + code: bidRequest.adUnitCode, + bids: { + bidder: bidRequest.bidder, + params: bidRequest.params + }, + mediaTypes: bidRequest.mediaTypes + }; + + if (bidRequest.hasOwnProperty('sizes') && bidRequest.sizes.length > 0) { + adUnit.sizes = bidRequest.sizes; + } + + var request = { + auctionId: bidRequest.auctionId, + requestId: bidRequest.bidId, + bidRequestsCount: bidRequest.bidRequestsCount, + bidderRequestId: bidRequest.bidderRequestId, + transactionId: bidRequest.transactionId, + referrer: referrer, + timeout: timeout, + adUnit: adUnit + }; + + if (bidRequest.userId && bidRequest.userId.pubcid) { + request.userId = { + pubcid: bidRequest.userId.pubcid + }; + } + + return { + method: 'POST', + url: ENDPOINT, + data: JSON.stringify(request) + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse) { + var bidResponses = []; + + if (serverResponse.body) { + var response = serverResponse.body; + var bidResponse = { + requestId: response.requestId, + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.creativeId, + currency: response.currency, + netRevenue: response.netRevenue, + ttl: response.ttl, + ad: response.ad + }; + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: 'https://tags.mobsmart.net/tags/iframe' + }); + } else if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: 'https://tags.mobsmart.net/tags/image' + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[535]); \ No newline at end of file diff --git a/build/dist/my6senseBidAdapter.js b/build/dist/my6senseBidAdapter.js new file mode 100644 index 00000000000..1dfa62e2d85 --- /dev/null +++ b/build/dist/my6senseBidAdapter.js @@ -0,0 +1,218 @@ +pbjsChunk([167],{ + +/***/ 537: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(538); + + +/***/ }), + +/***/ 538: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__ = __webpack_require__(2); + + +var _require = __webpack_require__(1), + registerBidder = _require.registerBidder; + +var BIDDER_CODE = 'my6sense'; +var END_POINT = 'https://hb.mynativeplatform.com/pub2/web/v1.15.0/hbwidget.json'; +var END_POINT_METHOD = 'POST'; // called first + +function isBidRequestValid(bid) { + return !(bid.bidder !== BIDDER_CODE || !bid.params || !bid.params.key); +} + +function getUrl(url) { + if (!url) { + url = window.location.href; // "clean" url of current web page + } + + var canonicalLink = null; // first look for meta data with property "og:url" + + var metaElements = document.getElementsByTagName('meta'); + + for (var i = 0; i < metaElements.length && !canonicalLink; i++) { + if (metaElements[i].getAttribute('property') == 'og:url') { + canonicalLink = metaElements[i].content; + } + } + + if (!canonicalLink) { + var canonicalLinkContainer = document.querySelector("link[rel='canonical']"); // html element containing the canonical link + + if (canonicalLinkContainer) { + // get clean url from href of + canonicalLink = canonicalLinkContainer.href; + } + } + + url = canonicalLink || url; + return encodeURIComponent(url).toString(); +} +/** + * this function is used to fix param value before sending them to server, if user did not set it, + * default value for parameter will be returned + * example1: paidClicks: '[PAID_TRACKING_PIXEL]', will return {value: '', fromUser: false} + * example2: pageURL: 'www.my6sense.com', will return {value: 'www.my6sense.com', fromUser: true} + * @param key + * @param value + * @returns {{value: *, fromUser: boolean}} + */ + + +function fixRequestParamForServer(key, value) { + function isEmptyValue(key, value) { + return value === parametersMap[key].emptyValue; + } + + var parametersMap = { + 'pageUrl': { + emptyValue: '[PAGE_URL]', + defaultValue: getUrl() + }, + 'displayWithinIframe': { + emptyValue: '', + defaultValue: '' + }, + 'dataParams': { + emptyValue: '[KEY_VALUES]', + defaultValue: '' + }, + 'paidClicks': { + emptyValue: '[PAID_TRACKING_PIXEL]', + defaultValue: '' + }, + 'organicClicks': { + emptyValue: '[ORGANIC_TRACKING_PIXEL]', + defaultValue: '' + }, + 'dataView': { + emptyValue: '[VIEW_TRACKING_PIXEL]', + defaultValue: '' + } // ZONE is not part of this object, handled on server side + + }; // if param is not in list we do not change it (return it as is) + + if (!parametersMap.hasOwnProperty(key)) { + return { + value: value, + fromUser: true + }; + } // if no value given by user set it to default + + + if (!value || isEmptyValue(key, value)) { + return { + value: parametersMap[key].defaultValue, + fromUser: false + }; + } + + return { + value: value, + fromUser: true + }; +} // called second + + +function buildGdprServerProperty(bidderRequest) { + var gdprObj = { + gdpr_consent: null, + gdpr: null + }; + + if (bidderRequest && 'gdprConsent' in bidderRequest) { + gdprObj.gdpr_consent = bidderRequest.gdprConsent.consentString || null; + gdprObj.gdpr = gdprObj.gdpr === null && bidderRequest.gdprConsent.gdprApplies == true ? true : gdprObj.gdpr; + gdprObj.gdpr = gdprObj.gdpr === null && bidderRequest.gdprConsent.gdprApplies == false ? false : gdprObj.gdpr; + gdprObj.gdpr = gdprObj.gdpr === null && bidderRequest.gdprConsent.gdprApplies == 1 ? true : gdprObj.gdpr; + gdprObj.gdpr = gdprObj.gdpr === null && bidderRequest.gdprConsent.gdprApplies == 0 ? false : gdprObj.gdpr; + } + + return gdprObj; +} + +function buildRequests(validBidRequests, bidderRequest) { + var requests = []; + + if (validBidRequests && validBidRequests.length) { + validBidRequests.forEach(function (bidRequest) { + bidRequest.widget_num = 1; // mandatory property for server side + + var isDataUrlSetByUser = false; + var debug = false; + + if (bidRequest.params) { + for (var key in bidRequest.params) { + // loop over params and remove empty/untouched values + if (bidRequest.params.hasOwnProperty(key)) { + // if debug we update url string to get core debug version + if (key === 'debug' && bidRequest.params[key] === true) { + debug = true; + delete bidRequest.params[key]; + continue; + } + + var fixedObj = fixRequestParamForServer(key, bidRequest.params[key]); + bidRequest.params[key] = fixedObj.value; // if pageUrl is set by user we should update variable for query string param + + if (key === 'pageUrl' && fixedObj.fromUser === true) { + isDataUrlSetByUser = true; + } // remove empty params from request + + + if (!bidRequest.params[key]) { + delete bidRequest.params[key]; + } + } + } + } + + var url = "".concat(END_POINT, "?widget_key=").concat(bidRequest.params.key, "&is_data_url_set=").concat(isDataUrlSetByUser); // mandatory query string for server side + + if (debug) { + url = "".concat(END_POINT, "?env=debug&widget_key=").concat(bidRequest.params.key, "&is_data_url_set=").concat(isDataUrlSetByUser); // this url is for debugging + } + + bidRequest.gdpr = buildGdprServerProperty(bidderRequest); + requests.push({ + url: url, + method: END_POINT_METHOD, + data: JSON.stringify(bidRequest) + }); + }); + } + + return requests; +} // called third + + +function interpretResponse(serverResponse) { + var bidResponses = []; // currently server returns a single response which is the body property + + if (serverResponse.body) { + serverResponse.body.bidderCode = BIDDER_CODE; + bidResponses.push(serverResponse.body); + } + + return bidResponses; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse +}; +registerBidder(spec); + +/***/ }) + +},[537]); \ No newline at end of file diff --git a/build/dist/mytargetBidAdapter.js b/build/dist/mytargetBidAdapter.js new file mode 100644 index 00000000000..b42bb38300d --- /dev/null +++ b/build/dist/mytargetBidAdapter.js @@ -0,0 +1,133 @@ +pbjsChunk([166],{ + +/***/ 539: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(540); + + +/***/ }), + +/***/ 540: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + +var BIDDER_CODE = 'mytarget'; +var BIDDER_URL = 'https://ad.mail.ru/hbid_prebid/'; +var DEFAULT_CURRENCY = 'RUB'; +var DEFAULT_TTL = 180; + +function buildPlacement(bidRequest) { + var bidId = bidRequest.bidId, + params = bidRequest.params; + var placementId = params.placementId, + position = params.position, + response = params.response, + bidfloor = params.bidfloor; + var placement = { + placementId: placementId, + id: bidId, + position: position || 0, + response: response || 0 + }; + + if (typeof bidfloor !== 'undefined') { + placement.bidfloor = bidfloor; + } + + return placement; +} + +function getSiteName(referrer) { + var sitename = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('mytarget.sitename'); + + if (!sitename) { + sitename = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](referrer).hostname; + } + + return sitename; +} + +function getCurrency() { + var currency = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); + return currency === 'USD' ? currency : DEFAULT_CURRENCY; +} + +function generateRandomId() { + return Math.random().toString(16).substring(2); +} + +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placementId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var referrer = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + referrer = bidderRequest.refererInfo.referer; + } + + var payload = { + places: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](validBidRequests, buildPlacement), + site: { + sitename: getSiteName(referrer), + page: referrer + }, + settings: { + currency: getCurrency(), + windowSize: { + width: window.screen.width, + height: window.screen.height + } + } + }; + return { + method: 'POST', + url: BIDDER_URL, + data: payload + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var body = serverResponse.body; + + if (body.bids) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](body.bids, function (bid) { + var bidResponse = { + requestId: bid.id, + cpm: bid.price, + width: bid.size.width, + height: bid.size.height, + ttl: bid.ttl || DEFAULT_TTL, + currency: bid.currency || DEFAULT_CURRENCY, + creativeId: bid.creativeId || generateRandomId(), + netRevenue: true + }; + + if (bid.adm) { + bidResponse.ad = bid.adm; + } else { + bidResponse.adUrl = bid.displayUrl; + } + + return bidResponse; + }); + } + + return []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[539]); \ No newline at end of file diff --git a/build/dist/nafdigitalBidAdapter.js b/build/dist/nafdigitalBidAdapter.js new file mode 100644 index 00000000000..9dea40a0fb7 --- /dev/null +++ b/build/dist/nafdigitalBidAdapter.js @@ -0,0 +1,321 @@ +pbjsChunk([165],{ + +/***/ 541: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(542); + + +/***/ }), + +/***/ 542: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'nafdigital'; +var URL = 'https://nafdigitalbidder.com/hb'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs +}; + +function buildRequests(bidReqs, bidderRequest) { + try { + var referrer = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + referrer = bidderRequest.refererInfo.referer; + } + + var nafdigitalImps = []; + var publisherId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('publisherId', bidReqs[0].params); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidReqs, function (bid) { + bid.sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.sizes) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.sizes[0]) ? bid.sizes : [bid.sizes]; + bid.sizes = bid.sizes.filter(function (size) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size); + }); + var processedSizes = bid.sizes.map(function (size) { + return { + w: parseInt(size[0], 10), + h: parseInt(size[1], 10) + }; + }); + var element = document.getElementById(bid.adUnitCode); + + var minSize = _getMinSize(processedSizes); + + var viewabilityAmount = _isViewabilityMeasurable(element) ? _getViewability(element, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](), minSize) : 'na'; + var viewabilityAmountRounded = isNaN(viewabilityAmount) ? viewabilityAmount : Math.round(viewabilityAmount); + var imp = { + id: bid.bidId, + banner: { + format: processedSizes, + ext: { + viewability: viewabilityAmountRounded + } + }, + tagid: String(bid.adUnitCode) + }; + var bidFloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidFloor', bid.params); + + if (bidFloor) { + imp.bidfloor = bidFloor; + } + + nafdigitalImps.push(imp); + }); + + var nafdigitalBidReq = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: nafdigitalImps, + site: { + domain: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](referrer).host, + page: referrer, + publisher: { + id: publisherId + } + }, + device: { + devicetype: _getDeviceType(), + w: screen.width, + h: screen.height + }, + tmax: __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; + return { + method: 'POST', + url: URL, + data: JSON.stringify(nafdigitalBidReq), + options: { + contentType: 'text/plain', + withCredentials: false + } + }; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e, { + bidReqs: bidReqs, + bidderRequest: bidderRequest + }); + } +} + +function isBidRequestValid(bid) { + if (bid.bidder !== BIDDER_CODE || typeof bid.params === 'undefined') { + return false; + } + + if (typeof bid.params.publisherId === 'undefined') { + return false; + } + + return true; +} + +function interpretResponse(serverResponse) { + if (!serverResponse.body || _typeof(serverResponse.body) != 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('NAF digital server returned empty/non-json response: ' + JSON.stringify(serverResponse.body)); + return []; + } + + var _serverResponse$body = serverResponse.body, + id = _serverResponse$body.id, + seatbid = _serverResponse$body.seatbid; + + try { + var nafdigitalBidResponses = []; + + if (id && seatbid && seatbid.length > 0 && seatbid[0].bid && seatbid[0].bid.length > 0) { + seatbid[0].bid.map(function (nafdigitalBid) { + nafdigitalBidResponses.push({ + requestId: nafdigitalBid.impid, + cpm: parseFloat(nafdigitalBid.price), + width: parseInt(nafdigitalBid.w), + height: parseInt(nafdigitalBid.h), + creativeId: nafdigitalBid.crid || nafdigitalBid.id, + currency: 'USD', + netRevenue: true, + mediaType: __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], + ad: _getAdMarkup(nafdigitalBid), + ttl: 60 + }); + }); + } + + return nafdigitalBidResponses; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e, { + id: id, + seatbid: seatbid + }); + } +} // Don't do user sync for now + + +function getUserSyncs(syncOptions, responses, gdprConsent) { + return []; +} + +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 _getDeviceType() { + return _isMobile() ? 1 : _isConnectedTV() ? 3 : 2; +} + +function _getAdMarkup(bid) { + var adm = bid.adm; + + if ('nurl' in bid) { + adm += __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"](bid.nurl); + } + + return adm; +} + +function _isViewabilityMeasurable(element) { + return !_isIframe() && element !== null; +} + +function _getViewability(element, topWin) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref.w, + h = _ref.h; + + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().document.visibilityState === 'visible' ? _getPercentInView(element, topWin, { + w: w, + h: h + }) : 0; +} + +function _isIframe() { + try { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowSelf"]() !== __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](); + } catch (e) { + return true; + } +} + +function _getMinSize(sizes) { + return sizes.reduce(function (min, size) { + return size.h * size.w < min.h * min.w ? size : min; + }); +} + +function _getBoundingBox(element) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + w = _ref2.w, + h = _ref2.h; + + var _element$getBoundingC = element.getBoundingClientRect(), + width = _element$getBoundingC.width, + height = _element$getBoundingC.height, + left = _element$getBoundingC.left, + top = _element$getBoundingC.top, + right = _element$getBoundingC.right, + bottom = _element$getBoundingC.bottom; + + if ((width === 0 || height === 0) && w && h) { + width = w; + height = h; + right = left + w; + bottom = top + h; + } + + return { + width: width, + height: height, + left: left, + top: top, + right: right, + bottom: bottom + }; +} + +function _getIntersectionOfRects(rects) { + var bbox = { + left: rects[0].left, + right: rects[0].right, + top: rects[0].top, + bottom: rects[0].bottom + }; + + for (var i = 1; i < rects.length; ++i) { + bbox.left = Math.max(bbox.left, rects[i].left); + bbox.right = Math.min(bbox.right, rects[i].right); + + if (bbox.left >= bbox.right) { + return null; + } + + bbox.top = Math.max(bbox.top, rects[i].top); + bbox.bottom = Math.min(bbox.bottom, rects[i].bottom); + + if (bbox.top >= bbox.bottom) { + return null; + } + } + + bbox.width = bbox.right - bbox.left; + bbox.height = bbox.bottom - bbox.top; + return bbox; +} + +function _getPercentInView(element, topWin) { + var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref3.w, + h = _ref3.h; + + var elementBoundingBox = _getBoundingBox(element, { + w: w, + h: h + }); // Obtain the intersection of the element and the viewport + + + var elementInViewBoundingBox = _getIntersectionOfRects([{ + left: 0, + top: 0, + right: topWin.innerWidth, + bottom: topWin.innerHeight + }, elementBoundingBox]); + + var elementInViewArea, elementTotalArea; + + if (elementInViewBoundingBox !== null) { + // Some or all of the element is in view + elementInViewArea = elementInViewBoundingBox.width * elementInViewBoundingBox.height; + elementTotalArea = elementBoundingBox.width * elementBoundingBox.height; + return elementInViewArea / elementTotalArea * 100; + } // No overlap between element and the viewport; therefore, the element + // lies completely out of view + + + return 0; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[541]); \ No newline at end of file diff --git a/build/dist/nanointeractiveBidAdapter.js b/build/dist/nanointeractiveBidAdapter.js new file mode 100644 index 00000000000..78a9fc56555 --- /dev/null +++ b/build/dist/nanointeractiveBidAdapter.js @@ -0,0 +1,181 @@ +pbjsChunk([164],{ + +/***/ 543: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(544); + + +/***/ }), + +/***/ 544: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BIDDER_CODE", function() { return BIDDER_CODE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "END_POINT_URL", function() { return END_POINT_URL; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SSP_PLACEMENT_ID", function() { return SSP_PLACEMENT_ID; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NQ", function() { return NQ; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NQ_NAME", function() { return NQ_NAME; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CATEGORY", function() { return CATEGORY; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CATEGORY_NAME", function() { return CATEGORY_NAME; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SUB_ID", function() { return SUB_ID; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "REF", function() { return REF; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LOCATION", function() { return LOCATION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); +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 storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'nanointeractive'; +var END_POINT_URL = 'https://ad.audiencemanager.de'; +var SSP_PLACEMENT_ID = 'pid'; +var NQ = 'nq'; +var NQ_NAME = 'name'; +var CATEGORY = 'category'; +var CATEGORY_NAME = 'categoryName'; +var SUB_ID = 'subId'; +var REF = 'ref'; +var LOCATION = 'loc'; +var nanoPid = '5a1ec660eb0a191dfa591172'; +var spec = { + code: BIDDER_CODE, + aliases: ['ni'], + isBidRequestValid: function isBidRequestValid(bid) { + var pid = bid.params[SSP_PLACEMENT_ID]; + return !!pid; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var payload = []; + validBidRequests.forEach(function (bid) { + return payload.push(createSingleBidRequest(bid, bidderRequest)); + }); + var url = getEndpointUrl() + '/hb'; + return { + method: 'POST', + url: 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; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: getEndpointUrl() + '/hb/cookieSync/' + nanoPid + }); + } + + if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: getEndpointUrl() + '/hb/cookieSync/' + nanoPid + }); + } + + return syncs; + } +}; + +function createSingleBidRequest(bid, bidderRequest) { + var _data; + + var location = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.referer'); + var origin = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getOrigin"](); + nanoPid = bid.params[SSP_PLACEMENT_ID] || nanoPid; + var data = (_data = {}, _defineProperty(_data, SSP_PLACEMENT_ID, bid.params[SSP_PLACEMENT_ID]), _defineProperty(_data, NQ, [createNqParam(bid)]), _defineProperty(_data, CATEGORY, [createCategoryParam(bid)]), _defineProperty(_data, SUB_ID, createSubIdParam(bid)), _defineProperty(_data, REF, createRefParam()), _defineProperty(_data, "sizes", bid.sizes.map(function (value) { + return value[0] + 'x' + value[1]; + })), _defineProperty(_data, "bidId", bid.bidId), _defineProperty(_data, "cors", origin), _defineProperty(_data, LOCATION, location), _defineProperty(_data, "lsUserId", getLsUserId()), _data); + + if (bidderRequest && bidderRequest.gdprConsent) { + data['gdprConsent'] = bidderRequest.gdprConsent.consentString; + data['gdprApplies'] = bidderRequest.gdprConsent.gdprApplies ? '1' : '0'; + } + + return data; +} + +function createSingleBidResponse(serverBid) { + if (serverBid.userId) { + storage.setDataInLocalStorage('lsUserId', serverBid.userId); + } + + 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] ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getParameterByName"](bid.params[NQ_NAME]) : bid.params[NQ] || null; +} + +function createCategoryParam(bid) { + return bid.params[CATEGORY_NAME] ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getParameterByName"](bid.params[CATEGORY_NAME]) : bid.params[CATEGORY] || null; +} + +function createSubIdParam(bid) { + return bid.params[SUB_ID] || null; +} + +function createRefParam() { + try { + return window.top.document.referrer; + } catch (ex) { + return document.referrer; + } +} + +function isEngineResponseValid(response) { + return !!response.cpm && !!response.ad; +} +/** + * Used mainly for debugging + * + * @returns string + */ + + +function getEndpointUrl() { + var nanoConfig = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('nano'); + return nanoConfig && nanoConfig['endpointUrl'] || END_POINT_URL; +} + +function getLsUserId() { + if (storage.getDataFromLocalStorage('lsUserId') != null) { + return storage.getDataFromLocalStorage('lsUserId'); + } + + return null; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[543]); \ No newline at end of file diff --git a/build/dist/nasmediaAdmixerBidAdapter.js b/build/dist/nasmediaAdmixerBidAdapter.js new file mode 100644 index 00000000000..0e5e6daafce --- /dev/null +++ b/build/dist/nasmediaAdmixerBidAdapter.js @@ -0,0 +1,99 @@ +pbjsChunk([163],{ + +/***/ 545: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(546); + + +/***/ }), + +/***/ 546: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); + + +var ADMIXER_ENDPOINT = 'https://adn.admixer.co.kr:10443/prebid/ad_req'; +var BIDDER_CODE = 'nasmediaAdmixer'; +var DEFAULT_BID_TTL = 360; +var DEFAULT_CURRENCY = 'USD'; +var DEFAULT_REVENUE = false; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.media_key && bid.params.adunit_id); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bid) { + var payload = { + media_key: bid.params.media_key, + adunit_id: bid.params.adunit_id, + req_id: bid.bidId, + referrer: bidderRequest.refererInfo.referer, + os: getOs(), + platform: getPlatform() + }; + return { + method: 'GET', + url: ADMIXER_ENDPOINT, + data: payload + }; + }); + }, + 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 getOs() { + var ua = navigator.userAgent; + + if (ua.match(/(iPhone|iPod|iPad)/)) { + return 'ios'; + } else if (ua.match(/Android/)) { + return 'android'; + } else if (ua.match(/Window/)) { + return 'windows'; + } else { + return 'etc'; + } +} + +function getPlatform() { + return isMobile() ? 'm_web' : 'pc_web'; +} + +function isMobile() { + return /(ios|ipod|ipad|iphone|android)/i.test(navigator.userAgent.toLowerCase()); +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[545]); \ No newline at end of file diff --git a/build/dist/netIdSystem.js b/build/dist/netIdSystem.js new file mode 100644 index 00000000000..b3e34ef8763 --- /dev/null +++ b/build/dist/netIdSystem.js @@ -0,0 +1,63 @@ +pbjsChunk([162],{ + +/***/ 547: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(548); + + +/***/ }), + +/***/ 548: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "netIdSubmodule", function() { return netIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_hook_js__ = __webpack_require__(13); +/** + * This module adds netId to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/netIdSystem + * @requires module:modules/userId + */ + +/** @type {Submodule} */ + +var netIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: 'netId', + + /** + * decode the stored id value for passing to bid requests + * @function decode + * @param {(Object|string)} value + * @returns {(Object|undefined)} + */ + decode: function decode(value) { + return value && typeof value['netId'] === 'string' ? { + 'netId': value['netId'] + } : undefined; + }, + + /** + * performs action to obtain id and return a value in the callback's response argument + * @function + * @param {SubmoduleParams} [configParams] + * @param {ConsentData} [consentData] + * @param {(Object|undefined)} cacheIdObj + * @returns {IdResponse|undefined} + */ + getId: function getId(configParams) { + /* currently not possible */ + return {}; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_hook_js__["e" /* submodule */])('userId', netIdSubmodule); + +/***/ }) + +},[547]); \ No newline at end of file diff --git a/build/dist/newborntownWebBidAdapter.js b/build/dist/newborntownWebBidAdapter.js new file mode 100644 index 00000000000..12d4715211b --- /dev/null +++ b/build/dist/newborntownWebBidAdapter.js @@ -0,0 +1,198 @@ +pbjsChunk([161],{ + +/***/ 549: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(550); + + +/***/ }), + +/***/ 550: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'newborntownWeb'; +var REQUEST_URL = 'https://us-west.solortb.com/adx/api/rtb?from=4'; + +function randomn(n) { + return parseInt((Math.random() + 1) * Math.pow(10, n - 1)) + ''; +} + +function generateGUID() { + var d = new Date().getTime(); + var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c == 'x' ? r : r & 0x3 | 0x8).toString(16); + }); + return guid; +} + +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 _getDeviceType() { + return _isMobile() ? 1 : _isConnectedTV() ? 3 : 2; +} + +var platform = function getPlatform() { + var ua = navigator.userAgent; + + if (ua.indexOf('Android') > -1 || ua.indexOf('Adr') > -1) { + return 'Android'; + } + + if (ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) { + return 'iOS'; + } + + return 'windows'; +}(); + +function getLanguage() { + var language = navigator.language ? 'language' : 'userLanguage'; + return navigator[language].split('-')[0]; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.publisher_id && bid.params.slot_id && bid.params.bidfloor); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var requestArr = []; + + if (validBidRequests.length === 0) { + return null; + } + + var guid; + + if (storage.getDataFromLocalStorage('sax_user_id') == null) { + storage.setDataInLocalStorage('sax_user_id', generateGUID()); + } + + guid = storage.getDataFromLocalStorage('sax_user_id'); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bidRequest) { + var bidRequestObj = bidRequest.params; + var req = { + id: randomn(12) + randomn(12), + tmax: bidderRequest.timeout, + bidId: bidRequest.bidId, + user: { + id: guid + }, + imp: [{ + id: '1', + bidfloor: bidRequestObj.bidfloor, + bidfloorcur: 'USD', + banner: { + w: 0, + h: 0 + } + }], + site: { + domain: window.location.host, + id: bidRequestObj.slot_id, + page: window.location.href, + publisher: { + id: bidRequestObj.publisher_id + } + }, + device: { + ip: '', + ua: navigator.userAgent, + os: platform, + geo: { + country: '', + type: 0, + ipservice: 1, + region: '', + city: '' + }, + language: getLanguage(), + devicetype: _getDeviceType() + }, + ext: { + solomath: { + slotid: bidRequestObj.slot_id + } + } + }; + var sizes = bidRequest.sizes; + + if (sizes) { + if (sizes && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes[0])) { + req.imp[0].banner.w = sizes[0][0]; + req.imp[0].banner.h = sizes[0][1]; + } else if (sizes && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](sizes[0])) { + req.imp[0].banner.w = sizes[0]; + req.imp[0].banner.h = sizes[1]; + } + } else { + return false; + } + + var options = { + withCredentials: false + }; + requestArr.push({ + method: 'POST', + url: REQUEST_URL, + data: req, + bidderRequest: bidderRequest, + options: options + }); + }); + + return requestArr; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidResponses = []; + + if (serverResponse.body.seatbid && serverResponse.body.seatbid.length > 0 && serverResponse.body.seatbid[0].bid && serverResponse.body.seatbid[0].bid.length > 0 && serverResponse.body.seatbid[0].bid[0].adm) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponse.body.seatbid[0].bid, function (bodyAds) { + var adstr = ''; + adstr = bodyAds.adm; + var bidResponse = { + requestId: request.data.bidId || 0, + cpm: bodyAds.price || 0, + width: bodyAds.w ? bodyAds.w : 0, + height: bodyAds.h ? bodyAds.h : 0, + ad: adstr, + netRevenue: true, + currency: serverResponse.body.cur || 'USD', + ttl: 600, + creativeId: bodyAds.cid + }; + bidResponses.push(bidResponse); + }); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[549]); \ No newline at end of file diff --git a/build/dist/nextMillenniumBidAdapter.js b/build/dist/nextMillenniumBidAdapter.js new file mode 100644 index 00000000000..f5e0ffda2fd --- /dev/null +++ b/build/dist/nextMillenniumBidAdapter.js @@ -0,0 +1,102 @@ +pbjsChunk([160],{ + +/***/ 551: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(552); + + +/***/ }), + +/***/ 552: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'nextMillennium'; +var HOST = 'https://brainlyads.com'; +var CURRENCY = 'USD'; +var TIME_TO_LIVE = 360; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.placement_id && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.params.placement_id)); + }, + buildRequests: function buildRequests(validBidRequests) { + var requests = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + requests.push({ + method: 'POST', + url: HOST + '/hb/s2s', + options: { + contentType: 'application/json', + withCredentials: true + }, + data: JSON.stringify({ + placement_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('placement_id', bid.params) + }), + bidId: bid.bidId + }); + }); + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + try { + var bidResponse = serverResponse.body; + var bidResponses = []; + + if (Number(bidResponse.cpm) > 0) { + bidResponses.push({ + requestId: bidRequest.bidId, + cpm: bidResponse.cpm, + width: bidResponse.width, + height: bidResponse.height, + creativeId: bidResponse.creativeId, + currency: CURRENCY, + netRevenue: false, + ttl: TIME_TO_LIVE, + ad: bidResponse.ad + }); + } + + return bidResponses; + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](err); + return []; + } + }, + getUserSyncs: function getUserSyncs(syncOptions) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: HOST + '/hb/s2s/matching' + }); + } + + if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: HOST + '/hb/s2s/matching' + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[551]); \ No newline at end of file diff --git a/build/dist/nextrollBidAdapter.js b/build/dist/nextrollBidAdapter.js new file mode 100644 index 00000000000..c91fd52c65b --- /dev/null +++ b/build/dist/nextrollBidAdapter.js @@ -0,0 +1,439 @@ +pbjsChunk([159],{ + +/***/ 553: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(554); + + +/***/ }), + +/***/ 554: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +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 = 'nextroll'; +var BIDDER_ENDPOINT = 'https://d.adroll.com/bid/prebid/'; +var ADAPTER_VERSION = 5; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* 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(bidRequest) { + return bidRequest !== undefined && !!bidRequest.params && !!bidRequest.bidId; + }, + + /** + * 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 topLocation = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.referer')); + return validBidRequests.map(function (bidRequest) { + return { + method: 'POST', + options: { + withCredentials: true + }, + url: BIDDER_ENDPOINT, + data: { + id: bidRequest.bidId, + imp: { + id: bidRequest.bidId, + bidfloor: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidfloor', bidRequest.params), + banner: _getBanner(bidRequest), + native: _getNative(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.native')), + ext: { + zone: { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('zoneId', bidRequest.params) + }, + nextroll: { + adapter_version: ADAPTER_VERSION + } + } + }, + user: _getUser(validBidRequests), + site: _getSite(bidRequest, topLocation), + seller: _getSeller(bidRequest), + device: _getDevice(bidRequest), + regs: _getRegs(bidderRequest) + } + }; + }); + }, + + /** + * 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) { + if (!serverResponse.body) { + return []; + } else { + var response = serverResponse.body; + var bids = response.seatbid.reduce(function (acc, seatbid) { + return acc.concat(seatbid.bid); + }, []); + return bids.map(function (bid) { + return _buildResponse(response, bid); + }); + } + } +}; + +function _getBanner(bidRequest) { + var sizes = _getSizes(bidRequest); + + if (sizes === undefined) return undefined; + return { + format: sizes + }; +} + +function _getNative(mediaTypeNative) { + if (mediaTypeNative === undefined) return undefined; + + var assets = _getNativeAssets(mediaTypeNative); + + if (assets === undefined || assets.length == 0) return undefined; + return { + request: { + native: { + assets: assets + } + } + }; +} +/* + id: Unique numeric id for the asset + kind: OpenRTB kind of asset. Supported: title, img and data. + key: Name of property that comes in the mediaType.native object. + type: OpenRTB type for that spefic kind of asset. + required: Overrides the asset required field configured, only overrides when is true. +*/ + + +var NATIVE_ASSET_MAP = [{ + id: 1, + kind: 'title', + key: 'title', + required: true +}, { + id: 2, + kind: 'img', + key: 'image', + type: 3, + required: true +}, { + id: 3, + kind: 'img', + key: 'icon', + type: 1 +}, { + id: 4, + kind: 'img', + key: 'logo', + type: 2 +}, { + id: 5, + kind: 'data', + key: 'sponsoredBy', + type: 1 +}, { + id: 6, + kind: 'data', + key: 'body', + type: 2 +}]; +var ASSET_KIND_MAP = { + title: _getTitleAsset, + img: _getImageAsset, + data: _getDataAsset +}; + +function _getAsset(mediaTypeNative, assetMap) { + var asset = mediaTypeNative[assetMap.key]; + if (asset === undefined) return undefined; + var assetFunc = ASSET_KIND_MAP[assetMap.kind]; + return _defineProperty({ + id: assetMap.id, + required: assetMap.required || !!asset.required ? 1 : 0 + }, assetMap.kind, assetFunc(asset, assetMap)); +} + +function _getTitleAsset(title, _assetMap) { + return { + len: title.len || 0 + }; +} + +function _getMinAspectRatio(aspectRatio, property) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](aspectRatio)) return 1; + var ratio = aspectRatio['ratio_' + property]; + var min = aspectRatio['min_' + property]; + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](ratio)) return ratio; + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](min)) return min; + return 1; +} + +function _getImageAsset(image, assetMap) { + var sizes = image.sizes; + var aspectRatio = image.aspect_ratios ? image.aspect_ratios[0] : undefined; + return { + type: assetMap.type, + w: sizes ? sizes[0] : undefined, + h: sizes ? sizes[1] : undefined, + wmin: _getMinAspectRatio(aspectRatio, 'width'), + hmin: _getMinAspectRatio(aspectRatio, 'height') + }; +} + +function _getDataAsset(data, assetMap) { + return { + type: assetMap.type, + len: data.len || 0 + }; +} + +function _getNativeAssets(mediaTypeNative) { + return NATIVE_ASSET_MAP.map(function (assetMap) { + return _getAsset(mediaTypeNative, assetMap); + }).filter(function (asset) { + return asset !== undefined; + }); +} + +function _getUser(requests) { + var id = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](requests, '0.userId.nextroll'); + + if (id === undefined) { + return; + } + + return { + ext: { + eid: [{ + 'source': 'nextroll', + id: id + }] + } + }; +} + +function _buildResponse(bidResponse, bid) { + var response = { + requestId: bidResponse.id, + cpm: bid.price, + width: bid.w, + height: bid.h, + creativeId: bid.crid, + dealId: bidResponse.dealId, + currency: 'USD', + netRevenue: true, + ttl: 300 + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.adm)) { + response.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + response.ad = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"](bid.adm, bid.price); + } else { + response.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + response.native = _getNativeResponse(bid.adm, bid.price); + } + + return response; +} + +var privacyLink = 'https://info.evidon.com/pub_info/573'; +var privacyIcon = 'https://c.betrad.com/pub/icon1.png'; + +function _getNativeResponse(adm, price) { + var baseResponse = { + clickTrackers: adm.link && adm.link.clicktrackers || [], + jstracker: adm.jstracker || [], + clickUrl: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"](adm.link.url, price), + impressionTrackers: adm.imptrackers.map(function (impTracker) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"](impTracker, price); + }), + privacyLink: privacyLink, + privacyIcon: privacyIcon + }; + return adm.assets.reduce(function (accResponse, asset) { + var assetMaps = NATIVE_ASSET_MAP.filter(function (assetMap) { + return assetMap.id === asset.id && asset[assetMap.kind] !== undefined; + }); + if (assetMaps.length === 0) return accResponse; + var assetMap = assetMaps[0]; + accResponse[assetMap.key] = _getAssetResponse(asset, assetMap); + return accResponse; + }, baseResponse); +} + +function _getAssetResponse(asset, assetMap) { + switch (assetMap.kind) { + case 'title': + return asset.title.text; + + case 'img': + return { + url: asset.img.url, + width: asset.img.w, + height: asset.img.h + }; + + case 'data': + return asset.data.value; + } +} + +function _getSite(bidRequest, topLocation) { + return { + page: topLocation.href, + domain: topLocation.hostname, + publisher: { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('publisherId', bidRequest.params) + } + }; +} + +function _getSeller(bidRequest) { + return { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('sellerId', bidRequest.params) + }; +} + +function _getSizes(bidRequest) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidRequest.sizes)) { + return undefined; + } + + return bidRequest.sizes.filter(_isValidSize).map(function (size) { + return { + w: size[0], + h: size[1] + }; + }); +} + +function _isValidSize(size) { + var isNumber = function isNumber(x) { + return typeof x === 'number'; + }; + + return size.length === 2 && isNumber(size[0]) && isNumber(size[1]); +} + +function _getDevice(_bidRequest) { + return { + ua: navigator.userAgent, + language: navigator['language'], + os: _getOs(navigator.userAgent.toLowerCase()), + osv: _getOsVersion(navigator.userAgent) + }; +} + +function _getRegs(bidderRequest) { + if (!bidderRequest || !bidderRequest.uspConsent) { + return undefined; + } + + return { + ext: { + us_privacy: bidderRequest.uspConsent + } + }; +} + +function _getOs(userAgent) { + var osTable = { + 'android': /android/i, + 'ios': /iphone|ipad/i, + 'mac': /mac/i, + 'linux': /linux/i, + 'windows': /windows/i + }; + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(Object.keys(osTable), function (os) { + if (userAgent.match(osTable[os])) { + return os; + } + }) || 'etc'; +} + +function _getOsVersion(userAgent) { + 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 = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(clientStrings, function (cs) { + return cs.r.test(userAgent); + }); + return cs ? cs.s : 'unknown'; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[553]); \ No newline at end of file diff --git a/build/dist/nobidBidAdapter.js b/build/dist/nobidBidAdapter.js new file mode 100644 index 00000000000..a74bafef34d --- /dev/null +++ b/build/dist/nobidBidAdapter.js @@ -0,0 +1,545 @@ +pbjsChunk([158],{ + +/***/ 555: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(556); + + +/***/ }), + +/***/ 556: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'nobid'; +window.nobidVersion = '1.2.6'; +window.nobid = window.nobid || {}; +window.nobid.bidResponses = window.nobid.bidResponses || {}; +window.nobid.timeoutTotal = 0; +window.nobid.bidWonTotal = 0; +window.nobid.refreshCount = 0; + +function log(msg, obj) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('-NoBid- ' + msg, obj); +} + +function nobidSetCookie(cname, cvalue, hours) { + var d = new Date(); + d.setTime(d.getTime() + hours * 60 * 60 * 1000); + var expires = 'expires=' + d.toUTCString(); + storage.setCookie(cname, cvalue, expires); +} + +function nobidGetCookie(cname) { + return storage.getCookie(cname); +} + +function nobidBuildRequests(bids, bidderRequest) { + var serializeState = function serializeState(divIds, siteId, adunits) { + var filterAdUnitsByIds = function filterAdUnitsByIds(divIds, adUnits) { + var filtered = []; + + if (!divIds || !divIds.length) { + filtered = adUnits; + } else if (adUnits) { + var a = []; + if (!(divIds instanceof Array)) a.push(divIds);else a = divIds; + + for (var i = 0, l = adUnits.length; i < l; i++) { + var adUnit = adUnits[i]; + + if (adUnit && adUnit.d && a.indexOf(adUnit.d) > -1) { + filtered.push(adUnit); + } + } + } + + return filtered; + }; + + var gdprConsent = function gdprConsent(bidderRequest) { + var gdprConsent = {}; + + if (bidderRequest && bidderRequest.gdprConsent) { + gdprConsent = { + consentString: bidderRequest.gdprConsent.consentString, + // will check if the gdprApplies field was populated with a boolean value (ie from page config). If it's undefined, then default to true + consentRequired: typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies : false + }; + } + + return gdprConsent; + }; + + var uspConsent = function uspConsent(bidderRequest) { + var uspConsent = ''; + + if (bidderRequest && bidderRequest.uspConsent) { + uspConsent = bidderRequest.uspConsent; + } + + return uspConsent; + }; + + var schain = function schain(bids) { + if (bids && bids.length > 0) { + return bids[0].schain; + } + + return null; + }; + + var coppa = function coppa() { + if (__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('coppa') === true) { + return { + 'coppa': true + }; + } + + if (bids && bids.length > 0) { + return bids[0].coppa; + } + + return null; + }; + + var topLocation = function topLocation(bidderRequest) { + var ret = ''; + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + ret = bidderRequest.refererInfo.referer; + } else { + ret = window.context && window.context.location && window.context.location.href ? window.context.location.href : document.location.href; + } + + return encodeURIComponent(ret.replace(/\%/g, '')); + }; + + var timestamp = function timestamp() { + var date = new Date(); + + var zp = function zp(val) { + return val <= 9 ? '0' + val : '' + val; + }; + + var d = date.getDate(); + var y = date.getFullYear(); + var m = date.getMonth() + 1; + var h = date.getHours(); + var min = date.getMinutes(); + var s = date.getSeconds(); + return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s); + }; + + var clientDim = function clientDim() { + try { + var width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); + var height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); + return "".concat(width, "x").concat(height); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Could not parse screen dimensions, error details:', e); + } + }; + + var state = {}; + state['sid'] = siteId; + state['l'] = topLocation(bidderRequest); + state['tt'] = encodeURIComponent(document.title); + state['tt'] = state['tt'].replace(/'|;|quot;|39;|&|&|#|\r\n|\r|\n|\t|\f|\%0A|\"|\%22|\%5C|\%23|\%26|\%26|\%09/gm, ''); + state['a'] = filterAdUnitsByIds(divIds, adunits || []); + state['t'] = timestamp(); + state['tz'] = Math.round(new Date().getTimezoneOffset()); + state['r'] = clientDim(); + state['lang'] = navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage; + state['ref'] = document.referrer; + state['gdpr'] = gdprConsent(bidderRequest); + state['usp'] = uspConsent(bidderRequest); + var sch = schain(bids); + if (sch) state['schain'] = sch; + var cop = coppa(); + if (cop) state['coppa'] = cop; + return state; + }; + + function newAdunit(adunitObject, adunits) { + var getAdUnit = function getAdUnit(divid, adunits) { + for (var i = 0; i < adunits.length; i++) { + if (adunits[i].d === divid) { + return adunits[i]; + } + } + + return false; + }; + + var removeByAttrValue = function removeByAttrValue(array, attribute, value) { + for (var i = array.length - 1; i >= 0; i--) { + var entry = array[i]; + + if (entry[attribute] && entry[attribute] === value) { + array.splice(i, 1); + } + } + }; + + var a = getAdUnit(adunitObject.div, adunits) || {}; + + if (adunitObject.account) { + a.s = adunitObject.account; + } + + if (adunitObject.sizes) { + a.z = adunitObject.sizes; + } + + if (adunitObject.div) { + a.d = adunitObject.div; + } + + if (adunitObject.targeting) { + a.g = adunitObject.targeting; + } else { + a.g = {}; + } + + if (adunitObject.div) { + removeByAttrValue(adunits, 'd', adunitObject.div); + } + + if (adunitObject.sizeMapping) { + a.sm = adunitObject.sizeMapping; + } + + if (adunitObject.siteId) { + a.sid = adunitObject.siteId; + } + + if (adunitObject.placementId) { + a.pid = adunitObject.placementId; + } + + if (adunitObject.ad_type) { + a.at = adunitObject.ad_type; + } + + if (adunitObject.params) { + a.params = adunitObject.params; + } + + adunits.push(a); + return adunits; + } + + if (typeof window.nobid.refreshLimit !== 'undefined') { + if (window.nobid.refreshLimit < window.nobid.refreshCount) return false; + } + + var ublock = nobidGetCookie('_ublock'); + + if (ublock) { + log('Request blocked for user. hours: ', ublock); + return false; + } + /* DISCOVER SLOTS */ + + + var divids = []; + var siteId = 0; + var adunits = []; + + for (var i = 0; i < bids.length; i++) { + var bid = bids[i]; + var divid = bid.adUnitCode; + divids.push(divid); + var sizes = bid.sizes; + siteId = typeof bid.params['siteId'] != 'undefined' && bid.params['siteId'] ? bid.params['siteId'] : siteId; + var placementId = bid.params['placementId']; + var adType = 'banner'; + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */] || videoMediaType && (context === 'instream' || context === 'outstream')) { + adType = 'video'; + } + + if (siteId) { + newAdunit({ + div: divid, + sizes: sizes, + siteId: siteId, + placementId: placementId, + ad_type: adType, + params: bid.params + }, adunits); + } + } + + if (siteId) { + return serializeState(divids, siteId, adunits); + } else { + return false; + } +} + +function nobidInterpretResponse(response, bidRequest) { + var findBid = function findBid(divid, bids) { + for (var i = 0; i < bids.length; i++) { + if (bids[i].adUnitCode == divid) { + return bids[i]; + } + } + + return false; + }; + + var setRefreshLimit = function setRefreshLimit(response) { + if (response && typeof response.rlimit !== 'undefined') window.nobid.refreshLimit = response.rlimit; + }; + + var setUserBlock = function setUserBlock(response) { + if (response && typeof response.ublock !== 'undefined') { + nobidSetCookie('_ublock', '1', response.ublock); + } + }; + + setRefreshLimit(response); + setUserBlock(response); + var bidResponses = []; + + for (var i = 0; response.bids && i < response.bids.length; i++) { + var bid = response.bids[i]; + if (bid.bdrid < 100 || !bidRequest || !bidRequest.bidderRequest || !bidRequest.bidderRequest.bids) continue; + window.nobid.bidResponses['' + bid.id] = bid; + var reqBid = findBid(bid.divid, bidRequest.bidderRequest.bids); + if (!reqBid) continue; + var bidResponse = { + requestId: reqBid.bidId, + cpm: 1 * (bid.price ? bid.price : bid.bucket ? bid.bucket : 0), + width: bid.size.w, + height: bid.size.h, + creativeId: bid.creativeid || '', + dealId: bid.dealid || '', + currency: 'USD', + netRevenue: true, + ttl: 300, + ad: bid.adm, + mediaType: bid.atype || __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */] + }; + + if (bid.vastUrl) { + bidResponse.vastUrl = bid.vastUrl; + } + + if (bid.vastXml) { + bidResponse.vastXml = bid.vastXml; + } + + if (bid.videoCacheKey) { + bidResponse.videoCacheKey = bid.videoCacheKey; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; +} + +; + +window.nobid.renderTag = function (doc, id, win) { + log('nobid.renderTag()', id); + var bid = window.nobid.bidResponses['' + id]; + + if (bid && bid.adm2) { + log('nobid.renderTag() found tag', id); + var markup = bid.adm2; + doc.write(markup); + doc.close(); + return; + } + + log('nobid.renderTag() tag NOT FOUND *ERROR*', id); +}; + +window.addEventListener('message', function (event) { + var key = event.message ? 'message' : 'data'; + var msg = '' + event[key]; + + if (msg.substring(0, 'nbTagRenderer.requestAdMarkup|'.length) === 'nbTagRenderer.requestAdMarkup|') { + log('Prebid received nbTagRenderer.requestAdMarkup event'); + var adId = msg.substring(msg.indexOf('|') + 1); + + if (window.nobid && window.nobid.bidResponses) { + var bid = window.nobid.bidResponses['' + adId]; + + if (bid && bid.adm2) { + var markup = null; + + if (bid.is_combo && bid.adm_combo) { + for (var i in bid.adm_combo) { + var combo = bid.adm_combo[i]; + + if (!combo.done) { + markup = combo.adm; + combo.done = true; + break; + } + } + } else { + markup = bid.adm2; + } + + if (markup) { + event.source.postMessage('nbTagRenderer.renderAdInSafeFrame|' + markup, '*'); + } + } + } + } +}, false); +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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) { + log('isBidRequestValid', bid); + return !!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, bidderRequest) { + function resolveEndpoint() { + var ret = 'https://ads.servenobid.com/'; + var env = typeof __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getParameterByName"] === 'function' && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getParameterByName"]('nobid-env'); + if (!env) ret = 'https://ads.servenobid.com/';else if (env == 'beta') ret = 'https://beta.servenobid.com/';else if (env == 'dev') ret = '//localhost:8282/';else if (env == 'qa') ret = 'https://qa-ads.nobid.com/'; + return ret; + } + + var buildEndpoint = function buildEndpoint() { + return resolveEndpoint() + 'adreq?cb=' + Math.floor(Math.random() * 11000); + }; + + log('validBidRequests', validBidRequests); + + if (!validBidRequests || validBidRequests.length <= 0) { + log('Empty validBidRequests'); + return; + } + + var payload = nobidBuildRequests(validBidRequests, bidderRequest); + if (!payload) return; + window.nobid.refreshCount++; + var payloadString = JSON.stringify(payload).replace(/'|&|#/g, ''); + var endpoint = buildEndpoint(); + return { + method: 'POST', + url: endpoint, + data: payloadString, + bidderRequest: bidderRequest + }; + }, + + /** + * 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) { + log('interpretResponse -> serverResponse', serverResponse); + log('interpretResponse -> bidRequest', bidRequest); + return nobidInterpretResponse(serverResponse.body, bidRequest); + }, + + /** + * 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, gdprConsent, usPrivacy) { + if (syncOptions.iframeEnabled) { + var params = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + // add 'gdpr' only if 'gdprApplies' is defined + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += "?gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + params += "?gdpr_consent=".concat(gdprConsent.consentString); + } + } + + if (usPrivacy) { + if (params.length > 0) params += '&';else params += '?'; + params += 'usp_consent=' + usPrivacy; + } + + return [{ + type: 'iframe', + url: 'https://public.servenobid.com/sync.html' + params + }]; + } else if (syncOptions.pixelEnabled && serverResponses.length > 0) { + var syncs = []; + + if (serverResponses[0].body.syncs && serverResponses[0].body.syncs.length > 0) { + serverResponses[0].body.syncs.forEach(function (element) { + syncs.push({ + type: 'image', + url: element + }); + }); + } + + return syncs; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('-NoBid- Please enable iframe based user sync.', syncOptions); + return []; + } + }, + + /** + * Register bidder specific code, which will execute if bidder timed out after an auction + * @param {data} Containing timeout specific data + */ + onTimeout: function onTimeout(data) { + window.nobid.timeoutTotal++; + log('Timeout total: ' + window.nobid.timeoutTotal, data); + return window.nobid.timeoutTotal; + }, + onBidWon: function onBidWon(data) { + window.nobid.bidWonTotal++; + log('BidWon total: ' + window.nobid.bidWonTotal, data); + return window.nobid.bidWonTotal; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[555]); \ No newline at end of file diff --git a/build/dist/oneVideoBidAdapter.js b/build/dist/oneVideoBidAdapter.js new file mode 100644 index 00000000000..9e6a7f2f537 --- /dev/null +++ b/build/dist/oneVideoBidAdapter.js @@ -0,0 +1,405 @@ +pbjsChunk([157],{ + +/***/ 557: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(558); + + +/***/ }), + +/***/ 558: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + +var BIDDER_CODE = 'oneVideo'; +var spec = { + code: 'oneVideo', + VERSION: '3.0.3', + ENDPOINT: 'https://ads.adaptv.advertising.com/rtb/openrtb?ext_id=', + E2ETESTENDPOINT: 'https://ads-wc.v.ssp.yahoo.com/rtb/openrtb?ext_id=', + SYNC_ENDPOINT1: 'https://cm.g.doubleclick.net/pixel?google_nid=adaptv_dbm&google_cm&google_sc', + SYNC_ENDPOINT2: 'https://pr-bh.ybp.yahoo.com/sync/adaptv_ortb/{combo_uid}', + SYNC_ENDPOINT3: 'https://match.adsrvr.org/track/cmf/generic?ttd_pid=adaptv&ttd_tpi=1', + supportedMediaTypes: ['video', 'banner'], + + /** + * 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.bidder !== BIDDER_CODE || typeof bid.params === 'undefined') { + return false; + } // Video validations + + + if (typeof bid.params.video === 'undefined' || typeof bid.params.video.playerWidth === 'undefined' || typeof bid.params.video.playerHeight == 'undefined' || typeof bid.params.video.mimes == 'undefined') { + return false; + } // Prevend DAP Outstream validation, Banner DAP validation & Multi-Format adUnit support + + + if (bid.mediaTypes.video) { + if (bid.mediaTypes.video.context === 'outstream' && bid.params.video.display === 1) { + return false; + } + } else if (bid.mediaTypes.banner && !bid.params.video.display) { + return false; + } // Pub Id validation + + + if (typeof bid.params.pubId === 'undefined') { + return false; + } + + return true; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {validBidRequests[]} - an array of bids + * @param bidderRequest + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(bids, bidRequest) { + var consentData = bidRequest ? bidRequest.gdprConsent : null; + return bids.map(function (bid) { + var url = spec.ENDPOINT; + var pubId = bid.params.pubId; + + if (bid.params.video.e2etest) { + url = spec.E2ETESTENDPOINT; + pubId = 'HBExchange'; + } + + return { + method: 'POST', + + /** removing adding local protocal since we + * can get cookie data only if we call with https. */ + url: url + pubId, + data: getRequestData(bid, consentData, bidRequest), + bidRequest: bid + }; + }); + }, + + /** + * 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(response, _ref) { + var bidRequest = _ref.bidRequest; + var bid; + var size; + var bidResponse; + + try { + response = response.body; + bid = response.seatbid[0].bid[0]; + } catch (e) { + response = null; + } + + if (!response || !bid || !bid.adm && !bid.nurl || !bid.price) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("No valid bids from ".concat(spec.code, " bidder")); + return []; + } + + size = getSize(bidRequest.sizes); + bidResponse = { + requestId: bidRequest.bidId, + bidderCode: spec.code, + cpm: bid.price, + adId: bid.adid, + creativeId: bid.crid, + width: size.width, + height: size.height, + currency: response.cur, + ttl: 100, + netRevenue: true, + adUnitCode: bidRequest.adUnitCode + }; + bidResponse.mediaType = bidRequest.mediaTypes.banner ? 'banner' : 'video'; + + if (bid.nurl) { + bidResponse.vastUrl = bid.nurl; + } else if (bid.adm && bidRequest.params.video.display === 1) { + bidResponse.ad = bid.adm; + } else if (bid.adm) { + bidResponse.vastXml = bid.adm; + } + + if (bidRequest.mediaTypes.video) { + bidResponse.renderer = bidRequest.mediaTypes.video.context === 'outstream' ? newRenderer(bidRequest, bidResponse) : undefined; + } + + return bidResponse; + }, + + /** + * 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, responses) { + var consentData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var gdprApplies = consentData.gdprApplies, + _consentData$consentS = consentData.consentString, + consentString = _consentData$consentS === void 0 ? '' : _consentData$consentS; + + if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: spec.SYNC_ENDPOINT1 + }, { + type: 'image', + url: spec.SYNC_ENDPOINT2 + }, { + type: 'image', + url: "https://sync-tm.everesttech.net/upi/pid/m7y5t93k?gdpr=".concat(gdprApplies ? 1 : 0, "&gdpr_consent=").concat(consentString, "&redir=https%3A%2F%2Fpixel.advertising.com%2Fups%2F55986%2Fsync%3Fuid%3D%24%7BUSER_ID%7D%26_origin%3D0") + encodeURI("&gdpr=".concat(gdprApplies ? 1 : 0, "&gdpr_consent=").concat(consentString)) + }, { + type: 'image', + url: spec.SYNC_ENDPOINT3 + }]; + } + } +}; + +function getSize(sizes) { + var parsedSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 isConsentRequired(consentData) { + return !!(consentData && consentData.gdprApplies); +} + +function getRequestData(bid, consentData, bidRequest) { + var loc = bidRequest.refererInfo.referer; + var page = bid.params.site && bid.params.site.page ? bid.params.site.page : loc.href; + var ref = bid.params.site && bid.params.site.referrer ? bid.params.site.referrer : bidRequest.refererInfo.referer; + var bidData = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"](), + at: 2, + cur: bid.cur || 'USD', + imp: [{ + id: '1', + secure: isSecure(), + bidfloor: bid.params.bidfloor, + ext: { + hb: 1, + prebidver: "4.2.0", + adapterver: spec.VERSION + } + }], + site: { + page: page, + ref: ref + }, + device: { + ua: navigator.userAgent + }, + tmax: 200 + }; + + if (bid.params.video.display == undefined || bid.params.video.display != 1) { + bidData.imp[0].video = { + mimes: bid.params.video.mimes, + w: bid.params.video.playerWidth, + h: bid.params.video.playerHeight, + pos: bid.params.video.position + }; + + if (bid.params.video.maxbitrate) { + bidData.imp[0].video.maxbitrate = bid.params.video.maxbitrate; + } + + if (bid.params.video.maxduration) { + bidData.imp[0].video.maxduration = bid.params.video.maxduration; + } + + if (bid.params.video.minduration) { + bidData.imp[0].video.minduration = bid.params.video.minduration; + } + + if (bid.params.video.api) { + bidData.imp[0].video.api = bid.params.video.api; + } + + if (bid.params.video.delivery) { + bidData.imp[0].video.delivery = bid.params.video.delivery; + } + + if (bid.params.video.position) { + bidData.imp[0].video.pos = bid.params.video.position; + } + + if (bid.params.video.playbackmethod) { + bidData.imp[0].video.playbackmethod = bid.params.video.playbackmethod; + } + + if (bid.params.video.placement) { + bidData.imp[0].video.placement = bid.params.video.placement; + } + + if (bid.params.video.rewarded) { + bidData.imp[0].ext.rewarded = bid.params.video.rewarded; + } + + bidData.imp[0].video.linearity = 1; + bidData.imp[0].video.protocols = bid.params.video.protocols || [2, 5]; + } else if (bid.params.video.display == 1) { + bidData.imp[0].banner = { + mimes: bid.params.video.mimes, + w: bid.params.video.playerWidth, + h: bid.params.video.playerHeight, + pos: bid.params.video.position + }; + + if (bid.params.video.placement) { + bidData.imp[0].banner.placement = bid.params.video.placement; + } + + if (bid.params.video.maxduration) { + bidData.imp[0].banner.ext = bidData.imp[0].banner.ext || {}; + bidData.imp[0].banner.ext.maxduration = bid.params.video.maxduration; + } + + if (bid.params.video.minduration) { + bidData.imp[0].banner.ext = bidData.imp[0].banner.ext || {}; + bidData.imp[0].banner.ext.minduration = bid.params.video.minduration; + } + } + + if (bid.params.video.inventoryid) { + bidData.imp[0].ext.inventoryid = bid.params.video.inventoryid; + } + + if (bid.params.video.sid) { + bidData.source = { + ext: { + schain: { + complete: 1, + nodes: [{ + sid: bid.params.video.sid, + rid: bidData.id + }] + } + } + }; + + if (bid.params.video.hp == 1) { + bidData.source.ext.schain.nodes[0].hp = bid.params.video.hp; + } + } else if (bid.schain) { + bidData.source = { + ext: { + schain: bid.schain + } + }; + bidData.source.ext.schain.nodes[0].rid = bidData.id; + } + + if (bid.params.site && bid.params.site.id) { + bidData.site.id = bid.params.site.id; + } + + if (isConsentRequired(consentData) || bidRequest && bidRequest.uspConsent) { + bidData.regs = { + ext: {} + }; + + if (isConsentRequired(consentData)) { + bidData.regs.ext.gdpr = 1; + } + + if (consentData && consentData.consentString) { + bidData.user = { + ext: { + consent: consentData.consentString + } + }; + } // ccpa support + + + if (bidRequest && bidRequest.uspConsent) { + bidData.regs.ext.us_privacy = bidRequest.uspConsent; + } + } + + if (bid.params.video.e2etest) { + bidData.imp[0].bidfloor = null; + bidData.imp[0].video.w = 300; + bidData.imp[0].video.h = 250; + bidData.imp[0].video.mimes = ['video/mp4', 'application/javascript']; + bidData.imp[0].video.api = [2]; + bidData.site.page = 'https://verizonmedia.com'; + bidData.site.ref = 'https://verizonmedia.com'; + bidData.tmax = 1000; + } + + return bidData; +} + +function isSecure() { + return document.location.protocol === 'https:'; +} +/** + * Create oneVideo renderer + * @returns {*} + */ + + +function newRenderer(bidRequest, bid) { + if (!bidRequest.renderer) { + bidRequest.renderer = {}; + bidRequest.renderer.url = 'https://cdn.vidible.tv/prod/hb-outstream-renderer/renderer.js'; + + bidRequest.renderer.render = function (bid) { + setTimeout(function () { + // eslint-disable-next-line no-undef + o2PlayerRender(bid); + }, 700); + }; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[557]); \ No newline at end of file diff --git a/build/dist/onetagBidAdapter.js b/build/dist/onetagBidAdapter.js new file mode 100644 index 00000000000..43e21e6fdca --- /dev/null +++ b/build/dist/onetagBidAdapter.js @@ -0,0 +1,492 @@ +pbjsChunk([156],{ + +/***/ 559: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(560); + + +/***/ }), + +/***/ 560: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["hasTypeVideo"] = hasTypeVideo; +/* harmony export (immutable) */ __webpack_exports__["isValid"] = isValid; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_video_js__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); +var ENDPOINT = 'https://onetag-sys.com/prebid-request'; +var USER_SYNC_ENDPOINT = 'https://onetag-sys.com/usync/'; +var BIDDER_CODE = 'onetag'; +/** + * 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) { + if (typeof bid === 'undefined' || typeof bid.params === 'undefined' || typeof bid.params.pubId !== 'string') { + return false; + } + + return isValid(__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */], bid) || isValid(__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["d" /* VIDEO */], bid); +} + +function hasTypeVideo(bid) { + return typeof bid.mediaTypes !== 'undefined' && typeof bid.mediaTypes.video !== 'undefined'; +} +function isValid(type, bid) { + if (type === __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */]) { + return parseSizes(bid).length > 0; + } else if (type === __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["d" /* VIDEO */] && hasTypeVideo(bid)) { + var context = bid.mediaTypes.video.context; + + if (context === 'outstream' || context === 'instream') { + return parseVideoSize(bid).length > 0; + } + } + + 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. + */ + +function buildRequests(validBidRequests, bidderRequest) { + var payload = _objectSpread({ + bids: requestsToBids(validBidRequests) + }, getPageInfo()); + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdprConsent = { + consentString: bidderRequest.gdprConsent.consentString, + consentRequired: bidderRequest.gdprConsent.gdprApplies + }; + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.usPrivacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.userId) { + payload.userId = bidderRequest.userId; + } + + try { + if (storage.hasLocalStorage()) { + payload.onetagSid = storage.getDataFromLocalStorage('onetag_sid'); + } + } catch (e) {} + + return { + method: 'POST', + url: ENDPOINT, + data: JSON.stringify(payload) + }; +} + +function interpretResponse(serverResponse, bidderRequest) { + var body = serverResponse.body; + var bids = []; + var requestData = JSON.parse(bidderRequest.data); + + if (!body || body.nobid && body.nobid === true) { + return bids; + } + + if (!body.bids || !Array.isArray(body.bids) || body.bids.length === 0) { + return bids; + } + + body.bids.forEach(function (_ref) { + var requestId = _ref.requestId, + cpm = _ref.cpm, + width = _ref.width, + height = _ref.height, + creativeId = _ref.creativeId, + dealId = _ref.dealId, + currency = _ref.currency, + mediaType = _ref.mediaType, + ttl = _ref.ttl, + rendererUrl = _ref.rendererUrl, + ad = _ref.ad, + vastUrl = _ref.vastUrl, + videoCacheKey = _ref.videoCacheKey; + var responseBid = { + requestId: requestId, + cpm: cpm, + width: width, + height: height, + creativeId: creativeId, + dealId: dealId == null ? dealId : '', + currency: currency, + netRevenue: false, + meta: { + mediaType: mediaType + }, + ttl: ttl || 300 + }; + + if (mediaType === __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */]) { + responseBid.ad = ad; + } else if (mediaType === __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["d" /* VIDEO */]) { + var _find = __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(requestData.bids, function (item) { + return item.bidId === requestId; + }), + context = _find.context, + adUnitCode = _find.adUnitCode; + + if (context === __WEBPACK_IMPORTED_MODULE_1__src_video_js__["a" /* INSTREAM */]) { + responseBid.vastUrl = vastUrl; + responseBid.videoCacheKey = videoCacheKey; + } else if (context === __WEBPACK_IMPORTED_MODULE_1__src_video_js__["b" /* OUTSTREAM */]) { + responseBid.vastXml = ad; + responseBid.vastUrl = vastUrl; + + if (rendererUrl) { + responseBid.renderer = createRenderer({ + requestId: requestId, + rendererUrl: rendererUrl, + adUnitCode: adUnitCode + }); + } + } + } + + bids.push(responseBid); + }); + return bids; +} + +function createRenderer(bid) { + var rendererOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + id: bid.requestId, + url: bid.rendererUrl, + config: rendererOptions, + adUnitCode: bid.adUnitCode, + loaded: false + }); + + try { + renderer.setRender(onetagRenderer); + } catch (e) {} + + return renderer; +} + +function onetagRenderer(_ref2) { + var renderer = _ref2.renderer, + width = _ref2.width, + height = _ref2.height, + vastXml = _ref2.vastXml, + adUnitCode = _ref2.adUnitCode; + renderer.push(function () { + window.onetag.Player.init({ + width: width, + height: height, + vastXml: vastXml, + nodeId: adUnitCode, + config: renderer.getConfig() + }); + }); +} + +function getFrameNesting() { + var topmostFrame = window; + var parent = window.parent; + var currentFrameNesting = 0; + + try { + while (topmostFrame !== topmostFrame.parent) { + parent = topmostFrame.parent; // eslint-disable-next-line no-unused-expressions + + parent.location.href; + topmostFrame = topmostFrame.parent; + } + } catch (e) { + currentFrameNesting = parent === topmostFrame.top ? 1 : 2; + } + + return { + topmostFrame: topmostFrame, + currentFrameNesting: currentFrameNesting + }; +} + +function getDocumentVisibility(window) { + try { + if (typeof window.document.hidden !== 'undefined') { + return window.document.hidden; + } else if (typeof window.document['msHidden'] !== 'undefined') { + return window.document['msHidden']; + } else if (typeof window.document['webkitHidden'] !== 'undefined') { + return window.document['webkitHidden']; + } else { + return null; + } + } catch (e) { + return null; + } +} +/** + * Returns information about the page needed by the server in an object to be converted in JSON + * @returns {{location: *, referrer: (*|string), masked: *, wWidth: (*|Number), wHeight: (*|Number), sWidth, sHeight, date: string, timeOffset: number}} + */ + + +function getPageInfo() { + var _getFrameNesting = getFrameNesting(), + topmostFrame = _getFrameNesting.topmostFrame, + currentFrameNesting = _getFrameNesting.currentFrameNesting; + + return { + location: topmostFrame.location.href, + referrer: topmostFrame.document.referrer !== '' ? topmostFrame.document.referrer : null, + masked: currentFrameNesting, + wWidth: topmostFrame.innerWidth, + wHeight: topmostFrame.innerHeight, + oWidth: topmostFrame.outerWidth, + oHeight: topmostFrame.outerHeight, + sWidth: topmostFrame.screen.width, + sHeight: topmostFrame.screen.height, + aWidth: topmostFrame.screen.availWidth, + aHeight: topmostFrame.screen.availHeight, + sLeft: 'screenLeft' in topmostFrame ? topmostFrame.screenLeft : topmostFrame.screenX, + sTop: 'screenTop' in topmostFrame ? topmostFrame.screenTop : topmostFrame.screenY, + xOffset: topmostFrame.pageXOffset, + yOffset: topmostFrame.pageYOffset, + docHidden: getDocumentVisibility(topmostFrame), + docHeight: topmostFrame.document.body ? topmostFrame.document.body.scrollHeight : null, + hLength: history.length, + timing: getTiming(), + version: { + prebid: "4.2.0", + adapter: '1.0.0' + } + }; +} + +function requestsToBids(bidRequests) { + var videoBidRequests = bidRequests.filter(function (bidRequest) { + return hasTypeVideo(bidRequest); + }).map(function (bidRequest) { + var videoObj = {}; + setGeneralInfo.call(videoObj, bidRequest); // Pass parameters + // Context: instream - outstream - adpod + + videoObj['context'] = bidRequest.mediaTypes.video.context; // MIME Video Types + + videoObj['mimes'] = bidRequest.mediaTypes.video.mimes; // Sizes + + videoObj['playerSize'] = parseVideoSize(bidRequest); // Other params + + videoObj['protocols'] = bidRequest.mediaTypes.video.protocols; + videoObj['maxDuration'] = bidRequest.mediaTypes.video.maxduration; + videoObj['api'] = bidRequest.mediaTypes.video.api; + videoObj['type'] = __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["d" /* VIDEO */]; + return videoObj; + }); + var bannerBidRequests = bidRequests.filter(function (bidRequest) { + return isValid(__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */], bidRequest); + }).map(function (bidRequest) { + var bannerObj = {}; + setGeneralInfo.call(bannerObj, bidRequest); + bannerObj['sizes'] = parseSizes(bidRequest); + bannerObj['type'] = __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */]; + return bannerObj; + }); + return videoBidRequests.concat(bannerBidRequests); +} + +function setGeneralInfo(bidRequest) { + var params = bidRequest.params; + this['adUnitCode'] = bidRequest.adUnitCode; + this['bidId'] = bidRequest.bidId; + this['bidderRequestId'] = bidRequest.bidderRequestId; + this['auctionId'] = bidRequest.auctionId; + this['transactionId'] = bidRequest.transactionId; + this['pubId'] = params.pubId; + this['ext'] = params.ext; + + if (params.pubClick) { + this['click'] = params.pubClick; + } + + if (params.dealId) { + this['dealId'] = params.dealId; + } + + var coords = getSpaceCoords(bidRequest.adUnitCode); + + if (coords) { + this['coords'] = coords; + } +} + +function getSpaceCoords(id) { + var space = document.getElementById(id); + + try { + var _space$getBoundingCli = space.getBoundingClientRect(), + top = _space$getBoundingCli.top, + left = _space$getBoundingCli.left, + width = _space$getBoundingCli.width, + height = _space$getBoundingCli.height; + + var _window = space.ownerDocument.defaultView; + var coords = { + top: top + _window.pageYOffset, + left: left + _window.pageXOffset, + width: width, + height: height + }; + var frame = _window.frameElement; + + while (frame != null) { + var _frame$getBoundingCli = frame.getBoundingClientRect(), + _top = _frame$getBoundingCli.top, + _left = _frame$getBoundingCli.left; + + coords.top += _top + _window.pageYOffset; + coords.left += _left + _window.pageXOffset; + _window = _window.parent; + frame = _window.frameElement; + } + + return coords; + } catch (e) { + return null; + } +} + +function getTiming() { + try { + if (window.performance != null && window.performance.timing != null) { + var timing = {}; + var perf = window.performance.timing; + timing.pageLoadTime = perf.loadEventEnd - perf.navigationStart; + timing.connectTime = perf.responseEnd - perf.requestStart; + timing.renderTime = perf.domComplete - perf.domLoading; + return timing; + } + } catch (e) { + return null; + } + + return null; +} + +function parseVideoSize(bid) { + var playerSize = bid.mediaTypes.video.playerSize; + + if (typeof playerSize !== 'undefined' && Array.isArray(playerSize) && playerSize.length > 0) { + return getSizes(playerSize); + } + + return []; +} + +function parseSizes(bid) { + var ret = []; + + if (typeof bid.mediaTypes !== 'undefined' && typeof bid.mediaTypes.banner !== 'undefined' && typeof bid.mediaTypes.banner.sizes !== 'undefined' && Array.isArray(bid.mediaTypes.banner.sizes) && bid.mediaTypes.banner.sizes.length > 0) { + return getSizes(bid.mediaTypes.banner.sizes); + } + + var isVideoBidRequest = hasTypeVideo(bid); + + if (!isVideoBidRequest && bid.sizes && Array.isArray(bid.sizes)) { + return getSizes(bid.sizes); + } + + return ret; +} + +function getSizes(sizes) { + var ret = []; + + for (var i = 0; i < sizes.length; i++) { + var size = sizes[i]; + ret.push({ + width: size[0], + height: size[1] + }); + } + + return ret; +} + +function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + var syncs = []; + var params = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + params += '&gdpr_consent=' + gdprConsent.consentString; + + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += '&gdpr=' + (gdprConsent.gdprApplies ? 1 : 0); + } + } + + if (uspConsent && typeof uspConsent === 'string') { + params += '&us_privacy=' + uspConsent; + } + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: USER_SYNC_ENDPOINT + '?cb=' + new Date().getTime() + params + }); + } + + if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: USER_SYNC_ENDPOINT + '?tag=img' + params + }); + } + + return syncs; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs +}; +Object(__WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[559]); \ No newline at end of file diff --git a/build/dist/onomagicBidAdapter.js b/build/dist/onomagicBidAdapter.js new file mode 100644 index 00000000000..975cec65c15 --- /dev/null +++ b/build/dist/onomagicBidAdapter.js @@ -0,0 +1,322 @@ +pbjsChunk([155],{ + +/***/ 561: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(562); + + +/***/ }), + +/***/ 562: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'onomagic'; +var URL = 'https://bidder.onomagic.com/hb'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs +}; + +function buildRequests(bidReqs, bidderRequest) { + try { + var referrer = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + referrer = bidderRequest.refererInfo.referer; + } + + var onomagicImps = []; + var publisherId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('publisherId', bidReqs[0].params); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidReqs, function (bid) { + var bidSizes = bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes || bid.sizes; + bidSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidSizes) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidSizes[0]) ? bidSizes : [bidSizes]; + bidSizes = bidSizes.filter(function (size) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size); + }); + var processedSizes = bidSizes.map(function (size) { + return { + w: parseInt(size[0], 10), + h: parseInt(size[1], 10) + }; + }); + var element = document.getElementById(bid.adUnitCode); + + var minSize = _getMinSize(processedSizes); + + var viewabilityAmount = _isViewabilityMeasurable(element) ? _getViewability(element, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](), minSize) : 'na'; + var viewabilityAmountRounded = isNaN(viewabilityAmount) ? viewabilityAmount : Math.round(viewabilityAmount); + var imp = { + id: bid.bidId, + banner: { + format: processedSizes, + ext: { + viewability: viewabilityAmountRounded + } + }, + tagid: String(bid.adUnitCode) + }; + var bidFloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidFloor', bid.params); + + if (bidFloor) { + imp.bidfloor = bidFloor; + } + + onomagicImps.push(imp); + }); + + var onomagicBidReq = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: onomagicImps, + site: { + domain: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](referrer).host, + page: referrer, + publisher: { + id: publisherId + } + }, + device: { + devicetype: _getDeviceType(), + w: screen.width, + h: screen.height + }, + tmax: __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; + return { + method: 'POST', + url: URL, + data: JSON.stringify(onomagicBidReq), + options: { + contentType: 'text/plain', + withCredentials: false + } + }; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e, { + bidReqs: bidReqs, + bidderRequest: bidderRequest + }); + } +} + +function isBidRequestValid(bid) { + if (bid.bidder !== BIDDER_CODE || typeof bid.params === 'undefined') { + return false; + } + + if (typeof bid.params.publisherId === 'undefined') { + return false; + } + + return true; +} + +function interpretResponse(serverResponse) { + if (!serverResponse.body || _typeof(serverResponse.body) != 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Onomagic server returned empty/non-json response: ' + JSON.stringify(serverResponse.body)); + return []; + } + + var _serverResponse$body = serverResponse.body, + id = _serverResponse$body.id, + seatbid = _serverResponse$body.seatbid; + + try { + var onomagicBidResponses = []; + + if (id && seatbid && seatbid.length > 0 && seatbid[0].bid && seatbid[0].bid.length > 0) { + seatbid[0].bid.map(function (onomagicBid) { + onomagicBidResponses.push({ + requestId: onomagicBid.impid, + cpm: parseFloat(onomagicBid.price), + width: parseInt(onomagicBid.w), + height: parseInt(onomagicBid.h), + creativeId: onomagicBid.crid || onomagicBid.id, + currency: 'USD', + netRevenue: true, + mediaType: __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], + ad: _getAdMarkup(onomagicBid), + ttl: 60 + }); + }); + } + + return onomagicBidResponses; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e, { + id: id, + seatbid: seatbid + }); + } +} // Don't do user sync for now + + +function getUserSyncs(syncOptions, responses, gdprConsent) { + return []; +} + +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 _getDeviceType() { + return _isMobile() ? 1 : _isConnectedTV() ? 3 : 2; +} + +function _getAdMarkup(bid) { + var adm = bid.adm; + + if ('nurl' in bid) { + adm += __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"](bid.nurl); + } + + return adm; +} + +function _isViewabilityMeasurable(element) { + return !_isIframe() && element !== null; +} + +function _getViewability(element, topWin) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref.w, + h = _ref.h; + + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().document.visibilityState === 'visible' ? _getPercentInView(element, topWin, { + w: w, + h: h + }) : 0; +} + +function _isIframe() { + try { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowSelf"]() !== __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](); + } catch (e) { + return true; + } +} + +function _getMinSize(sizes) { + return sizes.reduce(function (min, size) { + return size.h * size.w < min.h * min.w ? size : min; + }); +} + +function _getBoundingBox(element) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + w = _ref2.w, + h = _ref2.h; + + var _element$getBoundingC = element.getBoundingClientRect(), + width = _element$getBoundingC.width, + height = _element$getBoundingC.height, + left = _element$getBoundingC.left, + top = _element$getBoundingC.top, + right = _element$getBoundingC.right, + bottom = _element$getBoundingC.bottom; + + if ((width === 0 || height === 0) && w && h) { + width = w; + height = h; + right = left + w; + bottom = top + h; + } + + return { + width: width, + height: height, + left: left, + top: top, + right: right, + bottom: bottom + }; +} + +function _getIntersectionOfRects(rects) { + var bbox = { + left: rects[0].left, + right: rects[0].right, + top: rects[0].top, + bottom: rects[0].bottom + }; + + for (var i = 1; i < rects.length; ++i) { + bbox.left = Math.max(bbox.left, rects[i].left); + bbox.right = Math.min(bbox.right, rects[i].right); + + if (bbox.left >= bbox.right) { + return null; + } + + bbox.top = Math.max(bbox.top, rects[i].top); + bbox.bottom = Math.min(bbox.bottom, rects[i].bottom); + + if (bbox.top >= bbox.bottom) { + return null; + } + } + + bbox.width = bbox.right - bbox.left; + bbox.height = bbox.bottom - bbox.top; + return bbox; +} + +function _getPercentInView(element, topWin) { + var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + w = _ref3.w, + h = _ref3.h; + + var elementBoundingBox = _getBoundingBox(element, { + w: w, + h: h + }); // Obtain the intersection of the element and the viewport + + + var elementInViewBoundingBox = _getIntersectionOfRects([{ + left: 0, + top: 0, + right: topWin.innerWidth, + bottom: topWin.innerHeight + }, elementBoundingBox]); + + var elementInViewArea, elementTotalArea; + + if (elementInViewBoundingBox !== null) { + // Some or all of the element is in view + elementInViewArea = elementInViewBoundingBox.width * elementInViewBoundingBox.height; + elementTotalArea = elementBoundingBox.width * elementBoundingBox.height; + return elementInViewArea / elementTotalArea * 100; + } // No overlap between element and the viewport; therefore, the element + // lies completely out of view + + + return 0; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[561]); \ No newline at end of file diff --git a/build/dist/open8BidAdapter.js b/build/dist/open8BidAdapter.js new file mode 100644 index 00000000000..4e14e67fa1a --- /dev/null +++ b/build/dist/open8BidAdapter.js @@ -0,0 +1,218 @@ +pbjsChunk([154],{ + +/***/ 563: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(564); + + +/***/ }), + +/***/ 564: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var BIDDER_CODE = 'open8'; +var URL = 'https://as.vt.open8.com/v1/control/prebid'; +var AD_TYPE = { + VIDEO: 1, + BANNER: 2 +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.slotKey; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var requests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + var bid = validBidRequests[i]; + var queryString = ''; + var slotKey = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getBidIdParameter"]('slotKey', bid.params); + queryString = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](queryString, 'slot_key', slotKey); + queryString = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](queryString, 'imp_id', generateImpId()); + queryString += 'bid_id=' + bid.bidId; + requests.push({ + method: 'GET', + url: URL, + data: queryString + }); + } + + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidderResponse = serverResponse.body; + + if (!bidderResponse.isAdReturn) { + return []; + } + + var ad = bidderResponse.ad; + var bid = { + slotKey: bidderResponse.slotKey, + userId: bidderResponse.userId, + impId: bidderResponse.impId, + media: bidderResponse.media, + ds: ad.ds, + spd: ad.spd, + fa: ad.fa, + pr: ad.pr, + mr: ad.mr, + nurl: ad.nurl, + requestId: ad.bidId, + cpm: ad.price, + creativeId: ad.creativeId, + dealId: ad.dealId, + currency: ad.currency || 'JPY', + netRevenue: true, + ttl: 360 // 6 minutes + + }; + + if (ad.adType === AD_TYPE.VIDEO) { + var videoAd = bidderResponse.ad.video; + + _extends(bid, { + vastXml: videoAd.vastXml, + width: videoAd.w, + height: videoAd.h, + renderer: newRenderer(bidderResponse), + adResponse: bidderResponse, + mediaType: __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */] + }); + } else if (ad.adType === AD_TYPE.BANNER) { + var bannerAd = bidderResponse.ad.banner; + + _extends(bid, { + width: bannerAd.w, + height: bannerAd.h, + ad: bannerAd.adm, + mediaType: __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */] + }); + + if (bannerAd.imps) { + try { + bannerAd.imps.forEach(function (impTrackUrl) { + var tracker = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["createTrackPixelHtml"](impTrackUrl); + bid.ad += tracker; + }); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('Error appending imp tracking pixel', error); + } + } + } + + return [bid]; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.iframeEnabled && serverResponses.length) { + var syncIFs = serverResponses[0].body.syncIFs; + + if (syncIFs) { + syncIFs.forEach(function (sync) { + syncs.push({ + type: 'iframe', + url: sync + }); + }); + } + } + + if (syncOptions.pixelEnabled && serverResponses.length) { + var syncPixs = serverResponses[0].body.syncPixels; + + if (syncPixs) { + syncPixs.forEach(function (sync) { + syncs.push({ + type: 'image', + url: sync + }); + }); + } + } + + return syncs; + }, + onBidWon: function onBidWon(bid) { + if (!bid.nurl) { + return; + } + + var winUrl = bid.nurl.replace(/\$\{AUCTION_PRICE\}/, bid.cpm); + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(winUrl, null); + } +}; + +function generateImpId() { + var l = 16; + var c = 'abcdefghijklmnopqrstuvwsyz0123456789'; + var cl = c.length; + var r = ''; + + for (var i = 0; i < l; i++) { + r += c[Math.floor(Math.random() * cl)]; + } + + return r; +} + +function newRenderer(bidderResponse) { + var renderer = __WEBPACK_IMPORTED_MODULE_0__src_Renderer_js__["a" /* Renderer */].install({ + id: bidderResponse.ad.bidId, + url: bidderResponse.ad.video.purl, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]('Prebid Error calling setRender on newRenderer', err); + } + + return renderer; +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.op8.renderPrebid({ + vastXml: bid.vastXml, + adUnitCode: bid.adUnitCode, + slotKey: bid.slotKey, + impId: bid.impId, + userId: bid.userId, + media: bid.media, + ds: bid.ds, + spd: bid.spd, + fa: bid.fa, + pr: bid.pr, + mr: bid.mr, + adResponse: bid.adResponse, + mediaType: bid.mediaType + }); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[563]); \ No newline at end of file diff --git a/build/dist/openxAnalyticsAdapter.js b/build/dist/openxAnalyticsAdapter.js new file mode 100644 index 00000000000..c666c8668bd --- /dev/null +++ b/build/dist/openxAnalyticsAdapter.js @@ -0,0 +1,605 @@ +pbjsChunk([26],{ + +/***/ 565: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(566); + + +/***/ }), + +/***/ 566: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_utils_js__ = __webpack_require__(0); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_WON = _CONSTANTS$EVENTS.BID_WON; +var SLOT_LOADED = 'slotOnload'; +var ENDPOINT = 'https://ads.openx.net/w/1.0/pban'; +var initOptions; +var auctionMap = {}; + +function onAuctionInit(_ref) { + var auctionId = _ref.auctionId; + auctionMap[auctionId] = { + adUnitMap: {} + }; +} + +function onBidRequested(_ref2) { + var auctionId = _ref2.auctionId, + auctionStart = _ref2.auctionStart, + bids = _ref2.bids, + start = _ref2.start; + var adUnitMap = auctionMap[auctionId]['adUnitMap']; + bids.forEach(function (bid) { + var adUnitCode = bid.adUnitCode, + bidId = bid.bidId, + bidder = bid.bidder, + params = bid.params, + transactionId = bid.transactionId; + adUnitMap[adUnitCode] = adUnitMap[adUnitCode] || { + auctionId: auctionId, + auctionStart: auctionStart, + transactionId: transactionId, + bidMap: {} + }; + adUnitMap[adUnitCode]['bidMap'][bidId] = { + bidder: bidder, + params: params, + requestTimestamp: start + }; + }); +} + +function onBidResponse(_ref3) { + var auctionId = _ref3.auctionId, + adUnitCode = _ref3.adUnitCode, + bidId = _ref3.requestId, + cpm = _ref3.cpm, + creativeId = _ref3.creativeId, + responseTimestamp = _ref3.responseTimestamp, + ts = _ref3.ts, + adId = _ref3.adId; + var adUnit = auctionMap[auctionId]['adUnitMap'][adUnitCode]; + var bid = adUnit['bidMap'][bidId]; + bid.cpm = cpm; + bid.creativeId = creativeId; + bid.responseTimestamp = responseTimestamp; + bid.ts = ts; + bid.adId = adId; +} + +function onBidTimeout(args) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_map"](args, function (value) { + return value; + }).forEach(function (_ref4) { + var auctionId = _ref4.auctionId, + adUnitCode = _ref4.adUnitCode, + bidId = _ref4.bidId; + var bid = auctionMap[auctionId]['adUnitMap'][adUnitCode]['bidMap'][bidId]; + bid.timedOut = true; + }); +} + +function onBidWon(_ref5) { + var auctionId = _ref5.auctionId, + adUnitCode = _ref5.adUnitCode, + bidId = _ref5.requestId; + var adUnit = auctionMap[auctionId]['adUnitMap'][adUnitCode]; + var bid = adUnit['bidMap'][bidId]; + bid.won = true; +} + +function onSlotLoaded(_ref6) { + var slot = _ref6.slot; + var targeting = slot.getTargetingKeys().reduce(function (targeting, key) { + targeting[key] = slot.getTargeting(key); + return targeting; + }, {}); + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logMessage"]('GPT slot is loaded. Current targeting set on slot:', targeting); + var adId = slot.getTargeting('hb_adid')[0]; + + if (!adId) { + return; + } + + var adUnit = getAdUnitByAdId(adId); + + if (!adUnit) { + return; + } + + var adUnitData = getAdUnitData(adUnit); + var performanceData = getPerformanceData(adUnit.auctionStart); + var commonFields = { + 'hb.asiid': slot.getAdUnitPath(), + 'hb.cur': __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'), + 'hb.pubid': initOptions.publisherId + }; + + var data = _extends({}, adUnitData, performanceData, commonFields); + + sendEvent(data); +} + +function getAdUnitByAdId(adId) { + var result; + + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_map"](auctionMap, function (value) { + return value; + }).forEach(function (auction) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_map"](auction.adUnitMap, function (value) { + return value; + }).forEach(function (adUnit) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_map"](adUnit.bidMap, function (value) { + return value; + }).forEach(function (bid) { + if (adId === bid.adId) { + result = adUnit; + } + }); + }); + }); + + return result; +} + +function getAdUnitData(adUnit) { + var bids = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_map"](adUnit.bidMap, function (value) { + return value; + }); + + var bidders = bids.map(function (bid) { + return bid.bidder; + }); + var requestTimes = bids.map(function (bid) { + return bid.requestTimestamp && bid.requestTimestamp - adUnit.auctionStart; + }); + var responseTimes = bids.map(function (bid) { + return bid.responseTimestamp && bid.responseTimestamp - adUnit.auctionStart; + }); + var bidValues = bids.map(function (bid) { + return bid.cpm || 0; + }); + var timeouts = bids.map(function (bid) { + return !!bid.timedOut; + }); + var creativeIds = bids.map(function (bid) { + return bid.creativeId; + }); + var winningBid = bids.filter(function (bid) { + return bid.won; + })[0]; + var winningExchangeIndex = bids.indexOf(winningBid); + var openxBid = bids.filter(function (bid) { + return bid.bidder === 'openx'; + })[0]; + return { + 'hb.ct': adUnit.auctionStart, + 'hb.rid': adUnit.auctionId, + 'hb.exn': bidders.join(','), + 'hb.sts': requestTimes.join(','), + 'hb.ets': responseTimes.join(','), + 'hb.bv': bidValues.join(','), + 'hb.to': timeouts.join(','), + 'hb.crid': creativeIds.join(','), + 'hb.we': winningExchangeIndex, + 'hb.g1': winningExchangeIndex === -1, + dddid: adUnit.transactionId, + ts: openxBid && openxBid.ts, + auid: openxBid && openxBid.params && openxBid.params.unit + }; +} + +function getPerformanceData(auctionStart) { + var timing; + + try { + timing = window.top.performance.timing; + } catch (e) {} + + if (!timing) { + return; + } + + var _timing = timing, + fetchStart = _timing.fetchStart, + domContentLoadedEventEnd = _timing.domContentLoadedEventEnd, + loadEventEnd = _timing.loadEventEnd; + var domContentLoadTime = domContentLoadedEventEnd - fetchStart; + var pageLoadTime = loadEventEnd - fetchStart; + var timeToAuction = auctionStart - fetchStart; + var timeToRender = Date.now() - fetchStart; + return { + 'hb.dcl': domContentLoadTime, + 'hb.dl': pageLoadTime, + 'hb.tta': timeToAuction, + 'hb.ttr': timeToRender + }; +} + +function sendEvent(data) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_map"](data, function (value, key) { + return [key, value]; + }).forEach(function (_ref7) { + var _ref8 = _slicedToArray(_ref7, 2), + key = _ref8[0], + value = _ref8[1]; + + if (value === undefined || value === null || typeof value === 'number' && isNaN(value)) { + delete data[key]; + } + }); + + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])(ENDPOINT, null, data, { + method: 'GET' + }); +} + +var googletag = window.googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function () { + googletag.pubads().addEventListener(SLOT_LOADED, function (args) { + openxAdapter.track({ + eventType: SLOT_LOADED, + args: args + }); + }); +}); + +var openxAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + url: ENDPOINT, + analyticsType: 'endpoint' +}), { + track: function track(_ref9) { + var eventType = _ref9.eventType, + args = _ref9.args; + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logMessage"](eventType, _extends({}, args)); + + switch (eventType) { + case AUCTION_INIT: + onAuctionInit(args); + break; + + case BID_REQUESTED: + onBidRequested(args); + break; + + case BID_RESPONSE: + onBidResponse(args); + break; + + case BID_TIMEOUT: + onBidTimeout(args); + break; + + case BID_WON: + onBidWon(args); + break; + + case SLOT_LOADED: + onSlotLoaded(args); + break; + } + } +}); // save the base class function + + +openxAdapter.originEnableAnalytics = openxAdapter.enableAnalytics; // override enableAnalytics so we can get access to the config passed in from the page + +openxAdapter.enableAnalytics = function (config) { + if (!config || !config.options || !config.options.publisherId) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"]('OpenX analytics adapter: publisherId is required.'); + return; + } + + initOptions = config.options; + openxAdapter.originEnableAnalytics(config); // call the base class function +}; // reset the cache for unit tests + + +openxAdapter.reset = function () { + auctionMap = {}; +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: openxAdapter, + code: 'openx' +}); +/* harmony default export */ __webpack_exports__["default"] = (openxAdapter); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[565]); \ No newline at end of file diff --git a/build/dist/openxBidAdapter.js b/build/dist/openxBidAdapter.js new file mode 100644 index 00000000000..54ed7aa2807 --- /dev/null +++ b/build/dist/openxBidAdapter.js @@ -0,0 +1,554 @@ +pbjsChunk([153],{ + +/***/ 567: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(568); + + +/***/ }), + +/***/ 568: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "USER_ID_CODE_TO_QUERY_ARG", function() { return USER_ID_CODE_TO_QUERY_ARG; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var SUPPORTED_AD_TYPES = [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]]; +var BIDDER_CODE = 'openx'; +var BIDDER_CONFIG = 'hb_pb'; +var BIDDER_VERSION = '3.0.2'; +var USER_ID_CODE_TO_QUERY_ARG = { + britepoolid: 'britepoolid', + // BritePool ID + criteoId: 'criteoid', + // CriteoID + digitrustid: 'digitrustid', + // DigiTrust + id5id: 'id5id', + // ID5 ID + idl_env: 'lre', + // LiveRamp IdentityLink + lipb: 'lipbid', + // LiveIntent ID + netId: 'netid', + // netID + parrableId: 'parrableid', + // Parrable ID + pubcid: 'pubcid', + // PubCommon ID + tdid: 'ttduuid' // The Trade Desk Unified ID + +}; +var spec = { + code: BIDDER_CODE, + gvlid: 69, + supportedMediaTypes: SUPPORTED_AD_TYPES, + isBidRequestValid: function isBidRequestValid(bidRequest) { + var hasDelDomainOrPlatform = bidRequest.params.delDomain || bidRequest.params.platform; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner') && hasDelDomainOrPlatform) { + return !!bidRequest.params.unit || __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes.length') > 0; + } + + return !!(bidRequest.params.unit && hasDelDomainOrPlatform); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + if (bidRequests.length === 0) { + return []; + } + + var requests = []; + + var _partitionByVideoBids = partitionByVideoBids(bidRequests), + _partitionByVideoBids2 = _slicedToArray(_partitionByVideoBids, 2), + videoBids = _partitionByVideoBids2[0], + bannerBids = _partitionByVideoBids2[1]; // build banner requests + + + if (bannerBids.length > 0) { + requests.push(buildOXBannerRequest(bannerBids, bidderRequest)); + } // build video requests + + + if (videoBids.length > 0) { + videoBids.forEach(function (videoBid) { + requests.push(buildOXVideoRequest(videoBid, bidderRequest)); + }); + } + + return requests; + }, + interpretResponse: function interpretResponse(_ref, serverRequest) { + var oxResponseObj = _ref.body; + var mediaType = getMediaTypeFromRequest(serverRequest); + return mediaType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */] ? createVideoBidResponses(oxResponseObj, serverRequest.payload) : createBannerBidResponses(oxResponseObj, serverRequest.payload); + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + if (syncOptions.iframeEnabled || syncOptions.pixelEnabled) { + var pixelType = syncOptions.iframeEnabled ? 'iframe' : 'image'; + var url = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](responses, '0.body.ads.pixels') || __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](responses, '0.body.pixels') || generateDefaultSyncUrl(gdprConsent, uspConsent); + return [{ + type: pixelType, + url: url + }]; + } + }, + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["convertTypes"]({ + 'unit': 'string', + 'customFloor': 'number' + }, params); + } +}; + +function generateDefaultSyncUrl(gdprConsent, uspConsent) { + var url = 'https://u.openx.net/w/1.0/pd'; + var queryParamStrings = []; + + if (gdprConsent) { + queryParamStrings.push('gdpr=' + (gdprConsent.gdprApplies ? 1 : 0)); + queryParamStrings.push('gdpr_consent=' + encodeURIComponent(gdprConsent.consentString || '')); + } // CCPA + + + if (uspConsent) { + queryParamStrings.push('us_privacy=' + encodeURIComponent(uspConsent)); + } + + return "".concat(url).concat(queryParamStrings.length > 0 ? '?' + queryParamStrings.join('&') : ''); +} + +function isVideoRequest(bidRequest) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') && !__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner') || bidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; +} + +function createBannerBidResponses(oxResponseObj, _ref2) { + var bids = _ref2.bids, + startTime = _ref2.startTime; + var adUnits = oxResponseObj.ads.ad; + var bidResponses = []; + + for (var i = 0; i < adUnits.length; i++) { + var adUnit = adUnits[i]; + var adUnitIdx = parseInt(adUnit.idx, 10); + var bidResponse = {}; + bidResponse.requestId = bids[adUnitIdx].bidId; + + 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; + bidResponse.meta = {}; + + if (adUnit.brand_id) { + bidResponse.meta.brandId = adUnit.brand_id; + } + + if (adUnit.adv_id) { + bidResponse.meta.dspid = adUnit.adv_id; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; +} + +function getViewportDimensions(isIfr) { + var width; + var height; + var tWin = window; + var tDoc = document; + var docEl = tDoc.documentElement; + var body; + + 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 "".concat(width, "x").concat(height); +} + +function formatCustomParms(customKey, customParams) { + var value = customParams[customKey]; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["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 partitionByVideoBids(bidRequests) { + return bidRequests.reduce(function (acc, bid) { + // Fallback to banner ads if nothing specified + if (isVideoRequest(bid)) { + acc[0].push(bid); + } else { + acc[1].push(bid); + } + + return acc; + }, [[], []]); +} + +function getMediaTypeFromRequest(serverRequest) { + return /avjp$/.test(serverRequest.url) ? __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */] : __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; +} + +function buildCommonQueryParamsFromBids(bids, bidderRequest) { + var isInIframe = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["inIframe"](); + var defaultParams; + defaultParams = { + ju: __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('pageUrl') || bidderRequest.refererInfo.referer, + ch: document.charSet || document.characterSet, + res: "".concat(screen.width, "x").concat(screen.height, "x").concat(screen.colorDepth), + ifr: isInIframe, + tz: new Date().getTimezoneOffset(), + tws: getViewportDimensions(isInIframe), + be: 1, + bc: bids[0].params.bc || "".concat(BIDDER_CONFIG, "_").concat(BIDDER_VERSION), + dddid: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_map"](bids, function (bid) { + return bid.transactionId; + }).join(','), + nocache: new Date().getTime() + }; + + if (bids[0].params.platform) { + defaultParams.ph = bids[0].params.platform; + } + + if (bidderRequest.gdprConsent) { + var gdprConsentConfig = bidderRequest.gdprConsent; + + if (gdprConsentConfig.consentString !== undefined) { + defaultParams.gdpr_consent = gdprConsentConfig.consentString; + } + + if (gdprConsentConfig.gdprApplies !== undefined) { + defaultParams.gdpr = gdprConsentConfig.gdprApplies ? 1 : 0; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('consentManagement.cmpApi') === 'iab') { + defaultParams.x_gdpr_f = 1; + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + defaultParams.us_privacy = bidderRequest.uspConsent; + } // normalize publisher common id + + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bids[0], 'crumbs.pubcid')) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](bids[0], 'userId.pubcid', __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bids[0], 'crumbs.pubcid')); + } + + defaultParams = appendUserIdsToQueryParams(defaultParams, bids[0].userId); // supply chain support + + if (bids[0].schain) { + defaultParams.schain = serializeSupplyChain(bids[0].schain); + } + + return defaultParams; +} + +function appendUserIdsToQueryParams(queryParams, userIds) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_each"](userIds, function (userIdObjectOrValue, userIdProviderKey) { + var key = USER_ID_CODE_TO_QUERY_ARG[userIdProviderKey]; + + if (USER_ID_CODE_TO_QUERY_ARG.hasOwnProperty(userIdProviderKey)) { + switch (userIdProviderKey) { + case 'digitrustid': + queryParams[key] = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](userIdObjectOrValue, 'data.id'); + break; + + case 'lipb': + queryParams[key] = userIdObjectOrValue.lipbid; + break; + + case 'parrableId': + queryParams[key] = userIdObjectOrValue.eid; + break; + + default: + queryParams[key] = userIdObjectOrValue; + } + } + }); + + return queryParams; +} + +function serializeSupplyChain(supplyChain) { + return "".concat(supplyChain.ver, ",").concat(supplyChain.complete, "!").concat(serializeSupplyChainNodes(supplyChain.nodes)); +} + +function serializeSupplyChainNodes(supplyChainNodes) { + var supplyChainNodePropertyOrder = ['asi', 'sid', 'hp', 'rid', 'name', 'domain']; + return supplyChainNodes.map(function (supplyChainNode) { + return supplyChainNodePropertyOrder.map(function (property) { + return supplyChainNode[property] || ''; + }).join(','); + }).join('!'); +} + +function buildOXBannerRequest(bids, bidderRequest) { + var customParamsForAllBids = []; + var hasCustomParam = false; + var queryParams = buildCommonQueryParamsFromBids(bids, bidderRequest); + + var auids = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_map"](bids, function (bid) { + return bid.params.unit; + }); + + queryParams.aus = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_map"](bids, function (bid) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseSizesInput"](bid.mediaTypes.banner.sizes).join(','); + }).join('|'); + queryParams.divIds = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_map"](bids, function (bid) { + return encodeURIComponent(bid.adUnitCode); + }).join(','); + + if (auids.some(function (auid) { + return auid; + })) { + queryParams.auid = auids.join(','); + } + + if (bids.some(function (bid) { + return bid.params.doNotTrack; + })) { + queryParams.ns = 1; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('coppa') === true || bids.some(function (bid) { + return bid.params.coppa; + })) { + queryParams.tfcd = 1; + } + + bids.forEach(function (bid) { + if (bid.params.customParams) { + var customParamsForBid = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_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) { + queryParams.tps = customParamsForAllBids.join(','); + } + + var customFloorsForAllBids = []; + var hasCustomFloor = false; + bids.forEach(function (bid) { + var floor = getBidFloor(bid, __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]); + + if (floor) { + customFloorsForAllBids.push(floor); + hasCustomFloor = true; + } else { + customFloorsForAllBids.push(0); + } + }); + + if (hasCustomFloor) { + queryParams.aumfs = customFloorsForAllBids.join(','); + } + + var url = queryParams.ph ? "https://u.openx.net/w/1.0/arj" : "https://".concat(bids[0].params.delDomain, "/w/1.0/arj"); + return { + method: 'GET', + url: url, + data: queryParams, + payload: { + 'bids': bids, + 'startTime': new Date() + } + }; +} + +function buildOXVideoRequest(bid, bidderRequest) { + var oxVideoParams = generateVideoParameters(bid, bidderRequest); + var url = oxVideoParams.ph ? "https://u.openx.net/v/1.0/avjp" : "https://".concat(bid.params.delDomain, "/v/1.0/avjp"); + return { + method: 'GET', + url: url, + data: oxVideoParams, + payload: { + 'bid': bid, + 'startTime': new Date() + } + }; +} + +function generateVideoParameters(bid, bidderRequest) { + var queryParams = buildCommonQueryParamsFromBids([bid], bidderRequest); + var oxVideoConfig = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'params.video') || {}; + var context = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + var playerSize = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize'); + var width; + var height; // normalize config for video size + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](bid.sizes) && bid.sizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](bid.sizes[0])) { + width = parseInt(bid.sizes[0], 10); + height = parseInt(bid.sizes[1], 10); + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](bid.sizes) && __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](bid.sizes[0]) && bid.sizes[0].length === 2) { + width = parseInt(bid.sizes[0][0], 10); + height = parseInt(bid.sizes[0][1], 10); + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](playerSize) && playerSize.length === 2) { + width = parseInt(playerSize[0], 10); + height = parseInt(playerSize[1], 10); + } + + Object.keys(oxVideoConfig).forEach(function (key) { + if (key === 'openrtb') { + oxVideoConfig[key].w = width || oxVideoConfig[key].w; + oxVideoConfig[key].v = height || oxVideoConfig[key].v; + queryParams[key] = JSON.stringify(oxVideoConfig[key]); + } else if (!(key in queryParams) && key !== 'url') { + // only allow video-related attributes + queryParams[key] = oxVideoConfig[key]; + } + }); + queryParams.auid = bid.params.unit; // override prebid config with openx config if available + + queryParams.vwd = width || oxVideoConfig.vwd; + queryParams.vht = height || oxVideoConfig.vht; + + if (context === 'outstream') { + queryParams.vos = '101'; + } + + if (oxVideoConfig.mimes) { + queryParams.vmimes = oxVideoConfig.mimes; + } + + if (bid.params.test) { + queryParams.vtest = 1; + } + + return queryParams; +} + +function createVideoBidResponses(response, _ref3) { + var bid = _ref3.bid, + startTime = _ref3.startTime; + var bidResponses = []; + + if (response !== undefined && response.vastUrl !== '' && response.pub_rev > 0) { + var vastQueryParams = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseUrl"](response.vastUrl).search || {}; + var bidResponse = {}; + bidResponse.requestId = bid.bidId; // default 5 mins + + bidResponse.ttl = 300; // true is net, false is gross + + bidResponse.netRevenue = true; + bidResponse.currency = response.currency; + bidResponse.cpm = parseInt(response.pub_rev, 10) / 1000; + bidResponse.width = parseInt(response.width, 10); + bidResponse.height = parseInt(response.height, 10); + bidResponse.creativeId = response.adid; + bidResponse.vastUrl = response.vastUrl; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; // enrich adunit with vast parameters + + response.ph = vastQueryParams.ph; + response.colo = vastQueryParams.colo; + response.ts = vastQueryParams.ts; + bidResponses.push(bidResponse); + } + + return bidResponses; +} + +function getBidFloor(bidRequest, mediaType) { + var floorInfo = {}; + + if (typeof bidRequest.getFloor === 'function') { + floorInfo = bidRequest.getFloor({ + currency: 'USD', + mediaType: mediaType, + size: '*' + }); + } + + var floor = floorInfo.floor || bidRequest.params.customFloor || 0; + return Math.round(floor * 1000); // normalize to microCpm +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[567]); \ No newline at end of file diff --git a/build/dist/optimeraBidAdapter.js b/build/dist/optimeraBidAdapter.js new file mode 100644 index 00000000000..5b811ad1538 --- /dev/null +++ b/build/dist/optimeraBidAdapter.js @@ -0,0 +1,114 @@ +pbjsChunk([152],{ + +/***/ 569: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(570); + + +/***/ }), + +/***/ 570: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); + + +var BIDDER_CODE = 'optimera'; +var SCORES_BASE_URL = 'https://dyv1bugovvq1g.cloudfront.net/'; +var 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; + } + + 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; + + if (typeof validBidRequests[0].params.clientID !== 'undefined') { + var clientID = validBidRequests[0].params.clientID; + var scoresURL = "".concat(SCORES_BASE_URL + clientID, "/").concat(optimeraHost).concat(optimeraPathName, ".js"); + return { + method: 'GET', + url: scoresURL, + payload: validBidRequests + }; + } + + return {}; + }, + + /** + * 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 += 1) { + if (typeof validBids[i].params.clientID !== 'undefined') { + if (validBids[i].adUnitCode in scores) { + var deviceDealId = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(scores, "device.".concat(validBids[i].params.device, ".").concat(validBids[i].adUnitCode)); + dealId = deviceDealId || scores[validBids[i].adUnitCode]; + } + + var bidResponse = { + requestId: validBids[i].bidId, + ad: '
', + cpm: 0.01, + width: 0, + height: 0, + dealId: dealId, + ttl: 300, + creativeId: '1', + netRevenue: '0', + currency: 'USD' + }; + bidResponses.push(bidResponse); + } + } + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[569]); \ No newline at end of file diff --git a/build/dist/orbidderBidAdapter.js b/build/dist/orbidderBidAdapter.js new file mode 100644 index 00000000000..8fb3a69e37a --- /dev/null +++ b/build/dist/orbidderBidAdapter.js @@ -0,0 +1,104 @@ +pbjsChunk([151],{ + +/***/ 571: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(572); + + +/***/ }), + +/***/ 572: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_1__src_storageManager_js__["b" /* getStorageManager */])(); +var spec = { + code: 'orbidder', + orbidderHost: function () { + var ret = 'https://orbidder.otto.de'; + + try { + ret = storage.getDataFromLocalStorage('ov_orbidder_host') || ret; + } catch (e) {} + + return ret; + }(), + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.sizes && bid.bidId && bid.params && bid.params.accountId && typeof bid.params.accountId === 'string' && bid.params.placementId && typeof bid.params.placementId === 'string' && (typeof bid.params.bidfloor === 'undefined' || typeof bid.params.bidfloor === 'number') && (typeof bid.params.profile === 'undefined' || _typeof(bid.params.profile) === 'object')); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bidRequest) { + var referer = ''; + + if (bidderRequest && bidderRequest.refererInfo) { + referer = bidderRequest.refererInfo.referer || ''; + } + + var ret = { + url: "".concat(spec.orbidderHost, "/bid"), + method: 'POST', + options: { + withCredentials: true + }, + data: { + v: pbjs.version, + pageUrl: referer, + bidId: bidRequest.bidId, + auctionId: bidRequest.auctionId, + transactionId: bidRequest.transactionId, + adUnitCode: bidRequest.adUnitCode, + bidRequestCount: bidRequest.bidRequestCount, + sizes: bidRequest.sizes, + params: bidRequest.params + } + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + ret.data.gdprConsent = { + consentString: bidderRequest.gdprConsent.consentString, + consentRequired: typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' && bidderRequest.gdprConsent.gdprApplies + }; + } + + return ret; + }); + }, + interpretResponse: function interpretResponse(serverResponse) { + var bidResponses = []; + serverResponse = serverResponse.body; + + if (serverResponse && serverResponse.length > 0) { + serverResponse.forEach(function (bid) { + var bidResponse = {}; + + for (var _i = 0, _arr = ['requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId', 'netRevenue', 'currency']; _i < _arr.length; _i++) { + var requiredKey = _arr[_i]; + + if (!bid.hasOwnProperty(requiredKey)) { + return []; + } + + bidResponse[requiredKey] = bid[requiredKey]; + } + + bidResponses.push(bidResponse); + }); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[571]); \ No newline at end of file diff --git a/build/dist/otmBidAdapter.js b/build/dist/otmBidAdapter.js new file mode 100644 index 00000000000..8b1ff2514f6 --- /dev/null +++ b/build/dist/otmBidAdapter.js @@ -0,0 +1,106 @@ +pbjsChunk([150],{ + +/***/ 573: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(574); + + +/***/ }), + +/***/ 574: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var spec = { + code: 'otm', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.tid; + }, + buildRequests: function buildRequests(bidRequests) { + var requests = bidRequests.map(function (bid) { + var size = getMaxPrioritySize(bid.sizes); + var params = { + tz: getTz(), + w: size[0], + h: size[1], + s: bid.params.tid, + bidid: bid.bidId, + transactionid: bid.transactionId, + auctionid: bid.auctionId, + bidfloor: bid.params.bidfloor + }; + return { + method: 'GET', + url: 'https://ssp.otm-r.com/adjson', + data: params + }; + }); + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + if (!serverResponse || !serverResponse.body) { + return []; + } + + var answer = []; + serverResponse.body.forEach(function (bid) { + if (bid.ad) { + answer.push({ + requestId: bid.bidid, + cpm: bid.cpm, + width: bid.w, + height: bid.h, + creativeId: bid.creativeid, + currency: bid.currency || 'RUB', + netRevenue: true, + ad: bid.ad, + ttl: bid.ttl, + transactionId: bid.transactionid + }); + } + }); + return answer; + } +}; + +function getTz() { + return new Date().getTimezoneOffset(); +} + +function getMaxPrioritySize(sizes) { + var maxPrioritySize = null; + var sizesByPriority = [[300, 250], [240, 400], [728, 90], [300, 600], [970, 250], [300, 50], [320, 100]]; + + var sizeToString = function sizeToString(size) { + return size[0] + 'x' + size[1]; + }; + + var sizesAsString = sizes.map(sizeToString); + sizesByPriority.forEach(function (size) { + if (!maxPrioritySize) { + if (sizesAsString.indexOf(sizeToString(size)) !== -1) { + maxPrioritySize = size; + } + } + }); + + if (maxPrioritySize) { + return maxPrioritySize; + } else { + return sizes[0]; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[573]); \ No newline at end of file diff --git a/build/dist/outconBidAdapter.js b/build/dist/outconBidAdapter.js new file mode 100644 index 00000000000..35b3727eafe --- /dev/null +++ b/build/dist/outconBidAdapter.js @@ -0,0 +1,95 @@ +pbjsChunk([149],{ + +/***/ 575: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(576); + + +/***/ }), + +/***/ 576: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + +var BIDDER_CODE = 'outcon'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['banner', 'video'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!((bid.params.pod || bid.params.internalId && bid.params.publisher) && bid.params.env); + }, + buildRequests: function buildRequests(validBidRequests) { + for (var i = 0; i < validBidRequests.length; i++) { + var url = ''; + var par = ''; + if (validBidRequests[i].params.pod != undefined) par = 'get?pod=' + validBidRequests[i].params.pod + '&bidId=' + validBidRequests[i].bidId;else par = 'get?internalId=' + validBidRequests[i].params.internalId + '&publisher=' + validBidRequests[i].params.publisher + '&bidId=' + validBidRequests[i].bidId; + par = par + '&vast=true'; + + switch (validBidRequests[i].params.env) { + case 'test': + par = par + '&demo=true'; + url = 'https://test.outcondigital.com/ad/' + par; + break; + + case 'api': + url = 'https://api.outcondigital.com/ad/' + par; + break; + + case 'stg': + url = 'https://stg.outcondigital.com/ad/' + par; + break; + } + + return { + method: 'GET', + url: url, + data: {} + }; + } + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var bidResponse = { + requestId: serverResponse.body.bidId, + cpm: serverResponse.body.cpm, + width: serverResponse.body.creatives[0].width, + height: serverResponse.body.creatives[0].height, + creativeId: serverResponse.body.creatives[0].id, + currency: serverResponse.body.cur, + netRevenue: true, + ttl: 300, + ad: wrapDisplayUrl(serverResponse.body.creatives[0].url, serverResponse.body.type), + vastImpUrl: serverResponse.body.trackingURL, + mediaType: serverResponse.body.type + }; + + if (serverResponse.body.type == 'video') { + _extends(bidResponse, { + vastUrl: serverResponse.body.vastURL, + ttl: 3600 + }); + } + + bidResponses.push(bidResponse); + return bidResponses; + } +}; + +function wrapDisplayUrl(displayUrl, type) { + if (type == 'video') return "
"); + if (type == 'banner') return "
"); + return null; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[575]); \ No newline at end of file diff --git a/build/dist/ozoneBidAdapter.js b/build/dist/ozoneBidAdapter.js new file mode 100644 index 00000000000..1044f013759 --- /dev/null +++ b/build/dist/ozoneBidAdapter.js @@ -0,0 +1,1453 @@ +pbjsChunk([148],{ + +/***/ 577: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(578); + + +/***/ }), + +/***/ 578: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["injectAdIdsIntoAllBidResponses"] = injectAdIdsIntoAllBidResponses; +/* harmony export (immutable) */ __webpack_exports__["checkDeepArray"] = checkDeepArray; +/* harmony export (immutable) */ __webpack_exports__["defaultSize"] = defaultSize; +/* harmony export (immutable) */ __webpack_exports__["ozoneGetWinnerForRequestBid"] = ozoneGetWinnerForRequestBid; +/* harmony export (immutable) */ __webpack_exports__["ozoneGetAllBidsForBidId"] = ozoneGetAllBidsForBidId; +/* harmony export (immutable) */ __webpack_exports__["getRoundedBid"] = getRoundedBid; +/* harmony export (immutable) */ __webpack_exports__["getGranularityKeyName"] = getGranularityKeyName; +/* harmony export (immutable) */ __webpack_exports__["getGranularityObject"] = getGranularityObject; +/* harmony export (immutable) */ __webpack_exports__["ozoneAddStandardProperties"] = ozoneAddStandardProperties; +/* harmony export (immutable) */ __webpack_exports__["getWidthAndHeightFromVideoObject"] = getWidthAndHeightFromVideoObject; +/* harmony export (immutable) */ __webpack_exports__["playerSizeIsNestedArray"] = playerSizeIsNestedArray; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_cpmBucketManager_js__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_Renderer_js__ = __webpack_require__(11); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + +var BIDDER_CODE = 'ozone'; +var ALLOWED_LOTAME_PARAMS = ['oz_lotameid', 'oz_lotamepid', 'oz_lotametpid']; // *** PROD *** + +var OZONEURI = 'https://elb.the-ozone-project.com/openrtb2/auction'; +var OZONECOOKIESYNC = 'https://elb.the-ozone-project.com/static/load-cookie.html'; +var OZONE_RENDERER_URL = 'https://prebid.the-ozone-project.com/ozone-renderer.js'; +var OZONEVERSION = '2.4.0'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + cookieSyncBag: { + 'publisherId': null, + 'siteId': null, + 'userIdObject': {} + }, + // variables we want to make available to cookie sync + propertyBag: { + 'lotameWasOverridden': 0, + 'pageId': null, + 'buildRequestsStart': 0, + 'buildRequestsEnd': 0 + }, + + /* allow us to store vars in instance scope - needs to be an object to be mutable */ + + /** + * Basic check to see whether required parameters are in the request. + * @param bid + * @returns {boolean} + */ + isBidRequestValid: function isBidRequestValid(bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: isBidRequestValid : ', __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig(), bid); + var adUnitCode = bid.adUnitCode; // adunit[n].code + + if (!bid.params.hasOwnProperty('placementId')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : missing placementId : siteId, placementId and publisherId are REQUIRED', adUnitCode); + return false; + } + + if (!this.isValidPlacementId(bid.params.placementId)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : placementId must be exactly 10 numeric characters', adUnitCode); + return false; + } + + if (!bid.params.hasOwnProperty('publisherId')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : missing publisherId : siteId, placementId and publisherId are REQUIRED', adUnitCode); + return false; + } + + if (!bid.params.publisherId.toString().match(/^[a-zA-Z0-9\-]{12}$/)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : publisherId must be exactly 12 alphanumieric characters including hyphens', adUnitCode); + return false; + } + + if (!bid.params.hasOwnProperty('siteId')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : missing siteId : siteId, placementId and publisherId are REQUIRED', adUnitCode); + return false; + } + + if (!bid.params.siteId.toString().match(/^[0-9]{10}$/)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : siteId must be exactly 10 numeric characters', adUnitCode); + return false; + } + + if (bid.params.hasOwnProperty('customParams')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : customParams should be renamed to customData', adUnitCode); + return false; + } + + if (bid.params.hasOwnProperty('customData')) { + if (!Array.isArray(bid.params.customData)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : customData is not an Array', adUnitCode); + return false; + } + + if (bid.params.customData.length < 1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : customData is an array but does not contain any elements', adUnitCode); + return false; + } + + if (!bid.params.customData[0].hasOwnProperty('targeting')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : customData[0] does not contain "targeting"', adUnitCode); + return false; + } + + if (_typeof(bid.params.customData[0]['targeting']) != 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : customData[0] targeting is not an object', adUnitCode); + return false; + } + } + + if (bid.params.hasOwnProperty('lotameData')) { + if (_typeof(bid.params.lotameData) !== 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: OZONE BID ADAPTER VALIDATION FAILED : lotameData is not an object', adUnitCode); + return false; + } + } + + if (bid.hasOwnProperty('mediaTypes') && bid.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */])) { + if (!bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]].hasOwnProperty('context')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: No video context key/value in bid. Rejecting bid: ', bid); + return false; + } + + if (bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]].context !== 'instream' && bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]].context !== 'outstream') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: video.context is invalid. Only instream/outstream video is supported. Rejecting bid: ', bid); + return false; + } + } // guard against hacks in GET parameters that we might allow + + + var arrLotameOverride = this.getLotameOverrideParams(); // lotame override, test params. All 3 must be present, or none. + + var lotameKeys = Object.keys(arrLotameOverride); + + if (lotameKeys.length === ALLOWED_LOTAME_PARAMS.length) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: VALIDATION : arrLotameOverride', arrLotameOverride); + + for (var i in lotameKeys) { + if (!arrLotameOverride[ALLOWED_LOTAME_PARAMS[i]].toString().match(/^[0-9a-zA-Z]+$/)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: Only letters & numbers allowed in lotame override: ' + i.toString() + ': ' + arrLotameOverride[ALLOWED_LOTAME_PARAMS[i]].toString() + '. Rejecting bid: ', bid); + return false; + } + } + } else if (lotameKeys.length > 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: VALIDATION : arrLotameOverride', arrLotameOverride); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: lotame override params are incomplete. You must set all ' + ALLOWED_LOTAME_PARAMS.length + ': ' + JSON.stringify(ALLOWED_LOTAME_PARAMS) + ', . Rejecting bid: ', bid); + return false; + } + + return true; + }, + + /** + * Split this out so that we can validate the placementId and also the override GET parameter ozstoredrequest + * @param placementId + */ + isValidPlacementId: function isValidPlacementId(placementId) { + return placementId.toString().match(/^[0-9]{10}$/); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var _this = this; + + this.propertyBag.buildRequestsStart = new Date().getTime(); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: buildRequests time: ".concat(this.propertyBag.buildRequestsStart, " ozone v ").concat(OZONEVERSION, " validBidRequests"), validBidRequests, 'bidderRequest', bidderRequest); // First check - is there any config to block this request? + + if (this.blockTheRequest()) { + return []; + } + + var htmlParams = { + 'publisherId': '', + 'siteId': '' + }; + + if (validBidRequests.length > 0) { + this.cookieSyncBag.userIdObject = _extends(this.cookieSyncBag.userIdObject, this.findAllUserIds(validBidRequests[0])); + this.cookieSyncBag.siteId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.siteId'); + this.cookieSyncBag.publisherId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.publisherId'); + htmlParams = validBidRequests[0].params; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: cookie sync bag', this.cookieSyncBag); + var singleRequest = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('ozone.singleRequest'); + singleRequest = singleRequest !== false; // undefined & true will be true + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: config ozone.singleRequest : ', singleRequest); + var ozoneRequest = {}; // we only want to set specific properties on this, not validBidRequests[0].params + + delete ozoneRequest.test; // don't allow test to be set in the config - ONLY use $_GET['pbjs_debug'] + + if (bidderRequest && bidderRequest.gdprConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: ADDING GDPR info'); + var apiVersion = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest.gdprConsent, 'apiVersion', '1'); + ozoneRequest.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0, + apiVersion: apiVersion + } + }; + + if (ozoneRequest.regs.ext.gdpr) { + ozoneRequest.user = ozoneRequest.user || {}; + ozoneRequest.user.ext = { + 'consent': bidderRequest.gdprConsent.consentString + }; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: **** Strange CMP info: bidderRequest.gdprConsent exists BUT bidderRequest.gdprConsent.gdprApplies is false. See bidderRequest logged above. ****'); + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: WILL NOT ADD GDPR info; no bidderRequest.gdprConsent object was present.'); + } + + var getParams = this.getGetParametersAsObject(); + var ozTestMode = getParams.hasOwnProperty('oztestmode') ? getParams.oztestmode : null; // this can be any string, it's used for testing ads + + ozoneRequest.device = { + 'w': window.innerWidth, + 'h': window.innerHeight + }; + var placementIdOverrideFromGetParam = this.getPlacementIdOverrideFromGetParam(); // null or string + + var lotameDataSingle = {}; // we will capture lotame data once & send it to the server as ext.ozone.lotameData + // build the array of params to attach to `imp` + + var tosendtags = validBidRequests.map(function (ozoneBidRequest) { + var obj = {}; + + var placementId = placementIdOverrideFromGetParam || _this.getPlacementId(ozoneBidRequest); // prefer to use a valid override param, else the bidRequest placement Id + + + obj.id = ozoneBidRequest.bidId; // this causes an error if we change it to something else, even if you update the bidRequest object: "WARNING: Bidder ozone made bid for unknown request ID: mb7953.859498327448. Ignoring." + + obj.tagid = placementId; + obj.secure = window.location.protocol === 'https:' ? 1 : 0; // is there a banner (or nothing declared, so banner is the default)? + + var arrBannerSizes = []; + + if (!ozoneBidRequest.hasOwnProperty('mediaTypes')) { + if (ozoneBidRequest.hasOwnProperty('sizes')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: no mediaTypes detected - will use the sizes array in the config root'); + arrBannerSizes = ozoneBidRequest.sizes; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: no mediaTypes detected, no sizes array in the config root either. Cannot set sizes for banner type'); + } + } else { + if (ozoneBidRequest.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */])) { + arrBannerSizes = ozoneBidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]].sizes; + /* Note - if there is a sizes element in the config root it will be pushed into here */ + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: setting banner size from the mediaTypes.banner element for bidId ' + obj.id + ': ', arrBannerSizes); + } + + if (ozoneBidRequest.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */])) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: openrtb 2.5 compliant video'); // examine all the video attributes in the config, and either put them into obj.video if allowed by IAB2.5 or else in to obj.video.ext + + if (_typeof(ozoneBidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]]) == 'object') { + var childConfig = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](ozoneBidRequest, 'params.video', {}); + obj.video = _this.unpackVideoConfigIntoIABformat(ozoneBidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], childConfig); + obj.video = _this.addVideoDefaults(obj.video, ozoneBidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], childConfig); + } // we need to duplicate some of the video values + + + var wh = getWidthAndHeightFromVideoObject(obj.video); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: setting video object from the mediaTypes.video element: ' + obj.id + ':', obj.video, 'wh=', wh); + + if (wh && _typeof(wh) === 'object') { + obj.video.w = wh['w']; + obj.video.h = wh['h']; + + if (playerSizeIsNestedArray(obj.video)) { + // this should never happen; it was in the original spec for this change though. + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: setting obj.video.format to be an array of objects'); + obj.video.ext.format = [wh]; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: setting obj.video.format to be an object'); + obj.video.ext.format = wh; + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('OZONE: cannot set w, h & format values for video; the config is not right'); + } + } // Native integration is not complete yet + + + if (ozoneBidRequest.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */])) { + obj.native = ozoneBidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]]; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: setting native object from the mediaTypes.native element: ' + obj.id + ':', obj.native); + } + } + + if (arrBannerSizes.length > 0) { + // build the banner request using banner sizes we found in either possible location: + obj.banner = { + topframe: 1, + w: arrBannerSizes[0][0] || 0, + h: arrBannerSizes[0][1] || 0, + format: arrBannerSizes.map(function (s) { + return { + w: s[0], + h: s[1] + }; + }) + }; + } // these 3 MUST exist - we check them in the validation method + + + obj.placementId = placementId; // build the imp['ext'] object + + obj.ext = { + 'prebid': { + 'storedrequest': { + 'id': placementId + } + }, + 'ozone': {} + }; + obj.ext.ozone.adUnitCode = ozoneBidRequest.adUnitCode; // eg. 'mpu' + + obj.ext.ozone.transactionId = ozoneBidRequest.transactionId; // this is the transactionId PER adUnit, common across bidders for this unit + + if (ozoneBidRequest.params.hasOwnProperty('customData')) { + obj.ext.ozone.customData = ozoneBidRequest.params.customData; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: obj.ext.ozone is ', obj.ext.ozone); + + if (ozTestMode != null) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: setting ozTestMode to ', ozTestMode); + + if (obj.ext.ozone.hasOwnProperty('customData')) { + for (var i = 0; i < obj.ext.ozone.customData.length; i++) { + obj.ext.ozone.customData[i]['targeting']['oztestmode'] = ozTestMode; + } + } else { + obj.ext.ozone.customData = [{ + 'settings': {}, + 'targeting': { + 'oztestmode': ozTestMode + } + }]; + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: no ozTestMode '); + } // now deal with lotame, including the optional override parameters + + + if (Object.keys(lotameDataSingle).length === 0) { + // we've not yet found lotameData, see if we can get it from this bid request object + lotameDataSingle = _this.tryGetLotameData(ozoneBidRequest); + } + + return obj; + }); // in v 2.0.0 we moved these outside of the individual ad slots + + var extObj = { + 'ozone': { + 'oz_pb_v': OZONEVERSION, + 'oz_rw': placementIdOverrideFromGetParam ? 1 : 0, + 'oz_lot_rw': this.propertyBag.lotameWasOverridden + } + }; + + if (validBidRequests.length > 0) { + var userIds = this.findAllUserIds(validBidRequests[0]); + + if (userIds.hasOwnProperty('pubcid')) { + extObj.ozone.pubcid = userIds.pubcid; + } + } + + extObj.ozone.pv = this.getPageId(); // attach the page ID that will be common to all auciton calls for this page if refresh() is called + + extObj.ozone.lotameData = lotameDataSingle; // 2.4.0 moved lotameData out of bid objects into the single ext.ozone area to remove duplication + + var ozOmpFloorDollars = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('ozone.oz_omp_floor'); // valid only if a dollar value (typeof == 'number') + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: oz_omp_floor dollar value = ', ozOmpFloorDollars); + + if (typeof ozOmpFloorDollars === 'number') { + extObj.ozone.oz_omp_floor = ozOmpFloorDollars; + } else if (typeof ozOmpFloorDollars !== 'undefined') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: oz_omp_floor is invalid - IF SET then this must be a number, representing dollar value eg. oz_omp_floor: 1.55. You have it set as a ' + _typeof(ozOmpFloorDollars)); + } + + var ozWhitelistAdserverKeys = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('ozone.oz_whitelist_adserver_keys'); + var useOzWhitelistAdserverKeys = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](ozWhitelistAdserverKeys) && ozWhitelistAdserverKeys.length > 0; + extObj.ozone.oz_kvp_rw = useOzWhitelistAdserverKeys ? 1 : 0; + var userExtEids = this.generateEids(validBidRequests); // generate the UserIDs in the correct format for UserId module + + ozoneRequest.site = { + 'publisher': { + 'id': htmlParams.publisherId + }, + 'page': document.location.href, + 'id': htmlParams.siteId + }; + ozoneRequest.test = getParams.hasOwnProperty('pbjs_debug') && getParams['pbjs_debug'] == 'true' ? 1 : 0; // this is for 2.2.1 + // coppa compliance + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](ozoneRequest, 'regs.coppa', 1); + } // return the single request object OR the array: + + + if (singleRequest) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: buildRequests starting to generate response for a single request'); + ozoneRequest.id = bidderRequest.auctionId; // Unique ID of the bid request, provided by the exchange. + + ozoneRequest.auctionId = bidderRequest.auctionId; // not sure if this should be here? + + ozoneRequest.imp = tosendtags; + ozoneRequest.ext = extObj; + ozoneRequest.source = { + 'tid': bidderRequest.auctionId + }; // RTB 2.5 : tid is Transaction ID that must be common across all participants in this bid request (e.g., potentially multiple exchanges). + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](ozoneRequest, 'user.ext.eids', userExtEids); + var ret = { + method: 'POST', + url: OZONEURI, + data: JSON.stringify(ozoneRequest), + bidderRequest: bidderRequest + }; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: buildRequests ozoneRequest for single = ', ozoneRequest); + this.propertyBag.buildRequestsEnd = new Date().getTime(); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: buildRequests going to return for single at time ".concat(this.propertyBag.buildRequestsEnd, " (took ").concat(this.propertyBag.buildRequestsEnd - this.propertyBag.buildRequestsStart, "ms): "), ret); + return ret; + } // not single request - pull apart the tosendtags array & return an array of objects each containing one element in the imp array. + + + var arrRet = tosendtags.map(function (imp) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: buildRequests starting to generate non-single response, working on imp : ', imp); + + var ozoneRequestSingle = _extends({}, ozoneRequest); + + imp.ext.ozone.pageAuctionId = bidderRequest['auctionId']; // make a note in the ext object of what the original auctionId was, in the bidderRequest object + + ozoneRequestSingle.id = imp.ext.ozone.transactionId; // Unique ID of the bid request, provided by the exchange. + + ozoneRequestSingle.auctionId = imp.ext.ozone.transactionId; // not sure if this should be here? + + ozoneRequestSingle.imp = [imp]; + ozoneRequestSingle.ext = extObj; + ozoneRequestSingle.source = { + 'tid': imp.ext.ozone.transactionId + }; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](ozoneRequestSingle, 'user.ext.eids', userExtEids); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: buildRequests ozoneRequestSingle (for non-single) = ', ozoneRequestSingle); + return { + method: 'POST', + url: OZONEURI, + data: JSON.stringify(ozoneRequestSingle), + bidderRequest: bidderRequest + }; + }); + this.propertyBag.buildRequestsEnd = new Date().getTime(); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: buildRequests going to return for non-single at time ".concat(this.propertyBag.buildRequestsEnd, " (took ").concat(this.propertyBag.buildRequestsEnd - this.propertyBag.buildRequestsStart, "ms): "), arrRet); + return arrRet; + }, + + /** + * Interpret the response if the array contains BIDDER elements, in the format: [ [bidder1 bid 1, bidder1 bid 2], [bidder2 bid 1, bidder2 bid 2] ] + * NOte that in singleRequest mode this will be called once, else it will be called for each adSlot's response + * + * Updated April 2019 to return all bids, not just the one we decide is the 'winner' + * + * @param serverResponse + * @param request + * @returns {*} + */ + interpretResponse: function interpretResponse(serverResponse, request) { + var _this2 = this; + + var startTime = new Date().getTime(); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: interpretResponse time: ".concat(startTime, " . Time between buildRequests done and interpretResponse start was ").concat(startTime - this.propertyBag.buildRequestsEnd, "ms")); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: serverResponse, request", serverResponse, request); + serverResponse = serverResponse.body || {}; // note that serverResponse.id value is the auction_id we might want to use for reporting reasons. + + if (!serverResponse.hasOwnProperty('seatbid')) { + return []; + } + + if (_typeof(serverResponse.seatbid) !== 'object') { + return []; + } + + var arrAllBids = []; + var enhancedAdserverTargeting = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('ozone.enhancedAdserverTargeting'); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: enhancedAdserverTargeting', enhancedAdserverTargeting); + + if (typeof enhancedAdserverTargeting == 'undefined') { + enhancedAdserverTargeting = true; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: enhancedAdserverTargeting', enhancedAdserverTargeting); + serverResponse.seatbid = injectAdIdsIntoAllBidResponses(serverResponse.seatbid); // we now make sure that each bid in the bidresponse has a unique (within page) adId attribute. + + serverResponse.seatbid = this.removeSingleBidderMultipleBids(serverResponse.seatbid); + var ozOmpFloorDollars = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('ozone.oz_omp_floor'); // valid only if a dollar value (typeof == 'number') + + var addOzOmpFloorDollars = typeof ozOmpFloorDollars === 'number'; + var ozWhitelistAdserverKeys = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('ozone.oz_whitelist_adserver_keys'); + var useOzWhitelistAdserverKeys = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](ozWhitelistAdserverKeys) && ozWhitelistAdserverKeys.length > 0; + + for (var i = 0; i < serverResponse.seatbid.length; i++) { + var sb = serverResponse.seatbid[i]; + + var _loop = function _loop(j) { + var thisRequestBid = _this2.getBidRequestForBidId(sb.bid[j].impid, request.bidderRequest.bids); + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE seatbid:".concat(i, ", bid:").concat(j, " Going to set default w h for seatbid/bidRequest"), sb.bid[j], thisRequestBid); + + var _defaultSize = defaultSize(thisRequestBid), + defaultWidth = _defaultSize.defaultWidth, + defaultHeight = _defaultSize.defaultHeight; + + var thisBid = ozoneAddStandardProperties(sb.bid[j], defaultWidth, defaultHeight); + var videoContext = null; + var isVideo = false; + var bidType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](thisBid, 'ext.prebid.type'); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: this bid type is : ".concat(bidType), j); + + if (bidType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]) { + isVideo = true; + videoContext = _this2.getVideoContextForBidId(thisBid.bidId, request.bidderRequest.bids); // should be instream or outstream (or null if error) + + if (videoContext === 'outstream') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: going to attach a renderer to OUTSTREAM video : ', j); + thisBid.renderer = newRenderer(thisBid.bidId); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: bid is not an outstream video, will not attach a renderer: ', j); + } + } + + var adserverTargeting = {}; + + if (enhancedAdserverTargeting) { + var allBidsForThisBidid = ozoneGetAllBidsForBidId(thisBid.bidId, serverResponse.seatbid); // add all the winning & non-winning bids for this bidId: + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: Going to iterate allBidsForThisBidId', allBidsForThisBidid); + Object.keys(allBidsForThisBidid).forEach(function (bidderName, index, ar2) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: adding adserverTargeting for ".concat(bidderName, " for bidId ").concat(thisBid.bidId)); // let bidderName = bidderNameWH.split('_')[0]; + + adserverTargeting['oz_' + bidderName] = bidderName; + adserverTargeting['oz_' + bidderName + '_crid'] = String(allBidsForThisBidid[bidderName].crid); + adserverTargeting['oz_' + bidderName + '_adv'] = String(allBidsForThisBidid[bidderName].adomain); + adserverTargeting['oz_' + bidderName + '_adId'] = String(allBidsForThisBidid[bidderName].adId); + adserverTargeting['oz_' + bidderName + '_pb_r'] = getRoundedBid(allBidsForThisBidid[bidderName].price, allBidsForThisBidid[bidderName].ext.prebid.type); + + if (allBidsForThisBidid[bidderName].hasOwnProperty('dealid')) { + adserverTargeting['oz_' + bidderName + '_dealid'] = String(allBidsForThisBidid[bidderName].dealid); + } + + if (addOzOmpFloorDollars) { + adserverTargeting['oz_' + bidderName + '_omp'] = allBidsForThisBidid[bidderName].price >= ozOmpFloorDollars ? '1' : '0'; + } + + if (isVideo) { + adserverTargeting['oz_' + bidderName + '_vid'] = videoContext; // outstream or instream + } + + var flr = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](allBidsForThisBidid[bidderName], 'ext.bidder.ozone.floor', null); + + if (flr != null) { + adserverTargeting['oz_' + bidderName + '_flr'] = flr; + } + + var rid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](allBidsForThisBidid[bidderName], 'ext.bidder.ozone.ruleId', null); + + if (rid != null) { + adserverTargeting['oz_' + bidderName + '_rid'] = rid; + } + + if (bidderName.match(/^ozappnexus/)) { + adserverTargeting['oz_' + bidderName + '_sid'] = String(allBidsForThisBidid[bidderName].cid); + } + }); + } else { + if (useOzWhitelistAdserverKeys) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('OZONE: You have set a whitelist of adserver keys but this will be ignored because ozone.enhancedAdserverTargeting is set to false. No per-bid keys will be sent to adserver.'); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: ozone.enhancedAdserverTargeting is set to false, so no per-bid keys will be sent to adserver.'); + } + } // also add in the winning bid, to be sent to dfp + + + var _ozoneGetWinnerForReq = ozoneGetWinnerForRequestBid(thisBid.bidId, serverResponse.seatbid), + winningSeat = _ozoneGetWinnerForReq.seat, + winningBid = _ozoneGetWinnerForReq.bid; + + adserverTargeting['oz_auc_id'] = String(request.bidderRequest.auctionId); + adserverTargeting['oz_winner'] = String(winningSeat); + + if (enhancedAdserverTargeting) { + adserverTargeting['oz_imp_id'] = String(winningBid.impid); + adserverTargeting['oz_pb_v'] = OZONEVERSION; + } + + if (useOzWhitelistAdserverKeys) { + // delete any un-whitelisted keys + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: Going to filter out adserver targeting keys not in the whitelist: ', ozWhitelistAdserverKeys); + Object.keys(adserverTargeting).forEach(function (key) { + if (ozWhitelistAdserverKeys.indexOf(key) === -1) { + delete adserverTargeting[key]; + } + }); + } + + thisBid.adserverTargeting = adserverTargeting; + arrAllBids.push(thisBid); + }; + + for (var j = 0; j < sb.bid.length; j++) { + _loop(j); + } + } + + var endTime = new Date().getTime(); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("OZONE: interpretResponse going to return at time ".concat(endTime, " (took ").concat(endTime - startTime, "ms) Time from buildRequests Start -> interpretRequests End = ").concat(endTime - this.propertyBag.buildRequestsStart, "ms"), arrAllBids); + return arrAllBids; + }, + + /** + * If a bidder bids for > 1 size for an adslot, allow only the highest bid + * @param seatbid object (serverResponse.seatbid) + */ + removeSingleBidderMultipleBids: function removeSingleBidderMultipleBids(seatbid) { + var ret = []; + + for (var i = 0; i < seatbid.length; i++) { + var sb = seatbid[i]; + var retSeatbid = { + 'seat': sb.seat, + 'bid': [] + }; + var bidIds = []; + + for (var j = 0; j < sb.bid.length; j++) { + var candidate = sb.bid[j]; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["contains"](bidIds, candidate.impid)) { + continue; // we've already fully assessed this impid, found the highest bid from this seat for it + } + + bidIds.push(candidate.impid); + + for (var k = j + 1; k < sb.bid.length; k++) { + if (sb.bid[k].impid === candidate.impid && sb.bid[k].price > candidate.price) { + candidate = sb.bid[k]; + } + } + + retSeatbid.bid.push(candidate); + } + + ret.push(retSeatbid); + } + + return ret; + }, + // see http://prebid.org/dev-docs/bidder-adaptor.html#registering-user-syncs + getUserSyncs: function getUserSyncs(optionsType, serverResponse, gdprConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getUserSyncs optionsType, serverResponse, gdprConsent, cookieSyncBag', optionsType, serverResponse, gdprConsent, this.cookieSyncBag); + + if (!serverResponse || serverResponse.length === 0) { + return []; + } + + if (optionsType.iframeEnabled) { + var arrQueryString = []; + + if (document.location.search.match(/pbjs_debug=true/)) { + arrQueryString.push('pbjs_debug=true'); + } + + arrQueryString.push('gdpr=' + (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](gdprConsent, 'gdprApplies', false) ? '1' : '0')); + arrQueryString.push('gdpr_consent=' + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](gdprConsent, 'consentString', '')); + var objKeys = Object.getOwnPropertyNames(this.cookieSyncBag.userIdObject); + + for (var idx in objKeys) { + var keyname = objKeys[idx]; + arrQueryString.push(keyname + '=' + this.cookieSyncBag.userIdObject[keyname]); + } + + arrQueryString.push('publisherId=' + this.cookieSyncBag.publisherId); + arrQueryString.push('siteId=' + this.cookieSyncBag.siteId); + arrQueryString.push('cb=' + Date.now()); + var strQueryString = arrQueryString.join('&'); + + if (strQueryString.length > 0) { + strQueryString = '?' + strQueryString; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getUserSyncs going to return cookie sync url : ' + OZONECOOKIESYNC + strQueryString); + return [{ + type: 'iframe', + url: OZONECOOKIESYNC + strQueryString + }]; + } + }, + + /** + * Find the bid matching the bidId in the request object + * get instream or outstream if this was a video request else null + * @return object|null + */ + getBidRequestForBidId: function getBidRequestForBidId(bidId, arrBids) { + for (var i = 0; i < arrBids.length; i++) { + if (arrBids[i].bidId === bidId) { + // bidId in the request comes back as impid in the seatbid bids + return arrBids[i]; + } + } + + return null; + }, + + /** + * Locate the bid inside the arrBids for this bidId, then discover the video context, and return it. + * IF the bid cannot be found return null, else return a string. + * @param bidId + * @param arrBids + * @return string|null + */ + getVideoContextForBidId: function getVideoContextForBidId(bidId, arrBids) { + var requestBid = this.getBidRequestForBidId(bidId, arrBids); + + if (requestBid != null) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](requestBid, 'mediaTypes.video.context', 'unknown'); + } + + return null; + }, + + /** + * Look for pubcid & all the other IDs according to http://prebid.org/dev-docs/modules/userId.html + * @return map + */ + findAllUserIds: function findAllUserIds(bidRequest) { + var ret = {}; + var searchKeysSingle = ['pubcid', 'tdid', 'id5id', 'parrableId', 'idl_env', 'digitrustid', 'criteortus']; + + if (bidRequest.hasOwnProperty('userId')) { + for (var arrayId in searchKeysSingle) { + var key = searchKeysSingle[arrayId]; + + if (bidRequest.userId.hasOwnProperty(key)) { + ret[key] = bidRequest.userId[key]; + } + } + + var lipbid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest.userId, 'lipb.lipbid'); + + if (lipbid) { + ret['lipb'] = { + 'lipbid': lipbid + }; + } + } + + if (!ret.hasOwnProperty('pubcid')) { + var pubcid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'crumbs.pubcid'); + + if (pubcid) { + ret['pubcid'] = pubcid; // if built with old pubCommonId module + } + } + + return ret; + }, + + /** + * get all the lotame override keys/values from the querystring. + * @return object containing zero or more keys/values + */ + getLotameOverrideParams: function getLotameOverrideParams() { + var arrGet = this.getGetParametersAsObject(); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getLotameOverrideParams - arrGet=', arrGet); + var arrRet = {}; + + for (var i in ALLOWED_LOTAME_PARAMS) { + if (arrGet.hasOwnProperty(ALLOWED_LOTAME_PARAMS[i])) { + arrRet[ALLOWED_LOTAME_PARAMS[i]] = arrGet[ALLOWED_LOTAME_PARAMS[i]]; + } + } + + return arrRet; + }, + + /** + * Boolean function to check that this lotame data is valid (check Audience.id) + */ + isLotameDataValid: function isLotameDataValid(lotameObj) { + if (!lotameObj.hasOwnProperty('Profile')) return false; + var prof = lotameObj.Profile; + if (!prof.hasOwnProperty('tpid')) return false; + if (!prof.hasOwnProperty('pid')) return false; + var audiences = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](prof, 'Audiences.Audience'); + + if (_typeof(audiences) != 'object') { + return false; + } + + for (var i = 0; i < audiences.length; i++) { + var aud = audiences[i]; + + if (!aud.hasOwnProperty('id')) { + return false; + } + } + + return true; // All Audiences objects have an 'id' key + }, + + /** + * Use the arrOverride keys/vals to update the arrExisting lotame object. + * Ideally we will only be using the oz_lotameid value to update the audiences id, but in the event of bad/missing + * pid & tpid we will also have to use substitute values for those too. + * + * @param objOverride object will contain all the ALLOWED_LOTAME_PARAMS parameters + * @param lotameData object might be {} or contain the lotame data + */ + makeLotameObjectFromOverride: function makeLotameObjectFromOverride(objOverride, lotameData) { + if (lotameData.hasOwnProperty('Profile') && Object.keys(lotameData.Profile).length < 3 || !lotameData.hasOwnProperty('Profile')) { + // bad or empty lotame object (should contain pid, tpid & Audiences object) - build a total replacement + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: makeLotameObjectFromOverride will return a full default lotame object'); + return { + 'Profile': { + 'tpid': objOverride['oz_lotametpid'], + 'pid': objOverride['oz_lotamepid'], + 'Audiences': { + 'Audience': [{ + 'id': objOverride['oz_lotameid'], + 'abbr': objOverride['oz_lotameid'] + }] + } + } + }; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](lotameData, 'Profile.Audiences.Audience')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: makeLotameObjectFromOverride will return the existing lotame object with updated Audience by oz_lotameid'); + lotameData.Profile.Audiences.Audience = [{ + 'id': objOverride['oz_lotameid'], + 'abbr': objOverride['oz_lotameid'] + }]; + return lotameData; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: makeLotameObjectFromOverride Weird error - failed to find Profile.Audiences.Audience in lotame object. Will return the object as-is'); + return lotameData; + }, + + /** + * Convenient method to get the value we need for the placementId - ONLY from the bidRequest - NOT taking into account any GET override ID + * @param bidRequest + * @return string + */ + getPlacementId: function getPlacementId(bidRequest) { + return bidRequest.params.placementId.toString(); + }, + + /** + * GET parameter introduced in 2.2.0 : ozstoredrequest + * IF the GET parameter exists then it must validate for placementId correctly + * IF there's a $_GET['ozstoredrequest'] & it's valid then return this. Else return null. + * @returns null|string + */ + getPlacementIdOverrideFromGetParam: function getPlacementIdOverrideFromGetParam() { + var arr = this.getGetParametersAsObject(); + + if (arr.hasOwnProperty('ozstoredrequest')) { + if (this.isValidPlacementId(arr.ozstoredrequest)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: using GET ozstoredrequest ' + arr.ozstoredrequest + ' to replace placementId'); + return arr.ozstoredrequest; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: GET ozstoredrequest FAILED VALIDATION - will not use it'); + } + } + + return null; + }, + + /** + * Produces external userid object + */ + addExternalUserId: function addExternalUserId(eids, value, source, atype) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value)) { + eids.push({ + source: source, + uids: [{ + id: value, + atype: atype + }] + }); + } + }, + + /** + * Generate an object we can append to the auction request, containing user data formatted correctly for different ssps + * @param validBidRequests + * @return {Array} + */ + generateEids: function generateEids(validBidRequests) { + var eids = []; + this.handleTTDId(eids, validBidRequests); + var bidRequest = validBidRequests[0]; + + if (bidRequest && bidRequest.userId) { + this.addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.pubcid"), 'pubcid', 1); + this.addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.pubcid"), 'pubcommon', 1); + this.addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.id5id"), 'id5-sync.com', 1); + this.addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.criteortus.".concat(BIDDER_CODE, ".userid")), 'criteortus', 1); + this.addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.idl_env"), 'liveramp.com', 1); + this.addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.lipb.lipbid"), 'liveintent.com', 1); + this.addExternalUserId(eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "userId.parrableId.eid"), 'parrable.com', 1); + } + + return eids; + }, + handleTTDId: function handleTTDId(eids, validBidRequests) { + var ttdId = null; + var adsrvrOrgId = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('adsrvrOrgId'); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests, '0.userId.tdid'))) { + ttdId = validBidRequests[0].userId.tdid; + } else if (adsrvrOrgId && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](adsrvrOrgId.TDID)) { + ttdId = adsrvrOrgId.TDID; + } + + if (ttdId !== null) { + eids.push({ + 'source': 'adserver.org', + 'uids': [{ + 'id': ttdId, + 'atype': 1, + 'ext': { + 'rtiPartner': 'TDID' + } + }] + }); + } + }, + // Try to use this as the mechanism for reading GET params because it's easy to mock it for tests + getGetParametersAsObject: function getGetParametersAsObject() { + var items = location.search.substr(1).split('&'); + var ret = {}; + var tmp = null; + + for (var index = 0; index < items.length; index++) { + tmp = items[index].split('='); + ret[tmp[0]] = tmp[1]; + } + + return ret; + }, + + /** + * Do we have to block this request? Could be due to config values (no longer checking gdpr) + * @return {boolean|*[]} true = block the request, else false + */ + blockTheRequest: function blockTheRequest() { + // if there is an ozone.oz_request = false then quit now. + var ozRequest = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('ozone.oz_request'); + + if (typeof ozRequest == 'boolean' && !ozRequest) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('OZONE: Will not allow auction : ozone.oz_request is set to false'); + return true; + } + + return false; + }, + + /** + * This returns a random ID for this page. It starts off with the current ms timestamp then appends a random component + * @return {string} + */ + getPageId: function getPageId() { + if (this.propertyBag.pageId == null) { + var randPart = ''; + var allowable = '0123456789abcdefghijklmnopqrstuvwxyz'; + + for (var i = 20; i > 0; i--) { + randPart += allowable[Math.floor(Math.random() * 36)]; + } + + this.propertyBag.pageId = new Date().getTime() + '_' + randPart; + } + + return this.propertyBag.pageId; + }, + + /** + * handle the complexity of there possibly being lotameData override (may be valid/invalid) & there may or may not be lotameData present in the bidRequest + * NOTE THAT this will also set this.propertyBag.lotameWasOverridden=1 if we use lotame override + * @param ozoneBidRequest + * @return object representing the absolute lotameData we need to use. + */ + tryGetLotameData: function tryGetLotameData(ozoneBidRequest) { + var arrLotameOverride = this.getLotameOverrideParams(); + var ret = {}; + + if (Object.keys(arrLotameOverride).length === ALLOWED_LOTAME_PARAMS.length) { + // all override params are present, override lotame object: + if (ozoneBidRequest.params.hasOwnProperty('lotameData')) { + ret = this.makeLotameObjectFromOverride(arrLotameOverride, ozoneBidRequest.params.lotameData); + } else { + ret = this.makeLotameObjectFromOverride(arrLotameOverride, {}); + } + + this.propertyBag.lotameWasOverridden = 1; + } else if (ozoneBidRequest.params.hasOwnProperty('lotameData')) { + // no lotame override, use it as-is + if (this.isLotameDataValid(ozoneBidRequest.params.lotameData)) { + ret = ozoneBidRequest.params.lotameData; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: INVALID LOTAME DATA FOUND - WILL NOT USE THIS AT ALL ELSE IT MIGHT BREAK THE AUCTION CALL!', ozoneBidRequest.params.lotameData); + ret = {}; + } + } + + return ret; + }, + unpackVideoConfigIntoIABformat: function unpackVideoConfigIntoIABformat(videoConfig, childConfig) { + var ret = { + 'ext': {} + }; + ret = this._unpackVideoConfigIntoIABformat(ret, videoConfig); + ret = this._unpackVideoConfigIntoIABformat(ret, childConfig); + return ret; + }, + + /** + * + * look in ONE object to get video config (we need to call this multiple times, so child settings override parent) + * @param ret + * @param objConfig + * @return {*} + * @private + */ + _unpackVideoConfigIntoIABformat: function _unpackVideoConfigIntoIABformat(ret, objConfig) { + var arrVideoKeysAllowed = ['mimes', 'minduration', 'maxduration', 'protocols', 'w', 'h', 'startdelay', 'placement', 'linearity', 'skip', 'skipmin', 'skipafter', 'sequence', 'battr', 'maxextended', 'minbitrate', 'maxbitrate', 'boxingallowed', 'playbackmethod', 'playbackend', 'delivery', 'pos', 'companionad', 'api', 'companiontype']; + + var _loop2 = function _loop2(key) { + found = false; + arrVideoKeysAllowed.forEach(function (arg) { + if (arg === key) { + ret[key] = objConfig[key]; + found = true; + } + }); + + if (!found) { + ret.ext[key] = objConfig[key]; + } + }; + + for (var key in objConfig) { + var found; + + _loop2(key); + } // handle ext separately, if it exists; we have probably built up an ext object already + + + if (objConfig.hasOwnProperty('ext') && _typeof(objConfig.ext) === 'object') { + if (objConfig.hasOwnProperty('ext')) { + ret.ext = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["mergeDeep"](ret.ext, objConfig.ext); + } else { + ret.ext = objConfig.ext; + } + } + + return ret; + }, + addVideoDefaults: function addVideoDefaults(objRet, videoConfig, childConfig) { + objRet = this._addVideoDefaults(objRet, videoConfig, false); + objRet = this._addVideoDefaults(objRet, childConfig, true); // child config will override parent config + + return objRet; + }, + + /** + * modify objRet, adding in default values + * @param objRet + * @param objConfig + * @param addIfMissing + * @return {*} + * @private + */ + _addVideoDefaults: function _addVideoDefaults(objRet, objConfig, addIfMissing) { + // add inferred values & any default values we want. + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](objConfig, 'context'); + + if (context === 'outstream') { + objRet.placement = 3; + } else if (context === 'instream') { + objRet.placement = 1; + } + + var skippable = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](objConfig, 'skippable', null); + + if (skippable == null) { + if (addIfMissing && !objRet.hasOwnProperty('skip')) { + objRet.skip = skippable ? 1 : 0; + } + } else { + objRet.skip = skippable ? 1 : 0; + } + + return objRet; + } +}; +/** + * add a page-level-unique adId element to all server response bids. + * NOTE that this is destructive - it mutates the serverResponse object sent in as a parameter + * @param seatbid object (serverResponse.seatbid) + * @returns seatbid object + */ + +function injectAdIdsIntoAllBidResponses(seatbid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: injectAdIdsIntoAllBidResponses', seatbid); + + for (var i = 0; i < seatbid.length; i++) { + var sb = seatbid[i]; + + for (var j = 0; j < sb.bid.length; j++) { + // modify the bidId per-bid, so each bid has a unique adId within this response, and dfp can select one. + // 2020-06 we now need a second level of ID because there might be multiple identical impid's within a seatbid! + sb.bid[j]['adId'] = "".concat(sb.bid[j]['impid'], "-").concat(i, "-").concat(j); + } + } + + return seatbid; +} +function checkDeepArray(Arr) { + if (Array.isArray(Arr)) { + if (Array.isArray(Arr[0])) { + return Arr[0]; + } else { + return Arr; + } + } else { + return Arr; + } +} +function defaultSize(thebidObj) { + if (!thebidObj) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: defaultSize received empty bid obj! going to return fixed default size'); + return { + 'defaultHeight': 250, + 'defaultWidth': 300 + }; + } + + var sizes = thebidObj.sizes; + var returnObject = {}; + returnObject.defaultWidth = checkDeepArray(sizes)[0]; + returnObject.defaultHeight = checkDeepArray(sizes)[1]; + return returnObject; +} +/** + * Do the messy searching for the best bid response in the serverResponse.seatbid array matching the requestBid.bidId + * @param requestBid + * @param serverResponseSeatBid + * @returns {*} bid object + */ + +function ozoneGetWinnerForRequestBid(requestBidId, serverResponseSeatBid) { + var thisBidWinner = null; + var winningSeat = null; + + for (var j = 0; j < serverResponseSeatBid.length; j++) { + var theseBids = serverResponseSeatBid[j].bid; + var thisSeat = serverResponseSeatBid[j].seat; + + for (var k = 0; k < theseBids.length; k++) { + if (theseBids[k].impid === requestBidId) { + // we've found a matching server response bid for this request bid + if (thisBidWinner == null || thisBidWinner.price < theseBids[k].price) { + thisBidWinner = theseBids[k]; + winningSeat = thisSeat; + break; + } + } + } + } + + return { + 'seat': winningSeat, + 'bid': thisBidWinner + }; +} +/** + * Get a list of all the bids, for this bidId. The keys in the response object will be {seatname} OR {seatname}{w}x{h} if seatname already exists + * @param matchBidId + * @param serverResponseSeatBid + * @returns {} = {ozone|320x600:{obj}, ozone|320x250:{obj}, appnexus|300x250:{obj}, ... } + */ + +function ozoneGetAllBidsForBidId(matchBidId, serverResponseSeatBid) { + var objBids = {}; + + for (var j = 0; j < serverResponseSeatBid.length; j++) { + var theseBids = serverResponseSeatBid[j].bid; + var thisSeat = serverResponseSeatBid[j].seat; + + for (var k = 0; k < theseBids.length; k++) { + if (theseBids[k].impid === matchBidId) { + if (objBids.hasOwnProperty(thisSeat)) { + // > 1 bid for an adunit from a bidder - only use the one with the highest bid + // objBids[`${thisSeat}${theseBids[k].w}x${theseBids[k].h}`] = theseBids[k]; + if (objBids[thisSeat]['price'] < theseBids[k].price) { + objBids[thisSeat] = theseBids[k]; + } + } else { + objBids[thisSeat] = theseBids[k]; + } + } + } + } + + return objBids; +} +/** + * Round the bid price down according to the granularity + * @param price + * @param mediaType = video, banner or native + */ + +function getRoundedBid(price, mediaType) { + var mediaTypeGranularity = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig("mediaTypePriceGranularity.".concat(mediaType)); // might be string or object or nothing; if set then this takes precedence over 'priceGranularity' + + var objBuckets = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('customPriceBucket'); // this is always an object - {} if strBuckets is not 'custom' + + var strBuckets = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('priceGranularity'); // priceGranularity value, always a string ** if priceGranularity is set to an object then it's always 'custom' ** + + var theConfigObject = getGranularityObject(mediaType, mediaTypeGranularity, strBuckets, objBuckets); + var theConfigKey = getGranularityKeyName(mediaType, mediaTypeGranularity, strBuckets); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getRoundedBid. price:', price, 'mediaType:', mediaType, 'configkey:', theConfigKey, 'configObject:', theConfigObject, 'mediaTypeGranularity:', mediaTypeGranularity, 'strBuckets:', strBuckets); + var priceStringsObj = Object(__WEBPACK_IMPORTED_MODULE_4__src_cpmBucketManager_js__["a" /* getPriceBucketString */])(price, theConfigObject, __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.granularityMultiplier')); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: priceStringsObj', priceStringsObj); // by default, without any custom granularity set, you get granularity name : 'medium' + + var granularityNamePriceStringsKeyMapping = { + 'medium': 'med', + 'custom': 'custom', + 'high': 'high', + 'low': 'low', + 'dense': 'dense' + }; + + if (granularityNamePriceStringsKeyMapping.hasOwnProperty(theConfigKey)) { + var priceStringsKey = granularityNamePriceStringsKeyMapping[theConfigKey]; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getRoundedBid: looking for priceStringsKey:', priceStringsKey); + return priceStringsObj[priceStringsKey]; + } + + return priceStringsObj['auto']; +} +/** + * return the key to use to get the value out of the priceStrings object, taking into account anything at + * config.priceGranularity level or config.mediaType.xxx level + * I've noticed that the key specified by prebid core : config.getConfig('priceGranularity') does not properly + * take into account the 2-levels of config + */ + +function getGranularityKeyName(mediaType, mediaTypeGranularity, strBuckets) { + if (typeof mediaTypeGranularity === 'string') { + return mediaTypeGranularity; + } + + if (_typeof(mediaTypeGranularity) === 'object') { + return 'custom'; + } + + if (typeof strBuckets === 'string') { + return strBuckets; + } + + return 'auto'; // fall back to a default key - should literally never be needed. +} +/** + * return the object to use to create the custom value of the priceStrings object, taking into account anything at + * config.priceGranularity level or config.mediaType.xxx level + */ + +function getGranularityObject(mediaType, mediaTypeGranularity, strBuckets, objBuckets) { + if (_typeof(mediaTypeGranularity) === 'object') { + return mediaTypeGranularity; + } + + if (strBuckets === 'custom') { + return objBuckets; + } + + return ''; +} +/** + * We expect to be able to find a standard set of properties on winning bid objects; add them here. + * @param seatBid + * @returns {*} + */ + +function ozoneAddStandardProperties(seatBid, defaultWidth, defaultHeight) { + seatBid.cpm = seatBid.price; + seatBid.bidId = seatBid.impid; + seatBid.requestId = seatBid.impid; + seatBid.width = seatBid.w || defaultWidth; + seatBid.height = seatBid.h || defaultHeight; + seatBid.ad = seatBid.adm; + seatBid.netRevenue = true; + seatBid.creativeId = seatBid.crid; + seatBid.currency = 'USD'; + seatBid.ttl = 300; + return seatBid; +} +/** + * + * @param objVideo will be like {"playerSize":[640,480],"mimes":["video/mp4"],"context":"outstream"} or POSSIBLY {"playerSize":[[640,480]],"mimes":["video/mp4"],"context":"outstream"} + * @return object {w,h} or null + */ + +function getWidthAndHeightFromVideoObject(objVideo) { + var playerSize = getPlayerSizeFromObject(objVideo); + + if (!playerSize) { + return null; + } + + if (playerSize[0] && _typeof(playerSize[0]) === 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getWidthAndHeightFromVideoObject found nested array inside playerSize.', playerSize[0]); + playerSize = playerSize[0]; + + if (typeof playerSize[0] !== 'number' && typeof playerSize[0] !== 'string') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getWidthAndHeightFromVideoObject found non-number/string type inside the INNER array in playerSize. This is totally wrong - cannot continue.', playerSize[0]); + return null; + } + } + + if (playerSize.length !== 2) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getWidthAndHeightFromVideoObject found playerSize with length of ' + playerSize.length + '. This is totally wrong - cannot continue.'); + return null; + } + + return { + 'w': playerSize[0], + 'h': playerSize[1] + }; +} +/** + * @param objVideo will be like {"playerSize":[640,480],"mimes":["video/mp4"],"context":"outstream"} or POSSIBLY {"playerSize":[[640,480]],"mimes":["video/mp4"],"context":"outstream"} + * @return object {w,h} or null + */ + +function playerSizeIsNestedArray(objVideo) { + var playerSize = getPlayerSizeFromObject(objVideo); + + if (!playerSize) { + return null; + } + + if (playerSize.length < 1) { + return null; + } + + return playerSize[0] && _typeof(playerSize[0]) === 'object'; +} +/** + * Common functionality when looking at a video object, to get the playerSize + * @param objVideo + * @returns {*} + */ + +function getPlayerSizeFromObject(objVideo) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: getPlayerSizeFromObject received object', objVideo); + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](objVideo, 'playerSize'); + + if (!playerSize) { + playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](objVideo, 'ext.playerSize'); + } + + if (!playerSize) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: getPlayerSizeFromObject FAILED: no playerSize in video object or ext', objVideo); + return null; + } + + if (_typeof(playerSize) !== 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('OZONE: getPlayerSizeFromObject FAILED: playerSize is not an object/array', objVideo); + return null; + } + + return playerSize; +} +/* + Rendering video ads - create a renderer instance, mark it as not loaded, set a renderer function. + The renderer function will not assume that the renderer script is loaded - it will push() the ultimate render function call + */ + + +function newRenderer(adUnitCode) { + var rendererOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_5__src_Renderer_js__["a" /* Renderer */].install({ + url: OZONE_RENDERER_URL, + config: rendererOptions, + loaded: false, + adUnitCode: adUnitCode + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('OZONE Prebid Error calling setRender on renderer', err); + } + + return renderer; +} + +function outstreamRender(bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: outstreamRender called. Going to push the call to window.ozoneVideo.outstreamRender(bid) bid =', bid); // push to render queue because ozoneVideo may not be loaded yet + + bid.renderer.push(function () { + window.ozoneVideo.outstreamRender(bid); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); +__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('OZONE: ozoneBidAdapter was loaded'); + +/***/ }) + +},[577]); \ No newline at end of file diff --git a/build/dist/padsquadBidAdapter.js b/build/dist/padsquadBidAdapter.js new file mode 100644 index 00000000000..fcb9476a3e0 --- /dev/null +++ b/build/dist/padsquadBidAdapter.js @@ -0,0 +1,168 @@ +pbjsChunk([147],{ + +/***/ 579: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(580); + + +/***/ }), + +/***/ 580: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var ENDPOINT_URL = 'https://x.padsquad.com/auction'; +var DEFAULT_BID_TTL = 30; +var DEFAULT_CURRENCY = 'USD'; +var DEFAULT_NET_REVENUE = true; +var spec = { + code: 'padsquad', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.unitId && typeof bid.params.unitId === 'string' || !!bid.params.networkId && typeof bid.params.networkId === 'string' || !!bid.params.publisherId && typeof bid.params.publisherId === 'string'; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (!validBidRequests || !bidderRequest) { + return; + } + + var publisherId = validBidRequests[0].params.publisherId; + var networkId = validBidRequests[0].params.networkId; + var impressions = validBidRequests.map(function (bidRequest) { + return { + id: bidRequest.bidId, + banner: { + format: bidRequest.sizes.map(function (sizeArr) { + return { + w: sizeArr[0], + h: sizeArr[1] + }; + }) + }, + ext: { + exchange: { + unitId: bidRequest.params.unitId + } + } + }; + }); + var openrtbRequest = { + id: bidderRequest.auctionId, + imp: impressions, + site: { + domain: window.location.hostname, + page: window.location.href, + ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null + }, + ext: { + exchange: { + publisherId: publisherId, + networkId: networkId + } + } + }; // apply gdpr + + if (bidderRequest.gdprConsent) { + openrtbRequest.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0 + } + }; + openrtbRequest.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + } + + var payloadString = JSON.stringify(openrtbRequest); + return { + method: 'POST', + url: ENDPOINT_URL, + data: payloadString + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidResponses = []; + var response = (serverResponse || {}).body; // response is always one seat with (optional) bids for each impression + + if (response && response.seatbid && response.seatbid.length === 1 && response.seatbid[0].bid && response.seatbid[0].bid.length) { + response.seatbid[0].bid.forEach(function (bid) { + bidResponses.push({ + requestId: bid.impid, + cpm: bid.price, + width: bid.w, + height: bid.h, + ad: bid.adm, + ttl: DEFAULT_BID_TTL, + creativeId: bid.crid, + meta: { + advertiserDomains: bid.adomain + }, + netRevenue: DEFAULT_NET_REVENUE, + currency: DEFAULT_CURRENCY + }); + }); + } else { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('padsquad.interpretResponse :: no valid responses to interpret'); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('padsquad.getUserSyncs', 'syncOptions', syncOptions, 'serverResponses', serverResponses); + var syncs = []; + + if (!syncOptions.iframeEnabled && !syncOptions.pixelEnabled) { + return syncs; + } + + serverResponses.forEach(function (resp) { + var userSync = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](resp, 'body.ext.usersync'); + + if (userSync) { + var syncDetails = []; + Object.keys(userSync).forEach(function (key) { + var value = userSync[key]; + + if (value.syncs && value.syncs.length) { + syncDetails = syncDetails.concat(value.syncs); + } + }); + syncDetails.forEach(function (syncDetails) { + syncs.push({ + type: syncDetails.type === 'iframe' ? 'iframe' : 'image', + url: syncDetails.url + }); + }); + + if (!syncOptions.iframeEnabled) { + syncs = syncs.filter(function (s) { + return s.type !== 'iframe'; + }); + } + + if (!syncOptions.pixelEnabled) { + syncs = syncs.filter(function (s) { + return s.type !== 'image'; + }); + } + } + }); + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[579]); \ No newline at end of file diff --git a/build/dist/papyrusBidAdapter.js b/build/dist/papyrusBidAdapter.js new file mode 100644 index 00000000000..4787c778d3b --- /dev/null +++ b/build/dist/papyrusBidAdapter.js @@ -0,0 +1,97 @@ +pbjsChunk([146],{ + +/***/ 581: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(582); + + +/***/ }), + +/***/ 582: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var PAPYRUS_ENDPOINT = 'https://prebid.papyrus.global'; +var PAPYRUS_CODE = 'papyrus'; +var spec = { + code: PAPYRUS_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.address && bid.params.placementId); + }, + + /** + * 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 bidParams = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + bidParams.push({ + address: bid.params.address, + placementId: bid.params.placementId, + bidId: bid.bidId, + transactionId: bid.transactionId, + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes) + }); + }); + + return { + method: 'POST', + url: PAPYRUS_ENDPOINT, + data: bidParams + }; + }, + + /** + * 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 bidResponses = []; + + if (serverResponse && serverResponse.body && serverResponse.body.bids) { + serverResponse.body.bids.forEach(function (bid) { + var bidResponse = { + requestId: bid.id, + creativeId: bid.id, + adId: bid.id, + transactionId: bid.transactionId, + cpm: bid.cpm, + width: bid.width, + height: bid.height, + currency: bid.currency, + netRevenue: true, + ttl: 300, + ad: bid.ad + }; + bidResponses.push(bidResponse); + }); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[581]); \ No newline at end of file diff --git a/build/dist/parrableIdSystem.js b/build/dist/parrableIdSystem.js new file mode 100644 index 00000000000..f17b42aabeb --- /dev/null +++ b/build/dist/parrableIdSystem.js @@ -0,0 +1,266 @@ +pbjsChunk([145],{ + +/***/ 583: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(584); + + +/***/ }), + +/***/ 584: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parrableIdSubmodule", function() { return parrableIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_refererDetection_js__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +/** + * This module adds Parrable to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/parrableIdSystem + * @requires module:modules/userId + */ + + + + + + +var PARRABLE_URL = 'https://h.parrable.com/prebid'; +var PARRABLE_COOKIE_NAME = '_parrable_id'; +var LEGACY_ID_COOKIE_NAME = '_parrable_eid'; +var LEGACY_OPTOUT_COOKIE_NAME = '_parrable_optout'; +var ONE_YEAR_MS = 364 * 24 * 60 * 60 * 1000; +var EXPIRE_COOKIE_DATE = 'Thu, 01 Jan 1970 00:00:00 GMT'; +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(); + +function getExpirationDate() { + var oneYearFromNow = new Date(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"]() + ONE_YEAR_MS); + return oneYearFromNow.toGMTString(); +} + +function deserializeParrableId(parrableIdStr) { + var parrableId = {}; + var values = parrableIdStr.split(','); + values.forEach(function (value) { + var pair = value.split(':'); // unpack a value of 1 as true + + parrableId[pair[0]] = +pair[1] === 1 ? true : pair[1]; + }); + return parrableId; +} + +function serializeParrableId(parrableId) { + var components = []; + + if (parrableId.eid) { + components.push('eid:' + parrableId.eid); + } + + if (parrableId.ibaOptout) { + components.push('ibaOptout:1'); + } + + if (parrableId.ccpaOptout) { + components.push('ccpaOptout:1'); + } + + return components.join(','); +} + +function isValidConfig(configParams) { + if (!configParams) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('User ID - parrableId submodule requires configParams'); + return false; + } + + if (!configParams.partner) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('User ID - parrableId submodule requires partner list'); + return false; + } + + if (configParams.storage) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('User ID - parrableId submodule does not require a storage config'); + } + + return true; +} + +function readCookie() { + var parrableIdStr = storage.getCookie(PARRABLE_COOKIE_NAME); + + if (parrableIdStr) { + return deserializeParrableId(decodeURIComponent(parrableIdStr)); + } + + return null; +} + +function writeCookie(parrableId) { + if (parrableId) { + var parrableIdStr = encodeURIComponent(serializeParrableId(parrableId)); + storage.setCookie(PARRABLE_COOKIE_NAME, parrableIdStr, getExpirationDate(), 'lax'); + } +} + +function readLegacyCookies() { + var eid = storage.getCookie(LEGACY_ID_COOKIE_NAME); + var ibaOptout = storage.getCookie(LEGACY_OPTOUT_COOKIE_NAME) === 'true'; + + if (eid || ibaOptout) { + var parrableId = {}; + + if (eid) { + parrableId.eid = eid; + } + + if (ibaOptout) { + parrableId.ibaOptout = ibaOptout; + } + + return parrableId; + } + + return null; +} + +function migrateLegacyCookies(parrableId) { + if (parrableId) { + writeCookie(parrableId); + + if (parrableId.eid) { + storage.setCookie(LEGACY_ID_COOKIE_NAME, '', EXPIRE_COOKIE_DATE); + } + + if (parrableId.ibaOptout) { + storage.setCookie(LEGACY_OPTOUT_COOKIE_NAME, '', EXPIRE_COOKIE_DATE); + } + } +} + +function fetchId(configParams) { + if (!isValidConfig(configParams)) return; + var parrableId = readCookie(); + + if (!parrableId) { + parrableId = readLegacyCookies(); + migrateLegacyCookies(parrableId); + } + + var eid = parrableId ? parrableId.eid : null; + var refererInfo = Object(__WEBPACK_IMPORTED_MODULE_3__src_refererDetection_js__["a" /* getRefererInfo */])(); + var uspString = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["uspDataHandler"].getConsentData(); + var data = { + eid: eid, + trackers: configParams.partner.split(','), + url: refererInfo.referer + }; + var searchParams = { + data: btoa(JSON.stringify(data)), + _rand: Math.random() + }; + + if (uspString) { + searchParams.us_privacy = uspString; + } + + var options = { + method: 'GET', + withCredentials: true + }; + + var callback = function callback(cb) { + var callbacks = { + success: function success(response) { + var newParrableId = parrableId ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](parrableId) : {}; + + if (response) { + try { + var responseObj = JSON.parse(response); + + if (responseObj) { + if (responseObj.ccpaOptout !== true) { + newParrableId.eid = responseObj.eid; + } else { + newParrableId.eid = null; + newParrableId.ccpaOptout = true; + } + + if (responseObj.ibaOptout === true) { + newParrableId.ibaOptout = true; + } + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + cb(); + } + + writeCookie(newParrableId); + cb(newParrableId); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('parrableId: ID fetch returned an empty result'); + cb(); + } + }, + error: function error(_error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("parrableId: ID fetch encountered an error", _error); + cb(); + } + }; + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(PARRABLE_URL, callbacks, searchParams, options); + }; + + return { + callback: callback, + id: parrableId + }; +} + +; +/** @type {Submodule} */ + +var parrableIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: 'parrableId', + + /** + * decode the stored id value for passing to bid requests + * @function + * @param {ParrableId} parrableId + * @return {(Object|undefined} + */ + decode: function decode(parrableId) { + if (parrableId && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](parrableId)) { + return { + parrableId: parrableId + }; + } + + return undefined; + }, + + /** + * performs action to obtain id and return a value in the callback's response argument + * @function + * @param {SubmoduleParams} [configParams] + * @param {ConsentData} [consentData] + * @returns {function(callback:function), id:ParrableId} + */ + getId: function getId(configParams, gdprConsentData, currentStoredId) { + return fetchId(configParams); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', parrableIdSubmodule); + +/***/ }) + +},[583]); \ No newline at end of file diff --git a/build/dist/performaxBidAdapter.js b/build/dist/performaxBidAdapter.js new file mode 100644 index 00000000000..57f67480b5d --- /dev/null +++ b/build/dist/performaxBidAdapter.js @@ -0,0 +1,81 @@ +pbjsChunk([144],{ + +/***/ 585: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(586); + + +/***/ }), + +/***/ 586: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var CLIENT = 'hellboy:v0.0.1'; +var BIDDER_CODE = 'performax'; +var BIDDER_SHORT_CODE = 'px'; +var ENDPOINT = 'https://dale.performax.cz/hb'; +var spec = { + code: BIDDER_CODE, + aliases: [BIDDER_SHORT_CODE], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.slotId; + }, + buildUrl: function buildUrl(validBidRequests, bidderRequest) { + var slotIds = validBidRequests.map(function (request) { + return request.params.slotId; + }); + var url = ["".concat(ENDPOINT, "?slotId[]=").concat(slotIds.join())]; + url.push('client=' + CLIENT); + url.push('auctionId=' + bidderRequest.auctionId); + return url.join('&'); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return { + method: 'POST', + url: this.buildUrl(validBidRequests, bidderRequest), + data: { + 'validBidRequests': validBidRequests, + 'bidderRequest': bidderRequest + }, + options: { + contentType: 'application/json' + } + }; + }, + buildHtml: function buildHtml(ad) { + var keys = Object.keys(ad.data || {}); + return ad.code.replace(new RegExp('\\$(' + keys.join('|') + ')\\$', 'g'), function (matched, key) { + return ad.data[key] || matched; + }); + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bidResponses = []; + + for (var i = 0; i < serverResponse.body.length; i++) { + var ad = serverResponse.body[i].ad; + + if (ad.type === 'empty') { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"])("One of ads is empty (reason=".concat(ad.reason, ")")); + continue; + } + + serverResponse.body[i].ad = this.buildHtml(ad); + bidResponses.push(serverResponse.body[i]); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[585]); \ No newline at end of file diff --git a/build/dist/piximediaBidAdapter.js b/build/dist/piximediaBidAdapter.js new file mode 100644 index 00000000000..44e2e2940c4 --- /dev/null +++ b/build/dist/piximediaBidAdapter.js @@ -0,0 +1,67 @@ +pbjsChunk([143],{ + +/***/ 587: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(588); + + +/***/ }), + +/***/ 588: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'piximedia'; +var ENDPOINT = 'https://ad.piximedia.com/prebid'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params && bid.params.siteId && bid.params.placementId); + }, + buildRequests: function buildRequests(validBidRequests) { + return validBidRequests.map(function (bidRequest) { + var parseSized = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.sizes); + var arrSize = parseSized[0].split('x'); + return { + method: 'GET', + url: ENDPOINT, + data: { + timestamp: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"](), + pver: '1.0', + pbparams: JSON.stringify(bidRequest.params), + pbsizes: JSON.stringify(parseSized), + pbwidth: arrSize[0], + pbheight: arrSize[1], + pbbidid: bidRequest.bidId + } + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var res = serverResponse.body; + var bidResponse = { + requestId: res.bidId, + cpm: parseFloat(res.cpm), + width: res.width, + height: res.height, + creativeId: res.creative_id, + currency: res.currency, + netRevenue: true, + ttl: 300, + ad: res.adm + }; + return [bidResponse]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[587]); \ No newline at end of file diff --git a/build/dist/platformioBidAdapter.js b/build/dist/platformioBidAdapter.js new file mode 100644 index 00000000000..86abc4c6488 --- /dev/null +++ b/build/dist/platformioBidAdapter.js @@ -0,0 +1,373 @@ +pbjsChunk([142],{ + +/***/ 589: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(590); + + +/***/ }), + +/***/ 590: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); + + + +var NATIVE_DEFAULTS = { + TITLE_LEN: 100, + DESCR_LEN: 200, + SPONSORED_BY_LEN: 50, + IMG_MIN: 150, + ICON_MIN: 50 +}; +var DEFAULT_MIMES = ['video/mp4', 'video/webm', 'application/x-shockwave-flash', 'application/javascript']; +var VIDEO_TARGETING = ['mimes', 'skippable', 'playback_method', 'protocols', 'api']; +var DEFAULT_PROTOCOLS = [2, 3, 5, 6]; +var DEFAULT_APIS = [1, 2]; +var spec = { + code: 'platformio', + supportedMediaTypes: ['banner', 'native', 'video'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.pubId && bid.params.placementId); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var request = { + id: bidRequests[0].bidderRequestId, + at: 2, + imp: bidRequests.map(function (slot) { + return impression(slot); + }), + site: site(bidRequests), + app: app(bidRequests), + device: device(bidRequests) + }; + applyGdpr(bidderRequest, request); + return { + method: 'POST', + url: 'https://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 if (idToImpMap[id]['video']) { + bid.vastUrl = idToBidMap[id].adm; + bid.vastUrl = bid.vastUrl.replace(/\$(%7B|\{)AUCTION_PRICE(%7D|\})/gi, idToBidMap[id].price); + bid.crid = idToBidMap[id].crid; + bid.width = idToImpMap[id].video.w; + bid.height = idToImpMap[id].video.h; + bid.mediaType = 'video'; + } else if (idToImpMap[id]['banner']) { + 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 = idToBidMap[id].w; + bid.height = idToBidMap[id].h; + bid.mediaType = 'banner'; + } + + bids.push(bid); + } + }); + return bids; +} + +function impression(slot) { + return { + id: slot.bidId, + secure: window.location.protocol === 'https:' ? 1 : 0, + 'banner': banner(slot), + 'native': nativeImpression(slot), + 'video': videoImpression(slot), + bidfloor: slot.params.bidFloor || '0.000001', + tagid: slot.params.placementId.toString() + }; +} + +function banner(slot) { + if (slot.mediaType === 'banner' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.banner')) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.banner.sizes'); + + if (sizes.length > 1) { + var format = []; + + for (var f = 0; f < sizes.length; f++) { + format.push({ + 'w': sizes[f][0], + 'h': sizes[f][1] + }); + } + + return { + 'format': format + }; + } else { + return { + w: sizes[0][0], + h: sizes[0][1] + }; + } + } + + return null; +} + +function videoImpression(slot) { + if (slot.mediaType === 'video' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.video')) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.video.playerSize'); + var video = { + w: sizes[0][0], + h: sizes[0][1], + mimes: DEFAULT_MIMES, + protocols: DEFAULT_PROTOCOLS, + api: DEFAULT_APIS + }; + + if (slot.params.video) { + Object.keys(slot.params.video).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).forEach(function (param) { + return video[param] = slot.params.video[param]; + }); + } + + return video; + } + + return null; +} + +function nativeImpression(slot) { + if (slot.mediaType === 'native' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.native')) { + 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'; + var appParams = bidderRequest[0].params.app; + + if (!appParams) { + return { + publisher: { + id: pubId.toString(), + domain: window.location.hostname + }, + id: siteId.toString(), + ref: window.top.document.referrer, + page: window.location.href + }; + } + + return null; +} + +function app(bidderRequest) { + var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.pubId : '0'; + var appParams = bidderRequest[0].params.app; + + if (appParams) { + return { + publisher: { + id: pubId.toString() + }, + id: appParams.id, + name: appParams.name, + bundle: appParams.bundle, + storeurl: appParams.storeUrl, + domain: appParams.domain + }; + } + + return null; +} + +function device(bidderRequest) { + var lat = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.latitude : ''; + var lon = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.longitude : ''; + var ifa = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.ifa : ''; + return { + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0, + ua: navigator.userAgent, + language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage, + w: window.screen.width || window.innerWidth, + h: window.screen.height || window.innerHeigh, + geo: { + lat: lat, + lon: lon + }, + ifa: ifa + }; +} + +function parse(rawResponse) { + try { + if (rawResponse) { + return JSON.parse(rawResponse); + } + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('platformio.parse', 'ERROR', ex); + } + + return null; +} + +function applyGdpr(bidderRequest, ortbRequest) { + if (bidderRequest && bidderRequest.gdprConsent) { + ortbRequest.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0 + } + }; + ortbRequest.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + } +} + +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; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[589]); \ No newline at end of file diff --git a/build/dist/prebid-core.js b/build/dist/prebid-core.js new file mode 100644 index 00000000000..75315a5a5ea --- /dev/null +++ b/build/dist/prebid-core.js @@ -0,0 +1,12917 @@ +/* prebid.js v4.2.0 +Updated : 2020-08-13 */ +/******/ (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 = { +/******/ 323: 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 = 828); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "internal", function() { return internal; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bind", function() { return bind; }); +/* harmony export (immutable) */ __webpack_exports__["getUniqueIdentifierStr"] = getUniqueIdentifierStr; +/* harmony export (immutable) */ __webpack_exports__["generateUUID"] = generateUUID; +/* harmony export (immutable) */ __webpack_exports__["getBidIdParameter"] = getBidIdParameter; +/* harmony export (immutable) */ __webpack_exports__["tryAppendQueryString"] = tryAppendQueryString; +/* harmony export (immutable) */ __webpack_exports__["parseQueryStringParameters"] = parseQueryStringParameters; +/* harmony export (immutable) */ __webpack_exports__["transformAdServerTargetingObj"] = transformAdServerTargetingObj; +/* harmony export (immutable) */ __webpack_exports__["getAdUnitSizes"] = getAdUnitSizes; +/* harmony export (immutable) */ __webpack_exports__["parseSizesInput"] = parseSizesInput; +/* harmony export (immutable) */ __webpack_exports__["parseGPTSingleSizeArray"] = parseGPTSingleSizeArray; +/* harmony export (immutable) */ __webpack_exports__["parseGPTSingleSizeArrayToRtbSize"] = parseGPTSingleSizeArrayToRtbSize; +/* harmony export (immutable) */ __webpack_exports__["getWindowTop"] = getWindowTop; +/* harmony export (immutable) */ __webpack_exports__["getWindowSelf"] = getWindowSelf; +/* harmony export (immutable) */ __webpack_exports__["getWindowLocation"] = getWindowLocation; +/* harmony export (immutable) */ __webpack_exports__["logMessage"] = logMessage; +/* harmony export (immutable) */ __webpack_exports__["logInfo"] = logInfo; +/* harmony export (immutable) */ __webpack_exports__["logWarn"] = logWarn; +/* harmony export (immutable) */ __webpack_exports__["logError"] = logError; +/* harmony export (immutable) */ __webpack_exports__["hasConsoleLogger"] = hasConsoleLogger; +/* harmony export (immutable) */ __webpack_exports__["debugTurnedOn"] = debugTurnedOn; +/* harmony export (immutable) */ __webpack_exports__["createInvisibleIframe"] = createInvisibleIframe; +/* harmony export (immutable) */ __webpack_exports__["getParameterByName"] = getParameterByName; +/* harmony export (immutable) */ __webpack_exports__["isA"] = isA; +/* harmony export (immutable) */ __webpack_exports__["isFn"] = isFn; +/* harmony export (immutable) */ __webpack_exports__["isStr"] = isStr; +/* harmony export (immutable) */ __webpack_exports__["isArray"] = isArray; +/* harmony export (immutable) */ __webpack_exports__["isNumber"] = isNumber; +/* harmony export (immutable) */ __webpack_exports__["isPlainObject"] = isPlainObject; +/* harmony export (immutable) */ __webpack_exports__["isBoolean"] = isBoolean; +/* harmony export (immutable) */ __webpack_exports__["isEmpty"] = isEmpty; +/* harmony export (immutable) */ __webpack_exports__["isEmptyStr"] = isEmptyStr; +/* harmony export (immutable) */ __webpack_exports__["_each"] = _each; +/* harmony export (immutable) */ __webpack_exports__["contains"] = contains; +/* harmony export (immutable) */ __webpack_exports__["_map"] = _map; +/* harmony export (immutable) */ __webpack_exports__["hasOwn"] = hasOwn; +/* harmony export (immutable) */ __webpack_exports__["insertElement"] = insertElement; +/* harmony export (immutable) */ __webpack_exports__["triggerPixel"] = triggerPixel; +/* harmony export (immutable) */ __webpack_exports__["callBurl"] = callBurl; +/* harmony export (immutable) */ __webpack_exports__["insertHtmlIntoIframe"] = insertHtmlIntoIframe; +/* harmony export (immutable) */ __webpack_exports__["insertUserSyncIframe"] = insertUserSyncIframe; +/* harmony export (immutable) */ __webpack_exports__["createTrackPixelHtml"] = createTrackPixelHtml; +/* harmony export (immutable) */ __webpack_exports__["createTrackPixelIframeHtml"] = createTrackPixelIframeHtml; +/* harmony export (immutable) */ __webpack_exports__["getValueString"] = getValueString; +/* harmony export (immutable) */ __webpack_exports__["uniques"] = uniques; +/* harmony export (immutable) */ __webpack_exports__["flatten"] = flatten; +/* harmony export (immutable) */ __webpack_exports__["getBidRequest"] = getBidRequest; +/* harmony export (immutable) */ __webpack_exports__["getKeys"] = getKeys; +/* harmony export (immutable) */ __webpack_exports__["getValue"] = getValue; +/* harmony export (immutable) */ __webpack_exports__["getKeyByValue"] = getKeyByValue; +/* harmony export (immutable) */ __webpack_exports__["getBidderCodes"] = getBidderCodes; +/* harmony export (immutable) */ __webpack_exports__["isGptPubadsDefined"] = isGptPubadsDefined; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getHighestCpm", function() { return getHighestCpm; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOldestHighestCpmBid", function() { return getOldestHighestCpmBid; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLatestHighestCpmBid", function() { return getLatestHighestCpmBid; }); +/* harmony export (immutable) */ __webpack_exports__["shuffle"] = shuffle; +/* harmony export (immutable) */ __webpack_exports__["adUnitsFilter"] = adUnitsFilter; +/* harmony export (immutable) */ __webpack_exports__["deepClone"] = deepClone; +/* harmony export (immutable) */ __webpack_exports__["inIframe"] = inIframe; +/* harmony export (immutable) */ __webpack_exports__["isSafariBrowser"] = isSafariBrowser; +/* harmony export (immutable) */ __webpack_exports__["replaceAuctionPrice"] = replaceAuctionPrice; +/* harmony export (immutable) */ __webpack_exports__["timestamp"] = timestamp; +/* harmony export (immutable) */ __webpack_exports__["hasDeviceAccess"] = hasDeviceAccess; +/* harmony export (immutable) */ __webpack_exports__["checkCookieSupport"] = checkCookieSupport; +/* harmony export (immutable) */ __webpack_exports__["delayExecution"] = delayExecution; +/* harmony export (immutable) */ __webpack_exports__["groupBy"] = groupBy; +/* harmony export (immutable) */ __webpack_exports__["getDefinedParams"] = getDefinedParams; +/* harmony export (immutable) */ __webpack_exports__["isValidMediaTypes"] = isValidMediaTypes; +/* harmony export (immutable) */ __webpack_exports__["getBidderRequest"] = getBidderRequest; +/* harmony export (immutable) */ __webpack_exports__["getUserConfiguredParams"] = getUserConfiguredParams; +/* harmony export (immutable) */ __webpack_exports__["getOrigin"] = getOrigin; +/* harmony export (immutable) */ __webpack_exports__["getDNT"] = getDNT; +/* harmony export (immutable) */ __webpack_exports__["isAdUnitCodeMatchingSlot"] = isAdUnitCodeMatchingSlot; +/* harmony export (immutable) */ __webpack_exports__["isSlotMatchingAdUnitCode"] = isSlotMatchingAdUnitCode; +/* harmony export (immutable) */ __webpack_exports__["getGptSlotInfoForAdUnitCode"] = getGptSlotInfoForAdUnitCode; +/* harmony export (immutable) */ __webpack_exports__["unsupportedBidderMessage"] = unsupportedBidderMessage; +/* harmony export (immutable) */ __webpack_exports__["isInteger"] = isInteger; +/* harmony export (immutable) */ __webpack_exports__["convertCamelToUnderscore"] = convertCamelToUnderscore; +/* harmony export (immutable) */ __webpack_exports__["cleanObj"] = cleanObj; +/* harmony export (immutable) */ __webpack_exports__["pick"] = pick; +/* harmony export (immutable) */ __webpack_exports__["transformBidderParamKeywords"] = transformBidderParamKeywords; +/* harmony export (immutable) */ __webpack_exports__["convertTypes"] = convertTypes; +/* harmony export (immutable) */ __webpack_exports__["isArrayOfNums"] = isArrayOfNums; +/* harmony export (immutable) */ __webpack_exports__["fill"] = fill; +/* harmony export (immutable) */ __webpack_exports__["chunk"] = chunk; +/* harmony export (immutable) */ __webpack_exports__["getMinValueFromArray"] = getMinValueFromArray; +/* harmony export (immutable) */ __webpack_exports__["getMaxValueFromArray"] = getMaxValueFromArray; +/* harmony export (immutable) */ __webpack_exports__["compareOn"] = compareOn; +/* harmony export (immutable) */ __webpack_exports__["parseQS"] = parseQS; +/* harmony export (immutable) */ __webpack_exports__["formatQS"] = formatQS; +/* harmony export (immutable) */ __webpack_exports__["parseUrl"] = parseUrl; +/* harmony export (immutable) */ __webpack_exports__["buildUrl"] = buildUrl; +/* harmony export (immutable) */ __webpack_exports__["deepEqual"] = deepEqual; +/* harmony export (immutable) */ __webpack_exports__["mergeDeep"] = mergeDeep; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_just_clone__ = __webpack_require__(158); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_just_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_just_clone__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_dlv_index_js__ = __webpack_require__(159); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deepAccess", function() { return __WEBPACK_IMPORTED_MODULE_4_dlv_index_js__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_dset__ = __webpack_require__(160); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deepSetValue", function() { return __WEBPACK_IMPORTED_MODULE_5_dset__["a"]; }); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/* eslint-disable no-console */ + + + + + +var CONSTANTS = __webpack_require__(5); + + + +var tArr = 'Array'; +var tStr = 'String'; +var tFn = 'Function'; +var tNumb = 'Number'; +var tObject = 'Object'; +var tBoolean = 'Boolean'; +var toString = Object.prototype.toString; +var consoleExists = Boolean(window.console); +var consoleLogExists = Boolean(consoleExists && window.console.log); +var consoleInfoExists = Boolean(consoleExists && window.console.info); +var consoleWarnExists = Boolean(consoleExists && window.console.warn); +var consoleErrorExists = Boolean(consoleExists && window.console.error); // this allows stubbing of utility functions that are used internally by other utility functions + +var internal = { + checkCookieSupport: checkCookieSupport, + createTrackPixelIframeHtml: createTrackPixelIframeHtml, + getWindowSelf: getWindowSelf, + getWindowTop: getWindowTop, + getWindowLocation: getWindowLocation, + insertUserSyncIframe: insertUserSyncIframe, + insertElement: insertElement, + isFn: isFn, + triggerPixel: triggerPixel, + logError: logError, + logWarn: logWarn, + logMessage: logMessage, + logInfo: logInfo, + parseQS: parseQS, + formatQS: formatQS, + deepEqual: deepEqual +}; +var uniqueRef = {}; +var bind = function (a, b) { + return b; +}.bind(null, 1, uniqueRef)() === uniqueRef ? Function.prototype.bind : function (bind) { + var self = this; + var args = Array.prototype.slice.call(arguments, 1); + return function () { + return self.apply(bind, args.concat(Array.prototype.slice.call(arguments))); + }; +}; +/* utility method to get incremental integer starting from 1 */ + +var getIncrementalInteger = function () { + var count = 0; + return function () { + count++; + return count; + }; +}(); // generate a random string (to be used as a dynamic JSONP callback) + + +function getUniqueIdentifierStr() { + return getIncrementalInteger() + Math.random().toString(16).substr(2); +} +/** + * 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 + */ + +function generateUUID(placeholder) { + return placeholder ? (placeholder ^ _getRandomData() >> placeholder / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, generateUUID); +} +/** + * Returns random data using the Crypto API if available and Math.random if not + * Method is from https://gist.github.com/jed/982883 like generateUUID, direct link https://gist.github.com/jed/982883#gistcomment-45104 + */ + +function _getRandomData() { + if (window && window.crypto && window.crypto.getRandomValues) { + return crypto.getRandomValues(new Uint8Array(1))[0] % 16; + } else { + return Math.random() * 16; + } +} + +function getBidIdParameter(key, paramsObj) { + if (paramsObj && paramsObj[key]) { + return paramsObj[key]; + } + + return ''; +} +function tryAppendQueryString(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"} +// aliases to formatQS + +function parseQueryStringParameters(queryObj) { + var result = ''; + + for (var k in queryObj) { + if (queryObj.hasOwnProperty(k)) { + result += k + '=' + encodeURIComponent(queryObj[k]) + '&'; + } + } + + result = result.replace(/&$/, ''); + return result; +} // transform an AdServer targeting bids into a query string to send to the adserver + +function transformAdServerTargetingObj(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 "".concat(key, "=").concat(encodeURIComponent(getValue(targeting, key))); + }).join('&'); + } else { + return ''; + } +} +/** + * Read an adUnit object and return the sizes used in an [[728, 90]] format (even if they had [728, 90] defined) + * Preference is given to the `adUnit.mediaTypes.banner.sizes` object over the `adUnit.sizes` + * @param {object} adUnit one adUnit object from the normal list of adUnits + * @returns {Array.} array of arrays containing numeric sizes + */ + +function getAdUnitSizes(adUnit) { + if (!adUnit) { + return; + } + + var sizes = []; + + if (adUnit.mediaTypes && adUnit.mediaTypes.banner && Array.isArray(adUnit.mediaTypes.banner.sizes)) { + var bannerSizes = adUnit.mediaTypes.banner.sizes; + + if (Array.isArray(bannerSizes[0])) { + sizes = bannerSizes; + } else { + sizes.push(bannerSizes); + } // TODO - remove this else block when we're ready to deprecate adUnit.sizes for bidders + + } else if (Array.isArray(adUnit.sizes)) { + if (Array.isArray(adUnit.sizes[0])) { + sizes = adUnit.sizes; + } else { + sizes.push(adUnit.sizes); + } + } + + return sizes; +} +/** + * 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.)} sizeObj Input array or double array [300,250] or [[300,250], [728,90]] + * @return {Array.} 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) === '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 single size array, (i.e [300, 250]) +// into an AppNexus style string, (i.e. 300x250) + +function parseGPTSingleSizeArray(singleSize) { + if (isValidGPTSingleSize(singleSize)) { + return singleSize[0] + 'x' + singleSize[1]; + } +} // Parse a GPT style single size array, (i.e [300, 250]) +// into OpenRTB-compatible (imp.banner.w/h, imp.banner.format.w/h, imp.video.w/h) object(i.e. {w:300, h:250}) + +function parseGPTSingleSizeArrayToRtbSize(singleSize) { + if (isValidGPTSingleSize(singleSize)) { + return { + w: singleSize[0], + h: singleSize[1] + }; + } +} + +function isValidGPTSingleSize(singleSize) { + // if we aren't exactly 2 items in this array, it is invalid + return isArray(singleSize) && singleSize.length === 2 && !isNaN(singleSize[0]) && !isNaN(singleSize[1]); +} + +function getWindowTop() { + return window.top; +} +function getWindowSelf() { + return window.self; +} +function getWindowLocation() { + return window.location; +} +/** + * Wrappers to console.(log | info | warn | error). Takes N arguments, the same as the native methods + */ + +function logMessage() { + if (debugTurnedOn() && consoleLogExists) { + console.log.apply(console, decorateLog(arguments, 'MESSAGE:')); + } +} +function logInfo() { + if (debugTurnedOn() && consoleInfoExists) { + console.info.apply(console, decorateLog(arguments, 'INFO:')); + } +} +function logWarn() { + if (debugTurnedOn() && consoleWarnExists) { + console.warn.apply(console, decorateLog(arguments, 'WARNING:')); + } +} +function logError() { + if (debugTurnedOn() && consoleErrorExists) { + console.error.apply(console, decorateLog(arguments, 'ERROR:')); + } +} + +function decorateLog(args, prefix) { + args = [].slice.call(args); + prefix && args.unshift(prefix); + args.unshift('display: inline-block; color: #fff; background: #3b88c3; padding: 1px 4px; border-radius: 3px;'); + args.unshift('%cPrebid'); + return args; +} + +function hasConsoleLogger() { + return consoleLogExists; +} +function debugTurnedOn() { + return !!__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('debug'); +} +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 + */ + +function getParameterByName(name) { + return parseQS(getWindowLocation().search)[name] || ''; +} +/** + * 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 + */ + +function isA(object, _t) { + return toString.call(object) === '[object ' + _t + ']'; +} +function isFn(object) { + return isA(object, tFn); +} +function isStr(object) { + return isA(object, tStr); +} +function isArray(object) { + return isA(object, tArr); +} +function isNumber(object) { + return isA(object, tNumb); +} +function isPlainObject(object) { + return isA(object, tObject); +} +function isBoolean(object) { + return isA(object, tBoolean); +} +/** + * 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 + */ + +function isEmpty(object) { + if (!object) return true; + + if (isArray(object) || 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 + */ + +function isEmptyStr(str) { + return 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 + */ + +function _each(object, fn) { + if (isEmpty(object)) return; + if (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); + } + } +} +function contains(a, obj) { + if (isEmpty(a)) { + return false; + } + + if (isFn(a.indexOf)) { + return a.indexOf(obj) !== -1; + } + + var i = a.length; + + while (i--) { + if (a[i] === obj) { + return true; + } + } + + return false; +} +/** + * Map an array or object into another array + * given a function + * @param {Array|Object} object + * @param {Function(value, key, object)} callback + * @return {Array} + */ + +function _map(object, callback) { + if (isEmpty(object)) return []; + if (isFn(object.map)) return object.map(callback); + var output = []; + + _each(object, function (value, key) { + output.push(callback(value, key, object)); + }); + + return output; +} +function hasOwn(objectToCheck, propertyToCheckFor) { + if (objectToCheck.hasOwnProperty) { + return objectToCheck.hasOwnProperty(propertyToCheckFor); + } else { + return typeof objectToCheck[propertyToCheckFor] !== 'undefined' && objectToCheck.constructor.prototype[propertyToCheckFor] !== objectToCheck[propertyToCheckFor]; + } +} +; +/* +* Inserts an element(elm) as targets child, by default as first child +* @param {HTMLElement} elm +* @param {HTMLElement} [doc] +* @param {HTMLElement} [target] +* @param {Boolean} [asLastChildChild] +* @return {HTMLElement} +*/ + +function insertElement(elm, doc, target, asLastChildChild) { + doc = doc || document; + var parentEl; + + if (target) { + parentEl = doc.getElementsByTagName(target); + } else { + parentEl = doc.getElementsByTagName('head'); + } + + try { + parentEl = parentEl.length ? parentEl : doc.getElementsByTagName('body'); + + if (parentEl.length) { + parentEl = parentEl[0]; + var insertBeforeEl = asLastChildChild ? null : parentEl.firstChild; + return parentEl.insertBefore(elm, insertBeforeEl); + } + } catch (e) {} +} +/** + * Inserts an image pixel with the specified `url` for cookie sync + * @param {string} url URL string of the image pixel to load + * @param {function} [done] an optional exit callback, used when this usersync pixel is added during an async process + */ + +function triggerPixel(url, done) { + var img = new Image(); + + if (done && internal.isFn(done)) { + img.addEventListener('load', done); + img.addEventListener('error', done); + } + + img.src = url; +} +function callBurl(_ref) { + var source = _ref.source, + burl = _ref.burl; + + if (source === CONSTANTS.S2S.SRC && burl) { + internal.triggerPixel(burl); + } +} +/** + * Inserts an empty iframe with the specified `html`, primarily used for tracking purposes + * (though could be for other purposes) + * @param {string} htmlCode snippet of HTML code used for tracking purposes + */ + +function insertHtmlIntoIframe(htmlCode) { + if (!htmlCode) { + return; + } + + var iframe = document.createElement('iframe'); + iframe.id = getUniqueIdentifierStr(); + iframe.width = 0; + iframe.height = 0; + iframe.hspace = '0'; + iframe.vspace = '0'; + iframe.marginWidth = '0'; + iframe.marginHeight = '0'; + iframe.style.display = 'none'; + iframe.style.height = '0px'; + iframe.style.width = '0px'; + iframe.scrolling = 'no'; + iframe.frameBorder = '0'; + iframe.allowtransparency = 'true'; + internal.insertElement(iframe, document, 'body'); + iframe.contentWindow.document.open(); + iframe.contentWindow.document.write(htmlCode); + iframe.contentWindow.document.close(); +} +/** + * 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 + * @param {function} [done] an optional exit callback, used when this usersync pixel is added during an async process + */ + +function insertUserSyncIframe(url, done) { + var iframeHtml = internal.createTrackPixelIframeHtml(url, false, 'allow-scripts allow-same-origin'); + var div = document.createElement('div'); + div.innerHTML = iframeHtml; + var iframe = div.firstChild; + + if (done && internal.isFn(done)) { + iframe.addEventListener('load', done); + iframe.addEventListener('error', done); + } + + internal.insertElement(iframe, document, 'html', true); +} +; +/** + * 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` + */ + +function createTrackPixelHtml(url) { + if (!url) { + return ''; + } + + var escapedUrl = encodeURI(url); + var img = '
'; + img += '
'; + 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` + */ + +function createTrackPixelIframeHtml(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=\"".concat(sandbox, "\""); + } + + return ""); +} +function getValueString(param, val, defaultValue) { + if (val === undefined || val === null) { + return defaultValue; + } + + if (isStr(val)) { + return val; + } + + if (isNumber(val)) { + return val.toString(); + } + + internal.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, bidderRequests) { + if (!id) { + return; + } + + var bidRequest; + bidderRequests.some(function (bidderRequest) { + var result = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(bidderRequest.bids, function (bid) { + return ['bidId', 'adId', 'bid_id'].some(function (type) { + return bid[type] === id; + }); + }); + + if (result) { + bidRequest = result; + } + + return result; + }); + return bidRequest; +} +function getKeys(obj) { + return Object.keys(obj); +} +function getValue(obj, key) { + return obj[key]; +} +/** + * Get the key of an object for a given value + */ + +function getKeyByValue(obj, value) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + if (obj[prop] === value) { + return prop; + } + } + } +} +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 && isFn(window.googletag.pubads) && isFn(window.googletag.pubads().getSlots)) { + return true; + } +} // This function will get highest cpm value bid, in case of tie it will return the bid with lowest timeToRespond + +var getHighestCpm = getHighestCpmCallback('timeToRespond', function (previous, current) { + return previous > current; +}); // This function will get the oldest hightest cpm value bid, in case of tie it will return the bid which came in first +// Use case for tie: https://github.com/prebid/Prebid.js/issues/2448 + +var getOldestHighestCpmBid = getHighestCpmCallback('responseTimestamp', function (previous, current) { + return previous > current; +}); // This function will get the latest hightest cpm value bid, in case of tie it will return the bid which came in last +// Use case for tie: https://github.com/prebid/Prebid.js/issues/2539 + +var getLatestHighestCpmBid = getHighestCpmCallback('responseTimestamp', function (previous, current) { + return previous < current; +}); + +function getHighestCpmCallback(useTieBreakerProperty, tieBreakerCallback) { + return function (previous, current) { + if (previous.cpm === current.cpm) { + return tieBreakerCallback(previous[useTieBreakerProperty], current[useTieBreakerProperty]) ? 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 __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(filter, bid && bid.adUnitCode); +} +function deepClone(obj) { + return __WEBPACK_IMPORTED_MODULE_1_just_clone___default()(obj); +} +function inIframe() { + try { + return internal.getWindowSelf() !== internal.getWindowTop(); + } catch (e) { + return true; + } +} +function isSafariBrowser() { + return /^((?!chrome|android|crios|fxios).)*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(); +} +/** + * When the deviceAccess flag config option is false, no cookies should be read or set + * @returns {boolean} + */ + +function hasDeviceAccess() { + return __WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('deviceAccess') !== false; +} +/** + * @returns {(boolean|undefined)} + */ + +function checkCookieSupport() { + if (window.navigator.cookieEnabled || !!document.cookie.length) { + return true; + } +} +/** + * 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 ".concat(numRequiredCalls)); + } + + var numCalls = 0; + return function () { + numCalls++; + + if (numCalls === numRequiredCalls) { + func.apply(this, arguments); + } + }; +} +/** + * https://stackoverflow.com/a/34890276/428704 + * @export + * @param {array} xs + * @param {string} key + * @returns {Object} {${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; + }, {}); +} +/** + * 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', 'adpod']; + var types = Object.keys(mediaTypes); + + if (!types.every(function (type) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(SUPPORTED_MEDIA_TYPES, type); + })) { + return false; + } + + if (mediaTypes.video && mediaTypes.video.context) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(SUPPORTED_STREAM_TYPES, mediaTypes.video.context); + } + + return true; +} +function getBidderRequest(bidRequests, bidder, adUnitCode) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(bidRequests, function (request) { + return request.bids.filter(function (bid) { + return bid.bidder === bidder && bid.adUnitCode === adUnitCode; + }).length > 0; + }) || { + start: null, + auctionId: null + }; +} +/** + * Returns user configured bidder params from adunit + * @param {Object} adUnits + * @param {string} adUnitCode code + * @param {string} bidder code + * @return {Array} user configured param for the given bidder adunit configuration + */ + +function getUserConfiguredParams(adUnits, adUnitCode, bidder) { + return adUnits.filter(function (adUnit) { + return adUnit.code === adUnitCode; + }).map(function (adUnit) { + return adUnit.bids; + }).reduce(flatten, []).filter(function (bidderData) { + return bidderData.bidder === bidder; + }).map(function (bidderData) { + return bidderData.params || {}; + }); +} +/** + * 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); + }; +} +/** + * @summary Uses the adUnit's code in order to find a matching gptSlot on the page + */ + +function getGptSlotInfoForAdUnitCode(adUnitCode) { + var matchingSlot; + + if (isGptPubadsDefined()) { + // find the first matching gpt slot on the page + matchingSlot = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(window.googletag.pubads().getSlots(), isSlotMatchingAdUnitCode(adUnitCode)); + } + + if (matchingSlot) { + return { + gptSlot: matchingSlot.getAdUnitPath(), + divId: matchingSlot.getSlotElementId() + }; + } + + return {}; +} +; +/** + * 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 ".concat(adUnit.code, " is a ").concat(mediaType, " ad unit\n containing bidders that don't support ").concat(mediaType, ": ").concat(bidder, ".\n This bidder won't fetch demand.\n "); +} +/** + * 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; + } +} +/** + * Converts a string value in camel-case to underscore eg 'placementId' becomes 'placement_id' + * @param {string} value string value to convert + */ + +function convertCamelToUnderscore(value) { + return value.replace(/(?:^|\.?)([A-Z])/g, function (x, y) { + return '_' + y.toLowerCase(); + }).replace(/^_/, ''); +} +/** + * Returns a new object with undefined properties removed from given object + * @param obj the object to clean + */ + +function cleanObj(obj) { + return Object.keys(obj).reduce(function (newObj, key) { + if (typeof obj[key] !== 'undefined') { + newObj[key] = obj[key]; + } + + return newObj; + }, {}); +} +/** + * Create a new object with selected properties. Also allows property renaming and transform functions. + * @param obj the original object + * @param properties An array of desired properties + */ + +function pick(obj, properties) { + if (_typeof(obj) !== 'object') { + return {}; + } + + return properties.reduce(function (newObj, prop, i) { + if (typeof prop === 'function') { + return newObj; + } + + var newProp = prop; + var match = prop.match(/^(.+?)\sas\s(.+?)$/i); + + if (match) { + prop = match[1]; + newProp = match[2]; + } + + var value = obj[prop]; + + if (typeof properties[i + 1] === 'function') { + value = properties[i + 1](value, newObj); + } + + if (typeof value !== 'undefined') { + newObj[newProp] = value; + } + + return newObj; + }, {}); +} +/** + * Converts an object of arrays (either strings or numbers) into an array of objects containing key and value properties + * normally read from bidder params + * eg { foo: ['bar', 'baz'], fizz: ['buzz'] } + * becomes [{ key: 'foo', value: ['bar', 'baz']}, {key: 'fizz', value: ['buzz']}] + * @param {Object} keywords object of arrays representing keyvalue pairs + * @param {string} paramName name of parent object (eg 'keywords') containing keyword data, used in error handling + */ + +function transformBidderParamKeywords(keywords) { + var paramName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'keywords'; + var arrs = []; + + _each(keywords, function (v, k) { + if (isArray(v)) { + var values = []; + + _each(v, function (val) { + val = getValueString(paramName + '.' + k, val); + + if (val || val === '') { + values.push(val); + } + }); + + v = values; + } else { + v = getValueString(paramName + '.' + k, v); + + if (isStr(v)) { + v = [v]; + } else { + return; + } // unsuported types - don't send a key + + } + + arrs.push({ + key: k, + value: v + }); + }); + + return arrs; +} +/** + * 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; + } +} + +function convertTypes(types, params) { + Object.keys(types).forEach(function (key) { + if (params[key]) { + if (isFn(types[key])) { + params[key] = types[key](params[key]); + } else { + params[key] = tryConvertType(types[key], params[key]); + } // don't send invalid values + + + if (isNaN(params[key])) { + delete params.key; + } + } + }); + return params; +} +function isArrayOfNums(val, size) { + return isArray(val) && (size ? val.length === size : true) && val.every(function (v) { + return isInteger(v); + }); +} +/** + * Creates an array of n length and fills each item with the given value + */ + +function fill(value, length) { + var newArray = []; + + for (var i = 0; i < length; i++) { + var valueToPush = isPlainObject(value) ? deepClone(value) : value; + newArray.push(valueToPush); + } + + return newArray; +} +/** + * http://npm.im/chunk + * Returns an array with *size* chunks from given array + * + * Example: + * ['a', 'b', 'c', 'd', 'e'] chunked by 2 => + * [['a', 'b'], ['c', 'd'], ['e']] + */ + +function chunk(array, size) { + var newArray = []; + + for (var i = 0; i < Math.ceil(array.length / size); i++) { + var start = i * size; + var end = start + size; + newArray.push(array.slice(start, end)); + } + + return newArray; +} +function getMinValueFromArray(array) { + return Math.min.apply(Math, _toConsumableArray(array)); +} +function getMaxValueFromArray(array) { + return Math.max.apply(Math, _toConsumableArray(array)); +} +/** + * This function will create compare function to sort on object property + * @param {string} property + * @returns {function} compare function to be used in sorting + */ + +function compareOn(property) { + return function compare(a, b) { + if (a[property] < b[property]) { + return 1; + } + + if (a[property] > b[property]) { + return -1; + } + + return 0; + }; +} +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 "".concat(k, "[]=").concat(v); + }).join('&') : "".concat(k, "=").concat(query[k]); + }).join('&'); +} +function parseUrl(url, options) { + var parsed = document.createElement('a'); + + if (options && 'noDecodeWholeURL' in options && options.noDecodeWholeURL) { + parsed.href = url; + } else { + parsed.href = decodeURIComponent(url); + } // in window.location 'search' is string, not object + + + var qsAsString = options && 'decodeSearchAsString' in options && options.decodeSearchAsString; + return { + href: parsed.href, + protocol: (parsed.protocol || '').replace(/:$/, ''), + hostname: parsed.hostname, + port: +parsed.port, + pathname: parsed.pathname.replace(/^(?!\/)/, '/'), + search: qsAsString ? parsed.search : internal.parseQS(parsed.search || ''), + hash: (parsed.hash || '').replace(/^#/, ''), + host: parsed.host || window.location.host + }; +} +function buildUrl(obj) { + return (obj.protocol || 'http') + '://' + (obj.host || obj.hostname + (obj.port ? ":".concat(obj.port) : '')) + (obj.pathname || '') + (obj.search ? "?".concat(internal.formatQS(obj.search || '')) : '') + (obj.hash ? "#".concat(obj.hash) : ''); +} +/** + * This function deeply compares two objects checking for their equivalence. + * @param {Object} obj1 + * @param {Object} obj2 + * @returns {boolean} + */ + +function deepEqual(obj1, obj2) { + if (obj1 === obj2) return true;else if (_typeof(obj1) === 'object' && obj1 !== null && _typeof(obj2) === 'object' && obj2 !== null) { + if (Object.keys(obj1).length !== Object.keys(obj2).length) return false; + + for (var prop in obj1) { + if (obj2.hasOwnProperty(prop)) { + if (!deepEqual(obj1[prop], obj2[prop])) { + return false; + } + } else { + return false; + } + } + + return true; + } else { + return false; + } +} +function mergeDeep(target) { + for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + if (!sources.length) return target; + var source = sources.shift(); + + if (isPlainObject(target) && isPlainObject(source)) { + for (var key in source) { + if (isPlainObject(source[key])) { + if (!target[key]) _extends(target, _defineProperty({}, key, {})); + mergeDeep(target[key], source[key]); + } else if (isArray(source[key])) { + if (!target[key]) { + _extends(target, _defineProperty({}, key, source[key])); + } else if (isArray(target[key])) { + target[key] = target[key].concat(source[key]); + } + } else { + _extends(target, _defineProperty({}, key, source[key])); + } + } + } + + return mergeDeep.apply(void 0, [target].concat(sources)); +} + +/***/ }), + +/***/ 1: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (immutable) */ __webpack_exports__["registerBidder"] = registerBidder; +/* harmony export (immutable) */ __webpack_exports__["newBidder"] = newBidder; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerSyncInner", function() { return registerSyncInner; }); +/* harmony export (immutable) */ __webpack_exports__["preloadBidderMappingFile"] = preloadBidderMappingFile; +/* harmony export (immutable) */ __webpack_exports__["getIabSubCategory"] = getIabSubCategory; +/* harmony export (immutable) */ __webpack_exports__["isValid"] = isValid; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adapter_js__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__userSync_js__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__video_js__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__storageManager_js__ = __webpack_require__(9); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + + + + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_14__storageManager_js__["a" /* getCoreStorageManager */])('bidderFactory'); +/** + * 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. + * @property {function(object): object} transformBidParams Updates bid params before creating bid request + }} + */ + +/** + * @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 {object} [native] Object for storing native creative assets + * @property {object} [video] Object for storing video response data + * @property {object} [meta] Object for storing bid meta data + * @property {string} [meta.primaryCatId] The IAB primary category ID + * @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']; +var DEFAULT_REFRESHIN_DAYS = 1; +/** + * 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); + __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].registerBidAdapter(bidder, spec.code, mediaTypes); + } + + putBidder(spec); + + if (Array.isArray(spec.aliases)) { + spec.aliases.forEach(function (alias) { + var aliasCode = alias; + var gvlid; + + if (Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["isPlainObject"])(alias)) { + aliasCode = alias.code; + gvlid = alias.gvlid; + } + + __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].aliasRegistry[aliasCode] = spec.code; + putBidder(_extends({}, spec, { + code: aliasCode, + gvlid: gvlid + })); + }); + } +} +/** + * 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 __WEBPACK_IMPORTED_MODULE_0__adapter_js__["a" /* default */](spec.code), { + getSpec: function getSpec() { + return Object.freeze(spec); + }, + registerSyncs: registerSyncs, + callBids: function callBids(bidderRequest, addBidResponse, done, ajax, onTimelyResponse, configEnabledCallback) { + 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() { + done(); + __WEBPACK_IMPORTED_MODULE_8__events_js___default.a.emit(__WEBPACK_IMPORTED_MODULE_7__constants_json___default.a.EVENTS.BIDDER_DONE, bidderRequest); + registerSyncs(responses, bidderRequest.gdprConsent, bidderRequest.uspConsent); + } + + 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 = Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["delayExecution"])(configEnabledCallback(afterAllResponses), requests.length); + requests.forEach(processRequest); + + function formatGetParameters(data) { + if (data) { + return "?".concat(_typeof(data) === 'object' ? Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["parseQueryStringParameters"])(data) : data); + } + + return ''; + } + + function processRequest(request) { + switch (request.method) { + case 'GET': + ajax("".concat(request.url).concat(formatGetParameters(request.data)), { + success: configEnabledCallback(onSuccess), + error: onFailure + }, undefined, _extends({ + method: 'GET', + withCredentials: true + }, request.options)); + break; + + case 'POST': + ajax(request.url, { + success: configEnabledCallback(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: + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Skipping invalid request from ".concat(spec.code, ". Request type ").concat(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) { + onTimelyResponse(spec.code); + + 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; + + try { + bids = spec.interpretResponse(response, request); + } catch (err) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Bidder ".concat(spec.code, " failed to interpret the server's response. Continuing without bids"), null, err); + onResponse(); + return; + } + + if (bids) { + if (Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["isArray"])(bids)) { + bids.forEach(addBidUsingRequestMap); + } else { + addBidUsingRequestMap(bids); + } + } + + onResponse(bids); + + function addBidUsingRequestMap(bid) { + var bidRequest = bidRequestMap[bid.requestId]; + + if (bidRequest) { + // creating a copy of original values as cpm and currency are modified later + bid.originalCpm = bid.cpm; + bid.originalCurrency = bid.currency; + bid.meta = bid.meta || _extends({}, bid[bidRequest.bidder]); + + var prebidBid = _extends(Object(__WEBPACK_IMPORTED_MODULE_3__bidfactory_js__["a" /* createBid */])(__WEBPACK_IMPORTED_MODULE_7__constants_json___default.a.STATUS.GOOD, bidRequest), bid); + + addBidWithCode(bidRequest.adUnitCode, prebidBid); + } else { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Bidder ".concat(spec.code, " made bid for unknown request ID: ").concat(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) { + onTimelyResponse(spec.code); + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Server call for ".concat(spec.code, " failed: ").concat(err, ". Continuing without bids.")); + onResponse(); + } + } + } + }); + + function registerSyncs(responses, gdprConsent, uspConsent) { + registerSyncInner(spec, responses, gdprConsent, uspConsent); + } + + function filterAndWarn(bid) { + if (!spec.isBidRequestValid(bid)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Invalid bid sent to bidder ".concat(spec.code, ": ").concat(JSON.stringify(bid))); + return false; + } + + return true; + } +} +var registerSyncInner = Object(__WEBPACK_IMPORTED_MODULE_13__hook_js__["b" /* hook */])('async', function (spec, responses, gdprConsent, uspConsent) { + var aliasSyncEnabled = __WEBPACK_IMPORTED_MODULE_2__config_js__["b" /* config */].getConfig('userSync.aliasSyncEnabled'); + + if (spec.getUserSyncs && (aliasSyncEnabled || !__WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].aliasRegistry[spec.code])) { + var filterConfig = __WEBPACK_IMPORTED_MODULE_2__config_js__["b" /* config */].getConfig('userSync.filterSettings'); + var syncs = spec.getUserSyncs({ + iframeEnabled: !!(filterConfig && (filterConfig.iframe || filterConfig.all)), + pixelEnabled: !!(filterConfig && (filterConfig.image || filterConfig.all)) + }, responses, gdprConsent, uspConsent); + + if (syncs) { + if (!Array.isArray(syncs)) { + syncs = [syncs]; + } + + syncs.forEach(function (sync) { + __WEBPACK_IMPORTED_MODULE_4__userSync_js__["a" /* userSync */].registerSync(sync.type, spec.code, sync.url); + }); + } + } +}, 'registerSyncs'); +function preloadBidderMappingFile(fn, adUnits) { + if (!__WEBPACK_IMPORTED_MODULE_2__config_js__["b" /* config */].getConfig('adpod.brandCategoryExclusion')) { + return fn.call(this, adUnits); + } + + var adPodBidders = adUnits.filter(function (adUnit) { + return Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["deepAccess"])(adUnit, 'mediaTypes.video.context') === __WEBPACK_IMPORTED_MODULE_12__mediaTypes_js__["a" /* ADPOD */]; + }).map(function (adUnit) { + return adUnit.bids.map(function (bid) { + return bid.bidder; + }); + }).reduce(__WEBPACK_IMPORTED_MODULE_11__utils_js__["flatten"], []).filter(__WEBPACK_IMPORTED_MODULE_11__utils_js__["uniques"]); + adPodBidders.forEach(function (bidder) { + var bidderSpec = __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].getBidAdapter(bidder); + + if (bidderSpec.getSpec().getMappingFileInfo) { + var info = bidderSpec.getSpec().getMappingFileInfo(); + var refreshInDays = info.refreshInDays ? info.refreshInDays : DEFAULT_REFRESHIN_DAYS; + var key = info.localStorageKey ? info.localStorageKey : bidderSpec.getSpec().code; + var mappingData = storage.getDataFromLocalStorage(key); + + try { + mappingData = mappingData ? JSON.parse(mappingData) : undefined; + + if (!mappingData || Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["timestamp"])() > mappingData.lastUpdated + refreshInDays * 24 * 60 * 60 * 1000) { + Object(__WEBPACK_IMPORTED_MODULE_10__ajax_js__["a" /* ajax */])(info.url, { + success: function success(response) { + try { + response = JSON.parse(response); + var mapping = { + lastUpdated: Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["timestamp"])(), + mapping: response.mapping + }; + storage.setDataInLocalStorage(key, JSON.stringify(mapping)); + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to parse ".concat(bidder, " bidder translation mapping file")); + } + }, + error: function error() { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to load ".concat(bidder, " bidder translation file")); + } + }); + } + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to parse ".concat(bidder, " bidder translation mapping file")); + } + } + }); + fn.call(this, adUnits); +} +Object(__WEBPACK_IMPORTED_MODULE_13__hook_js__["a" /* getHook */])('checkAdUnitSetup').before(preloadBidderMappingFile); +/** + * Reads the data stored in localstorage and returns iab subcategory + * @param {string} bidderCode bidderCode + * @param {string} category bidders category + */ + +function getIabSubCategory(bidderCode, category) { + var bidderSpec = __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].getBidAdapter(bidderCode); + + if (bidderSpec.getSpec().getMappingFileInfo) { + var info = bidderSpec.getSpec().getMappingFileInfo(); + var key = info.localStorageKey ? info.localStorageKey : bidderSpec.getBidderCode(); + var data = storage.getDataFromLocalStorage(key); + + if (data) { + try { + data = JSON.parse(data); + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to parse ".concat(bidderCode, " mapping data stored in local storage")); + } + + return data.mapping[category] ? data.mapping[category] : null; + } + } +} // check that the bid has a width and height set + +function validBidSize(adUnitCode, bid, bidRequests) { + if ((bid.width || parseInt(bid.width, 10) === 0) && (bid.height || parseInt(bid.height, 10) === 0)) { + bid.width = parseInt(bid.width, 10); + bid.height = parseInt(bid.height, 10); + return true; + } + + var adUnit = Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["getBidderRequest"])(bidRequests, bid.bidderCode, adUnitCode); + var sizes = adUnit && adUnit.bids && adUnit.bids[0] && adUnit.bids[0].sizes; + var parsedSizes = Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["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 = parseInt(width, 10); + bid.height = parseInt(height, 10); + 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 __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default()(bidKeys, key) && !__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default()([undefined, null], bid[key]); + }); + } + + function errorMessage(msg) { + return "Invalid bid from ".concat(bid.bidderCode, ". Ignoring bid: ").concat(msg); + } + + if (!adUnitCode) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])('No adUnitCode was supplied to addBidResponse.'); + return false; + } + + if (!bid) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Some adapter tried to add an undefined bid for ".concat(adUnitCode, ".")); + return false; + } + + if (!hasValidKeys()) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage("Bidder ".concat(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' && !Object(__WEBPACK_IMPORTED_MODULE_5__native_js__["f" /* nativeBidIsValid */])(bid, bidRequests)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage('Native bid missing some required properties.')); + return false; + } + + if (bid.mediaType === 'video' && !Object(__WEBPACK_IMPORTED_MODULE_6__video_js__["d" /* isValidVideoBid */])(bid, bidRequests)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage("Video bid does not have required vastUrl or renderer property")); + return false; + } + + if (bid.mediaType === 'banner' && !validBidSize(adUnitCode, bid, bidRequests)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage("Banner bids require a width and height")); + return false; + } + + return true; +} + +/***/ }), + +/***/ 10: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(96); + +module.exports = parent; + + +/***/ }), + +/***/ 100: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : typeof detection == 'function' ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), + +/***/ 101: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); +var isArray = __webpack_require__(102); +var wellKnownSymbol = __webpack_require__(19); + +var SPECIES = wellKnownSymbol('species'); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.github.io/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); +}; + + +/***/ }), + +/***/ 102: +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(48); + +// `IsArray` abstract operation +// https://tc39.github.io/ecma262/#sec-isarray +module.exports = Array.isArray || function isArray(arg) { + return classof(arg) == 'Array'; +}; + + +/***/ }), + +/***/ 103: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var createNonEnumerableProperty = __webpack_require__(29); + +module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } return value; +}; + + +/***/ }), + +/***/ 104: +/***/ (function(module, exports, __webpack_require__) { + +var NATIVE_SYMBOL = __webpack_require__(75); + +module.exports = NATIVE_SYMBOL + // eslint-disable-next-line no-undef + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), + +/***/ 105: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(106); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('Array', 'includes'); + + +/***/ }), + +/***/ 106: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var $includes = __webpack_require__(76).includes; +var addToUnscopables = __webpack_require__(51); +var arrayMethodUsesToLength = __webpack_require__(60); + +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + +// `Array.prototype.includes` method +// https://tc39.github.io/ecma262/#sec-array.prototype.includes +$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('includes'); + + +/***/ }), + +/***/ 107: +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(58); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), + +/***/ 108: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(109); +__webpack_require__(126); +__webpack_require__(87); +__webpack_require__(128); +var path = __webpack_require__(42); + +module.exports = path.Set; + + +/***/ }), + +/***/ 109: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var collection = __webpack_require__(110); +var collectionStrong = __webpack_require__(115); + +// `Set` constructor +// https://tc39.github.io/ecma262/#sec-set-objects +module.exports = collection('Set', function (init) { + return function Set() { return init(this, arguments.length ? arguments[0] : undefined); }; +}, collectionStrong); + + +/***/ }), + +/***/ 11: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = Renderer; +/* harmony export (immutable) */ __webpack_exports__["c"] = isRendererRequired; +/* harmony export (immutable) */ __webpack_exports__["b"] = executeRenderer; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adloader_js__ = __webpack_require__(39); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); + + + +var moduleCode = 'outstream'; +/** + * @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, + adUnitCode = options.adUnitCode; + 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 loadExternalScript, at which point the the command + // queue will be processed + + this.loaded = loaded; + this.cmd = []; + + this.push = function (func) { + if (typeof func !== 'function') { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["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(); + }; // use a function, not an arrow, in order to be able to pass "arguments" through + + + this.render = function () { + if (!isRendererDefinedOnAdUnit(adUnitCode)) { + // we expect to load a renderer url once only so cache the request to load script + Object(__WEBPACK_IMPORTED_MODULE_0__adloader_js__["a" /* loadExternalScript */])(url, moduleCode, this.callback); + } else { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"]("External Js not loaded by Renderer since renderer url and callback is already defined on adUnit ".concat(adUnitCode)); + } + + if (this._render) { + this._render.apply(this, arguments); // _render is expected to use push as appropriate + + } else { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"]("No render function was provided, please use .setRender on the renderer"); + } + }.bind(this); // bind the function to this object to avoid 'this' errors + +} + +Renderer.install = function (_ref) { + var url = _ref.url, + config = _ref.config, + id = _ref.id, + callback = _ref.callback, + loaded = _ref.loaded, + adUnitCode = _ref.adUnitCode; + return new Renderer({ + url: url, + config: config, + id: id, + callback: callback, + loaded: loaded, + adUnitCode: adUnitCode + }); +}; + +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](); + } + + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logMessage"]("Prebid Renderer event for id ".concat(id, " type ").concat(eventName)); +}; +/* + * Calls functions that were pushed to the command queue before the + * renderer was loaded by `loadExternalScript` + */ + + +Renderer.prototype.process = function () { + while (this.cmd.length > 0) { + try { + this.cmd.shift().call(); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('Error processing Renderer command: ', error); + } + } +}; +/** + * Checks whether creative rendering should be done by Renderer or not. + * @param {Object} renderer Renderer object installed by adapter + * @returns {Boolean} + */ + + +function isRendererRequired(renderer) { + return !!(renderer && renderer.url); +} +/** + * Render the bid returned by the adapter + * @param {Object} renderer Renderer object installed by adapter + * @param {Object} bid Bid response + */ + +function executeRenderer(renderer, bid) { + renderer.render(bid); +} + +function isRendererDefinedOnAdUnit(adUnitCode) { + var adUnits = pbjs.adUnits; + var adUnit = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(adUnits, function (adUnit) { + return adUnit.code === adUnitCode; + }); + return !!(adUnit && adUnit.renderer && adUnit.renderer.url && adUnit.renderer.render); +} + +/***/ }), + +/***/ 110: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var global = __webpack_require__(22); +var InternalMetadataModule = __webpack_require__(78); +var fails = __webpack_require__(28); +var createNonEnumerableProperty = __webpack_require__(29); +var iterate = __webpack_require__(17); +var anInstance = __webpack_require__(81); +var isObject = __webpack_require__(23); +var setToStringTag = __webpack_require__(64); +var defineProperty = __webpack_require__(31).f; +var forEach = __webpack_require__(56).forEach; +var DESCRIPTORS = __webpack_require__(27); +var InternalStateModule = __webpack_require__(54); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var exported = {}; + var Constructor; + + if (!DESCRIPTORS || typeof NativeConstructor != 'function' + || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); })) + ) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.REQUIRED = true; + } else { + Constructor = wrapper(function (target, iterable) { + setInternalState(anInstance(target, Constructor, CONSTRUCTOR_NAME), { + type: CONSTRUCTOR_NAME, + collection: new NativeConstructor() + }); + if (iterable != undefined) iterate(iterable, target[ADDER], target, IS_MAP); + }); + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) { + var IS_ADDER = KEY == 'add' || KEY == 'set'; + if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) { + createNonEnumerableProperty(Constructor.prototype, KEY, function (a, b) { + var collection = getInternalState(this).collection; + if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false; + var result = collection[KEY](a === 0 ? 0 : a, b); + return IS_ADDER ? this : result; + }); + } + }); + + IS_WEAK || defineProperty(Constructor.prototype, 'size', { + configurable: true, + get: function () { + return getInternalState(this).collection.size; + } + }); + } + + setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true); + + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, forced: true }, exported); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; +}; + + +/***/ }), + +/***/ 111: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +module.exports = !fails(function () { + return Object.isExtensible(Object.preventExtensions({})); +}); + + +/***/ }), + +/***/ 112: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(63); +var classof = __webpack_require__(62); + +// `Object.prototype.toString` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), + +/***/ 113: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var inspectSource = __webpack_require__(114); + +var WeakMap = global.WeakMap; + +module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); + + +/***/ }), + +/***/ 114: +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(74); + +var functionToString = Function.toString; + +// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper +if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), + +/***/ 115: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var defineProperty = __webpack_require__(31).f; +var create = __webpack_require__(82); +var redefineAll = __webpack_require__(120); +var bind = __webpack_require__(21); +var anInstance = __webpack_require__(81); +var iterate = __webpack_require__(17); +var defineIterator = __webpack_require__(66); +var setSpecies = __webpack_require__(125); +var DESCRIPTORS = __webpack_require__(27); +var fastKey = __webpack_require__(78).fastKey; +var InternalStateModule = __webpack_require__(54); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, CONSTRUCTOR_NAME); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS) that.size = 0; + if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP); + }); + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS) state.size++; + else that.size++; + // add to index + if (index !== 'F') state.index[index] = entry; + } return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + state.first = state.last = undefined; + if (DESCRIPTORS) state.size = 0; + else that.size = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (DESCRIPTORS) state.size--; + else that.size--; + } return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key) { + return !!getEntry(this, key); + } + }); + + redefineAll(C.prototype, IS_MAP ? { + // 23.1.3.6 Map.prototype.get(key) + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // 23.1.3.9 Map.prototype.set(key, value) + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) defineProperty(C.prototype, 'size', { + get: function () { + return getInternalState(this).size; + } + }); + return C; + }, + setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return { value: undefined, done: true }; + } + // return step by kind + if (kind == 'keys') return { value: entry.key, done: false }; + if (kind == 'values') return { value: entry.value, done: false }; + return { value: [entry.key, entry.value], done: false }; + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(CONSTRUCTOR_NAME); + } +}; + + +/***/ }), + +/***/ 116: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var definePropertyModule = __webpack_require__(31); +var anObject = __webpack_require__(15); +var objectKeys = __webpack_require__(117); + +// `Object.defineProperties` method +// https://tc39.github.io/ecma262/#sec-object.defineproperties +module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); + return O; +}; + + +/***/ }), + +/***/ 117: +/***/ (function(module, exports, __webpack_require__) { + +var internalObjectKeys = __webpack_require__(118); +var enumBugKeys = __webpack_require__(83); + +// `Object.keys` method +// https://tc39.github.io/ecma262/#sec-object.keys +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + + +/***/ }), + +/***/ 118: +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(24); +var toIndexedObject = __webpack_require__(47); +var indexOf = __webpack_require__(76).indexOf; +var hiddenKeys = __webpack_require__(53); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + return result; +}; + + +/***/ }), + +/***/ 119: +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(25); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), + +/***/ 12: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(105); + +module.exports = parent; + + +/***/ }), + +/***/ 120: +/***/ (function(module, exports, __webpack_require__) { + +var redefine = __webpack_require__(84); + +module.exports = function (target, src, options) { + for (var key in src) { + if (options && options.unsafe && target[key]) target[key] = src[key]; + else redefine(target, key, src[key], options); + } return target; +}; + + +/***/ }), + +/***/ 121: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var IteratorPrototype = __webpack_require__(85).IteratorPrototype; +var create = __webpack_require__(82); +var createPropertyDescriptor = __webpack_require__(46); +var setToStringTag = __webpack_require__(64); +var Iterators = __webpack_require__(37); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + + +/***/ }), + +/***/ 122: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + + +/***/ }), + +/***/ 123: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var aPossiblePrototype = __webpack_require__(124); + +// `Object.setPrototypeOf` method +// https://tc39.github.io/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +/* eslint-disable no-proto */ +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + + +/***/ }), + +/***/ 124: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +module.exports = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + ' as a prototype'); + } return it; +}; + + +/***/ }), + +/***/ 125: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var getBuiltIn = __webpack_require__(25); +var definePropertyModule = __webpack_require__(31); +var wellKnownSymbol = __webpack_require__(19); +var DESCRIPTORS = __webpack_require__(27); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule.f; + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineProperty(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), + +/***/ 126: +/***/ (function(module, exports) { + +// empty + + +/***/ }), + +/***/ 127: +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(58); +var requireObjectCoercible = __webpack_require__(49); + +// `String.prototype.{ codePointAt, at }` methods implementation +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING ? S.charAt(position) : first + : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), + +/***/ 128: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(129); +var DOMIterables = __webpack_require__(130); +var global = __webpack_require__(22); +var classof = __webpack_require__(62); +var createNonEnumerableProperty = __webpack_require__(29); +var Iterators = __webpack_require__(37); +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + Iterators[COLLECTION_NAME] = Iterators.Array; +} + + +/***/ }), + +/***/ 129: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var toIndexedObject = __webpack_require__(47); +var addToUnscopables = __webpack_require__(51); +var Iterators = __webpack_require__(37); +var InternalStateModule = __webpack_require__(54); +var defineIterator = __webpack_require__(66); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.github.io/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.github.io/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.github.io/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.github.io/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject +// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject +Iterators.Arguments = Iterators.Array; + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + + +/***/ }), + +/***/ 13: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hook; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getHook; }); +/* harmony export (immutable) */ __webpack_exports__["d"] = setupBeforeHookFnOnce; +/* harmony export (immutable) */ __webpack_exports__["c"] = module; +/* harmony export (immutable) */ __webpack_exports__["e"] = submodule; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js__ = __webpack_require__(161); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js__); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + +var hook = __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default()({ + ready: __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default.a.SYNC | __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default.a.ASYNC | __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default.a.QUEUE +}); +var getHook = hook.get; +function setupBeforeHookFnOnce(baseFn, hookFn) { + var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 15; + var result = baseFn.getHooks({ + hook: hookFn + }); + + if (result.length === 0) { + baseFn.before(hookFn, priority); + } +} +function module(name, install) { + hook('async', function (submodules) { + submodules.forEach(function (args) { + return install.apply(void 0, _toConsumableArray(args)); + }); + }, name)([]); // will be queued until hook.ready() called in pbjs.processQueue(); +} +function submodule(name) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + getHook(name).before(function (next, modules) { + modules.push(args); + next(modules); + }); +} + +/***/ }), + +/***/ 130: +/***/ (function(module, exports) { + +// iterable DOM collections +// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods +module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 +}; + + +/***/ }), + +/***/ 131: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var from = __webpack_require__(132); + +// `Set.from` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from +$({ target: 'Set', stat: true }, { + from: from +}); + + +/***/ }), + +/***/ 132: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://tc39.github.io/proposal-setmap-offrom/ +var aFunction = __webpack_require__(18); +var bind = __webpack_require__(21); +var iterate = __webpack_require__(17); + +module.exports = function from(source /* , mapFn, thisArg */) { + var length = arguments.length; + var mapFn = length > 1 ? arguments[1] : undefined; + var mapping, A, n, boundFunction; + aFunction(this); + mapping = mapFn !== undefined; + if (mapping) aFunction(mapFn); + if (source == undefined) return new this(); + A = []; + if (mapping) { + n = 0; + boundFunction = bind(mapFn, length > 2 ? arguments[2] : undefined, 2); + iterate(source, function (nextItem) { + A.push(boundFunction(nextItem, n++)); + }); + } else { + iterate(source, A.push, A); + } + return new this(A); +}; + + +/***/ }), + +/***/ 133: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var of = __webpack_require__(134); + +// `Set.of` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of +$({ target: 'Set', stat: true }, { + of: of +}); + + +/***/ }), + +/***/ 134: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://tc39.github.io/proposal-setmap-offrom/ +module.exports = function of() { + var length = arguments.length; + var A = new Array(length); + while (length--) A[length] = arguments[length]; + return new this(A); +}; + + +/***/ }), + +/***/ 135: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var collectionAddAll = __webpack_require__(136); + +// `Set.prototype.addAll` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + addAll: function addAll(/* ...elements */) { + return collectionAddAll.apply(this, arguments); + } +}); + + +/***/ }), + +/***/ 136: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); + +// https://github.com/tc39/collection-methods +module.exports = function (/* ...elements */) { + var set = anObject(this); + var adder = aFunction(set.add); + for (var k = 0, len = arguments.length; k < len; k++) { + adder.call(set, arguments[k]); + } + return set; +}; + + +/***/ }), + +/***/ 137: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var collectionDeleteAll = __webpack_require__(138); + +// `Set.prototype.deleteAll` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + deleteAll: function deleteAll(/* ...elements */) { + return collectionDeleteAll.apply(this, arguments); + } +}); + + +/***/ }), + +/***/ 138: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); + +// https://github.com/tc39/collection-methods +module.exports = function (/* ...elements */) { + var collection = anObject(this); + var remover = aFunction(collection['delete']); + var allDeleted = true; + var wasDeleted; + for (var k = 0, len = arguments.length; k < len; k++) { + wasDeleted = remover.call(collection, arguments[k]); + allDeleted = allDeleted && wasDeleted; + } + return !!allDeleted; +}; + + +/***/ }), + +/***/ 139: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var bind = __webpack_require__(21); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.every` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + every: function every(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return !iterate(iterator, function (value) { + if (!boundFunction(value, value, set)) return iterate.stop(); + }, undefined, false, true).stopped; + } +}); + + +/***/ }), + +/***/ 14: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var global = __webpack_require__(22); +var getOwnPropertyDescriptor = __webpack_require__(98).f; +var isForced = __webpack_require__(100); +var path = __webpack_require__(42); +var bind = __webpack_require__(21); +var createNonEnumerableProperty = __webpack_require__(29); +var has = __webpack_require__(24); + +var wrapConstructor = function (NativeConstructor) { + var Wrapper = function (a, b, c) { + if (this instanceof NativeConstructor) { + switch (arguments.length) { + case 0: return new NativeConstructor(); + case 1: return new NativeConstructor(a); + case 2: return new NativeConstructor(a, b); + } return new NativeConstructor(a, b, c); + } return NativeConstructor.apply(this, arguments); + }; + Wrapper.prototype = NativeConstructor.prototype; + return Wrapper; +}; + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var PROTO = options.proto; + + var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype; + + var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {}); + var targetPrototype = target.prototype; + + var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE; + var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor; + + for (key in source) { + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contains in native + USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key); + + targetProperty = target[key]; + + if (USE_NATIVE) if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(nativeSource, key); + nativeProperty = descriptor && descriptor.value; + } else nativeProperty = nativeSource[key]; + + // export native or implementation + sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key]; + + if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue; + + // bind timers to global for call from export context + if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global); + // wrap global constructors for prevent changs in this version + else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty); + // make static versions for prototype methods + else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty); + // default case + else resultProperty = sourceProperty; + + // add a flag to not completely full polyfills + if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(resultProperty, 'sham', true); + } + + target[key] = resultProperty; + + if (PROTO) { + VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; + if (!has(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } + // export virtual prototype methods + path[VIRTUAL_PROTOTYPE][key] = sourceProperty; + // export real prototype methods + if (options.real && targetPrototype && !targetPrototype[key]) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } + } + } +}; + + +/***/ }), + +/***/ 140: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.difference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + difference: function difference(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set); + var remover = aFunction(newSet['delete']); + iterate(iterable, function (value) { + remover.call(newSet, value); + }); + return newSet; + } +}); + + +/***/ }), + +/***/ 141: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var bind = __webpack_require__(21); +var speciesConstructor = __webpack_require__(38); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.filter` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + filter: function filter(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(); + var adder = aFunction(newSet.add); + iterate(iterator, function (value) { + if (boundFunction(value, value, set)) adder.call(newSet, value); + }, undefined, false, true); + return newSet; + } +}); + + +/***/ }), + +/***/ 142: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var bind = __webpack_require__(21); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.find` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + find: function find(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate(iterator, function (value) { + if (boundFunction(value, value, set)) return iterate.stop(value); + }, undefined, false, true).result; + } +}); + + +/***/ }), + +/***/ 143: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.intersection` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + intersection: function intersection(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(); + var hasCheck = aFunction(set.has); + var adder = aFunction(newSet.add); + iterate(iterable, function (value) { + if (hasCheck.call(set, value)) adder.call(newSet, value); + }); + return newSet; + } +}); + + +/***/ }), + +/***/ 144: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var iterate = __webpack_require__(17); + +// `Set.prototype.isDisjointFrom` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + isDisjointFrom: function isDisjointFrom(iterable) { + var set = anObject(this); + var hasCheck = aFunction(set.has); + return !iterate(iterable, function (value) { + if (hasCheck.call(set, value) === true) return iterate.stop(); + }).stopped; + } +}); + + +/***/ }), + +/***/ 145: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var getIterator = __webpack_require__(88); +var iterate = __webpack_require__(17); + +// `Set.prototype.isSubsetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + isSubsetOf: function isSubsetOf(iterable) { + var iterator = getIterator(this); + var otherSet = anObject(iterable); + var hasCheck = otherSet.has; + if (typeof hasCheck != 'function') { + otherSet = new (getBuiltIn('Set'))(iterable); + hasCheck = aFunction(otherSet.has); + } + return !iterate(iterator, function (value) { + if (hasCheck.call(otherSet, value) === false) return iterate.stop(); + }, undefined, false, true).stopped; + } +}); + + +/***/ }), + +/***/ 146: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var iterate = __webpack_require__(17); + +// `Set.prototype.isSupersetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + isSupersetOf: function isSupersetOf(iterable) { + var set = anObject(this); + var hasCheck = aFunction(set.has); + return !iterate(iterable, function (value) { + if (hasCheck.call(set, value) === false) return iterate.stop(); + }).stopped; + } +}); + + +/***/ }), + +/***/ 147: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.join` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + join: function join(separator) { + var set = anObject(this); + var iterator = getSetIterator(set); + var sep = separator === undefined ? ',' : String(separator); + var result = []; + iterate(iterator, result.push, result, false, true); + return result.join(sep); + } +}); + + +/***/ }), + +/***/ 148: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var bind = __webpack_require__(21); +var speciesConstructor = __webpack_require__(38); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.map` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + map: function map(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(); + var adder = aFunction(newSet.add); + iterate(iterator, function (value) { + adder.call(newSet, boundFunction(value, value, set)); + }, undefined, false, true); + return newSet; + } +}); + + +/***/ }), + +/***/ 149: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.reduce` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + reduce: function reduce(callbackfn /* , initialValue */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aFunction(callbackfn); + iterate(iterator, function (value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = callbackfn(accumulator, value, value, set); + } + }, undefined, false, true); + if (noInitial) throw TypeError('Reduce of empty set with no initial value'); + return accumulator; + } +}); + + +/***/ }), + +/***/ 15: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + ' is not an object'); + } return it; +}; + + +/***/ }), + +/***/ 150: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var bind = __webpack_require__(21); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.some` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + some: function some(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate(iterator, function (value) { + if (boundFunction(value, value, set)) return iterate.stop(); + }, undefined, false, true).stopped; + } +}); + + +/***/ }), + +/***/ 151: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.symmetricDifference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + symmetricDifference: function symmetricDifference(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set); + var remover = aFunction(newSet['delete']); + var adder = aFunction(newSet.add); + iterate(iterable, function (value) { + remover.call(newSet, value) || adder.call(newSet, value); + }); + return newSet; + } +}); + + +/***/ }), + +/***/ 152: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.union` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + union: function union(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set); + iterate(iterable, aFunction(newSet.add), newSet); + return newSet; + } +}); + + +/***/ }), + +/***/ 153: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(87); +__webpack_require__(154); +var path = __webpack_require__(42); + +module.exports = path.Array.from; + + +/***/ }), + +/***/ 154: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var from = __webpack_require__(155); +var checkCorrectnessOfIteration = __webpack_require__(157); + +var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + Array.from(iterable); +}); + +// `Array.from` method +// https://tc39.github.io/ecma262/#sec-array.from +$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: from +}); + + +/***/ }), + +/***/ 155: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var bind = __webpack_require__(21); +var toObject = __webpack_require__(57); +var callWithSafeIterationClosing = __webpack_require__(80); +var isArrayIteratorMethod = __webpack_require__(79); +var toLength = __webpack_require__(50); +var createProperty = __webpack_require__(156); +var getIteratorMethod = __webpack_require__(61); + +// `Array.from` method implementation +// https://tc39.github.io/ecma262/#sec-array.from +module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = iteratorMethod.call(O); + next = iterator.next; + result = new C(); + for (;!(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = toLength(O.length); + result = new C(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; +}; + + +/***/ }), + +/***/ 156: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var toPrimitive = __webpack_require__(55); +var definePropertyModule = __webpack_require__(31); +var createPropertyDescriptor = __webpack_require__(46); + +module.exports = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; +}; + + +/***/ }), + +/***/ 157: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), + +/***/ 158: +/***/ (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; +} + + +/***/ }), + +/***/ 159: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = dlv; +function dlv(obj, key, def, p, undef) { + key = key.split ? key.split('.') : key; + for (p = 0; p < key.length; p++) { + obj = obj ? obj[key[p]] : undef; + } + return obj === undef ? def : obj; +} + + +/***/ }), + +/***/ 16: +/***/ (function(module, exports) { + +module.exports = true; + + +/***/ }), + +/***/ 160: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony default export */ __webpack_exports__["a"] = (function (obj, keys, val) { + keys.split && (keys=keys.split('.')); + var i=0, l=keys.length, t=obj, x; + for (; i < l; ++i) { + x = t[keys[i]]; + t = t[keys[i]] = (i === l - 1 ? val : (x != null ? x : (!!~keys[i+1].indexOf('.') || !(+keys[i+1] > -1)) ? {} : [])); + } +}); + + +/***/ }), + +/***/ 161: +/***/ (function(module, exports) { + +/* +* @license MIT +* Fun Hooks v0.9.9 +* (c) @snapwich +*/ +create.SYNC = 1; +create.ASYNC = 2; +create.QUEUE = 4; + +var packageName = "fun-hooks"; + +function hasProxy() { + return !!(typeof Proxy === "function" && Proxy.revocable); +} + +var defaults = Object.freeze({ + useProxy: true, + ready: 0 +}); + +var hookableMap = new WeakMap(); + +// detect incorrectly implemented reduce and if found use polyfill +// https://github.com/prebid/Prebid.js/issues/3576 +// polyfill from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce +var reduce = + [1] + .reduce(function(a, b, c) { + return [a, b, c]; + }, 2) + .toString() === "2,1,0" + ? Array.prototype.reduce + : function(callback, initial) { + var o = Object(this); + var len = o.length >>> 0; + var k = 0; + var value; + if (initial) { + value = initial; + } else { + while (k < len && !(k in o)) { + k++; + } + value = o[k++]; + } + while (k < len) { + if (k in o) { + value = callback(value, o[k], k, o); + } + k++; + } + return value; + }; + +function rest(args, skip) { + return Array.prototype.slice.call(args, skip); +} + +var assign = + Object.assign || + function assign(target) { + return reduce.call( + rest(arguments, 1), + function(target, obj) { + if (obj) { + Object.keys(obj).forEach(function(prop) { + target[prop] = obj[prop]; + }); + } + return target; + }, + target + ); + }; + +function runAll(queue) { + var queued; + // eslint-disable-next-line no-cond-assign + while ((queued = queue.shift())) { + queued(); + } +} + +function create(config) { + var hooks = {}; + var postReady = []; + + config = assign({}, defaults, config); + + function dispatch(arg1, arg2) { + if (typeof arg1 === "function") { + return hookFn.call(null, "sync", arg1, arg2); + } else if (typeof arg1 === "string" && typeof arg2 === "function") { + return hookFn.apply(null, arguments); + } else if (typeof arg1 === "object") { + return hookObj.apply(null, arguments); + } + } + + var ready; + if (config.ready) { + dispatch.ready = function() { + ready = true; + runAll(postReady); + }; + } else { + ready = true; + } + + function hookObj(obj, props, objName) { + var walk = true; + if (typeof props === "undefined") { + props = Object.getOwnPropertyNames(obj); + walk = false; + } + var objHooks = {}; + var doNotHook = ["constructor"]; + do { + props = props.filter(function(prop) { + return ( + typeof obj[prop] === "function" && + !(doNotHook.indexOf(prop) !== -1) && + !prop.match(/^_/) + ); + }); + props.forEach(function(prop) { + var parts = prop.split(":"); + var name = parts[0]; + var type = parts[1] || "sync"; + if (!objHooks[name]) { + var fn = obj[name]; + objHooks[name] = obj[name] = hookFn( + type, + fn, + objName ? [objName, name] : undefined + ); + } + }); + obj = Object.getPrototypeOf(obj); + } while (walk && obj); + return objHooks; + } + + /** + * Navigates a string path to return a hookable function. If not found, creates a placeholder for hooks. + * @param {(Array | string)} path + */ + function get(path) { + var parts = Array.isArray(path) ? path : path.split("."); + return reduce.call( + parts, + function(memo, part, i) { + var item = memo[part]; + var installed = false; + if (item) { + return item; + } else if (i === parts.length - 1) { + if (!ready) { + postReady.push(function() { + if (!installed) { + // eslint-disable-next-line no-console + console.warn( + packageName + + ": referenced '" + + path + + "' but it was never created" + ); + } + }); + } + return (memo[part] = newHookable(function(fn) { + memo[part] = fn; + installed = true; + })); + } + return (memo[part] = {}); + }, + hooks + ); + } + + function newHookable(onInstall) { + var before = []; + var after = []; + var generateTrap = function() {}; + + var api = { + before: function(hook, priority) { + return add.call(this, before, "before", hook, priority); + }, + after: function(hook, priority) { + return add.call(this, after, "after", hook, priority); + }, + getHooks: function(match) { + var hooks = before.concat(after); + if (typeof match === "object") { + hooks = hooks.filter(function(entry) { + return Object.keys(match).every(function(prop) { + return entry[prop] === match[prop]; + }); + }); + } + try { + assign(hooks, { + remove: function() { + hooks.forEach(function(entry) { + entry.remove(); + }); + return this; + } + }); + } catch (e) { + console.error( + "error adding `remove` to array, did you modify Array.prototype?" + ); + } + return hooks; + }, + removeAll: function() { + return this.getHooks().remove(); + } + }; + + var meta = { + install: function(type, fn, generate) { + this.type = type; + generateTrap = generate; + generate(before, after); + onInstall && onInstall(fn); + } + }; + + // store meta data related to hookable. use `api.after` since `api` reference is not available on our proxy. + hookableMap.set(api.after, meta); + + return api; + + function add(store, type, hook, priority) { + var entry = { + hook: hook, + type: type, + priority: priority || 10, + remove: function() { + var index = store.indexOf(entry); + if (index !== -1) { + store.splice(index, 1); + generateTrap(before, after); + } + } + }; + store.push(entry); + store.sort(function(a, b) { + return b.priority - a.priority; + }); + generateTrap(before, after); + return this; + } + } + + function hookFn(type, fn, name) { + // check if function has already been wrapped + var meta = fn.after && hookableMap.get(fn.after); + if (meta) { + if (meta.type !== type) { + throw packageName + ": recreated hookable with different type"; + } else { + return fn; + } + } + + var hookable = name ? get(name) : newHookable(); + + var trap; + var hookedFn; + var handlers = { + get: function(target, prop) { + return hookable[prop] || Reflect.get.apply(Reflect, arguments); + } + }; + + if (!ready) { + postReady.push(setTrap); + } + + if (config.useProxy && hasProxy()) { + hookedFn = new Proxy(fn, handlers); + } else { + hookedFn = function() { + return handlers.apply + ? handlers.apply(fn, this, rest(arguments)) + : fn.apply(this, arguments); + }; + assign(hookedFn, hookable); + } + + hookableMap.get(hookedFn.after).install(type, hookedFn, generateTrap); + + return hookedFn; + + // eslint-disable-next-line no-redeclare + function generateTrap(before, after) { + var order = []; + var targetIndex; + if (before.length || after.length) { + before.forEach(addToOrder); + // placeholder for target function wrapper + targetIndex = order.push(undefined) - 1; + after.forEach(addToOrder); + trap = function(target, thisArg, args) { + var curr = 0; + var result; + var callback = + type === "async" && + typeof args[args.length - 1] === "function" && + args.pop(); + function bail(value) { + if (type === "sync") { + result = value; + } else if (callback) { + callback.apply(null, arguments); + } + } + function next(value) { + if (order[curr]) { + var args = rest(arguments); + next.bail = bail; + args.unshift(next); + return order[curr++].apply(thisArg, args); + } + if (type === "sync") { + result = value; + } else if (callback) { + callback.apply(null, arguments); + } + } + order[targetIndex] = function() { + var args = rest(arguments, 1); + if (type === "async" && callback) { + delete next.bail; + args.push(next); + } + var result = target.apply(thisArg, args); + if (type === "sync") { + next(result); + } + }; + next.apply(null, args); + return result; + }; + } else { + trap = undefined; + } + setTrap(); + + function addToOrder(entry) { + order.push(entry.hook); + } + } + + function setTrap() { + if ( + ready || + (type === "sync" && !(config.ready & create.SYNC)) || + (type === "async" && !(config.ready & create.ASYNC)) + ) { + handlers.apply = trap; + } else if (type === "sync" || !(config.ready & create.QUEUE)) { + handlers.apply = function() { + throw packageName + ": hooked function not ready"; + }; + } else { + handlers.apply = function() { + var args = arguments; + postReady.push(function() { + hookedFn.apply(args[1], args[2]); + }); + }; + } + } + } + + dispatch.get = get; + return dispatch; +} + +/* global module */ +module.exports = create; + + +/***/ }), + +/***/ 17: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var isArrayIteratorMethod = __webpack_require__(79); +var toLength = __webpack_require__(50); +var bind = __webpack_require__(21); +var getIteratorMethod = __webpack_require__(61); +var callWithSafeIterationClosing = __webpack_require__(80); + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { + var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); + var iterator, iterFn, index, length, result, next, step; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = toLength(iterable.length); length > index; index++) { + result = AS_ENTRIES + ? boundFunction(anObject(step = iterable[index])[0], step[1]) + : boundFunction(iterable[index]); + if (result && result instanceof Result) return result; + } return new Result(false); + } + iterator = iterFn.call(iterable); + } + + next = iterator.next; + while (!(step = next.call(iterator)).done) { + result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); + if (typeof result == 'object' && result && result instanceof Result) return result; + } return new Result(false); +}; + +iterate.stop = function (result) { + return new Result(true, result); +}; + + +/***/ }), + +/***/ 18: +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') { + throw TypeError(String(it) + ' is not a function'); + } return it; +}; + + +/***/ }), + +/***/ 19: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var shared = __webpack_require__(73); +var has = __webpack_require__(24); +var uid = __webpack_require__(59); +var NATIVE_SYMBOL = __webpack_require__(75); +var USE_SYMBOL_AS_UID = __webpack_require__(104); + +var WellKnownSymbolsStore = shared('wks'); +var Symbol = global.Symbol; +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), + +/***/ 2: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return NATIVE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return VIDEO; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return BANNER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ADPOD; }); +/** + * 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 + * @typedef {('adpod')} VideoContext + */ + +/** @type MediaType */ +var NATIVE = 'native'; +/** @type MediaType */ + +var VIDEO = 'video'; +/** @type MediaType */ + +var BANNER = 'banner'; +/** @type VideoContext */ + +var ADPOD = 'adpod'; + +/***/ }), + +/***/ 20: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = getGlobal; +// if $$PREBID_GLOBAL$$ 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 || []; // create a pbjs global pointer + +window._pbjsGlobals = window._pbjsGlobals || []; + +window._pbjsGlobals.push("pbjs"); + +function getGlobal() { + return window.pbjs; +} + +/***/ }), + +/***/ 21: +/***/ (function(module, exports, __webpack_require__) { + +var aFunction = __webpack_require__(18); + +// optional / simple context binding +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 0: return function () { + return fn.call(that); + }; + 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); + }; +}; + + +/***/ }), + +/***/ 215: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(216); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('Array', 'findIndex'); + + +/***/ }), + +/***/ 216: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var $findIndex = __webpack_require__(56).findIndex; +var addToUnscopables = __webpack_require__(51); +var arrayMethodUsesToLength = __webpack_require__(60); + +var FIND_INDEX = 'findIndex'; +var SKIPS_HOLES = true; + +var USES_TO_LENGTH = arrayMethodUsesToLength(FIND_INDEX); + +// Shouldn't skip holes +if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.findIndex` method +// https://tc39.github.io/ecma262/#sec-array.prototype.findindex +$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, { + findIndex: function findIndex(callbackfn /* , that = undefined */) { + return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND_INDEX); + + +/***/ }), + +/***/ 22: +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + Function('return this')(); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(33))) + +/***/ }), + +/***/ 223: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = listenMessagesFromCreative; +/* unused harmony export _sendAdToCreative */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__); +/* 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 = __WEBPACK_IMPORTED_MODULE_2__constants_json__["EVENTS"].BID_WON; +function listenMessagesFromCreative() { + window.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 && data.adId) { + var adObject = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(__WEBPACK_IMPORTED_MODULE_4__auctionManager_js__["a" /* auctionManager */].getBidsReceived(), function (bid) { + return bid.adId === data.adId; + }); + + if (adObject && data.message === 'Prebid Request') { + _sendAdToCreative(adObject, ev); // save winning bids + + + __WEBPACK_IMPORTED_MODULE_4__auctionManager_js__["a" /* auctionManager */].addWinningBid(adObject); + __WEBPACK_IMPORTED_MODULE_0__events_js___default.a.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 (adObject && data.message === 'Prebid Native') { + if (data.action === 'assetRequest') { + var message = Object(__WEBPACK_IMPORTED_MODULE_1__native_js__["c" /* getAssetMessage */])(data, adObject); + ev.source.postMessage(JSON.stringify(message), ev.origin); + return; + } + + var trackerType = Object(__WEBPACK_IMPORTED_MODULE_1__native_js__["b" /* fireNativeTrackers */])(data, adObject); + + if (trackerType === 'click') { + return; + } + + __WEBPACK_IMPORTED_MODULE_4__auctionManager_js__["a" /* auctionManager */].addWinningBid(adObject); + __WEBPACK_IMPORTED_MODULE_0__events_js___default.a.emit(BID_WON, adObject); + } + } +} + +function _sendAdToCreative(adObject, ev) { + var adId = adObject.adId, + ad = adObject.ad, + adUrl = adObject.adUrl, + width = adObject.width, + height = adObject.height, + renderer = adObject.renderer, + cpm = adObject.cpm; // rendering for outstream safeframe + + if (Object(__WEBPACK_IMPORTED_MODULE_6__Renderer_js__["c" /* isRendererRequired */])(renderer)) { + Object(__WEBPACK_IMPORTED_MODULE_6__Renderer_js__["b" /* executeRenderer */])(renderer, adObject); + } else if (adId) { + resizeRemoteCreative(adObject); + ev.source.postMessage(JSON.stringify({ + message: 'Prebid Response', + ad: Object(__WEBPACK_IMPORTED_MODULE_3__utils_js__["replaceAuctionPrice"])(ad, cpm), + adUrl: Object(__WEBPACK_IMPORTED_MODULE_3__utils_js__["replaceAuctionPrice"])(adUrl, cpm), + adId: adId, + width: width, + height: height + }), ev.origin); + } +} + +function resizeRemoteCreative(_ref) { + var adId = _ref.adId, + adUnitCode = _ref.adUnitCode, + width = _ref.width, + height = _ref.height; + // resize both container div + iframe + ['div', 'iframe'].forEach(function (elmType) { + // not select element that gets removed after dfp render + var element = getElementByAdUnit(elmType + ':not([style*="display: none"])'); + + if (element) { + var elementStyle = element.style; + elementStyle.width = width + 'px'; + elementStyle.height = height + 'px'; + } else { + Object(__WEBPACK_IMPORTED_MODULE_3__utils_js__["logWarn"])("Unable to locate matching page element for adUnitCode ".concat(adUnitCode, ". Can't resize it to ad's dimensions. Please review setup.")); + } + }); + + function getElementByAdUnit(elmType) { + var id = getElementIdBasedOnAdServer(adId, adUnitCode); + var parentDivEle = document.getElementById(id); + return parentDivEle && parentDivEle.querySelector(elmType); + } + + function getElementIdBasedOnAdServer(adId, adUnitCode) { + if (window.googletag) { + return getDfpElementId(adId); + } else if (window.apntag) { + return getAstElementId(adUnitCode); + } else { + return adUnitCode; + } + } + + function getDfpElementId(adId) { + return __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(window.googletag.pubads().getSlots(), function (slot) { + return __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(slot.getTargetingKeys(), function (key) { + return __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(slot.getTargeting(key), adId); + }); + }).getSlotElementId(); + } + + function getAstElementId(adUnitCode) { + var astTag = window.apntag.getTag(adUnitCode); + return astTag && astTag.targetId; + } +} + +/***/ }), + +/***/ 224: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export addBidResponseBound */ +/* unused harmony export addBidderRequestsBound */ +/* unused harmony export enableOverrides */ +/* unused harmony export disableOverrides */ +/* unused harmony export bidExcluded */ +/* unused harmony export bidderExcluded */ +/* unused harmony export applyBidOverrides */ +/* unused harmony export addBidResponseHook */ +/* unused harmony export addBidderRequestsHook */ +/* unused harmony export getConfig */ +/* harmony export (immutable) */ __webpack_exports__["a"] = sessionLoader; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__auction_js__ = __webpack_require__(40); + + + +var OVERRIDE_KEY = "pbjs:debugging"; +var addBidResponseBound; +var addBidderRequestsBound; + +function logMessage(msg) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logMessage"])('DEBUG: ' + msg); +} + +function logWarn(msg) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])('DEBUG: ' + msg); +} + +function addHooks(overrides) { + addBidResponseBound = addBidResponseHook.bind(overrides); + __WEBPACK_IMPORTED_MODULE_2__auction_js__["c" /* addBidResponse */].before(addBidResponseBound, 5); + addBidderRequestsBound = addBidderRequestsHook.bind(overrides); + __WEBPACK_IMPORTED_MODULE_2__auction_js__["e" /* addBidderRequests */].before(addBidderRequestsBound, 5); +} + +function removeHooks() { + __WEBPACK_IMPORTED_MODULE_2__auction_js__["c" /* addBidResponse */].getHooks({ + hook: addBidResponseBound + }).remove(); + __WEBPACK_IMPORTED_MODULE_2__auction_js__["e" /* addBidderRequests */].getHooks({ + hook: addBidderRequestsBound + }).remove(); +} + +function enableOverrides(overrides) { + var fromSession = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + __WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].setConfig({ + 'debug': true + }); + removeHooks(); + addHooks(overrides); + logMessage("bidder overrides enabled".concat(fromSession ? ' from session' : '')); +} +function disableOverrides() { + removeHooks(); + logMessage('bidder overrides disabled'); +} +/** + * @param {{bidder:string, adUnitCode:string}} overrideObj + * @param {string} bidderCode + * @param {string} adUnitCode + * @returns {boolean} + */ + +function bidExcluded(overrideObj, bidderCode, adUnitCode) { + if (overrideObj.bidder && overrideObj.bidder !== bidderCode) { + return true; + } + + if (overrideObj.adUnitCode && overrideObj.adUnitCode !== adUnitCode) { + return true; + } + + return false; +} +/** + * @param {string[]} bidders + * @param {string} bidderCode + * @returns {boolean} + */ + +function bidderExcluded(bidders, bidderCode) { + return Array.isArray(bidders) && bidders.indexOf(bidderCode) === -1; +} +/** + * @param {Object} overrideObj + * @param {Object} bidObj + * @param {Object} bidType + * @returns {Object} bidObj with overridden properties + */ + +function applyBidOverrides(overrideObj, bidObj, bidType) { + return Object.keys(overrideObj).filter(function (key) { + return ['adUnitCode', 'bidder'].indexOf(key) === -1; + }).reduce(function (result, key) { + logMessage("bidder overrides changed '".concat(result.adUnitCode, "/").concat(result.bidderCode, "' ").concat(bidType, ".").concat(key, " from '").concat(result[key], ".js' to '").concat(overrideObj[key], "'")); + result[key] = overrideObj[key]; + return result; + }, bidObj); +} +function addBidResponseHook(next, adUnitCode, bid) { + var overrides = this; + + if (bidderExcluded(overrides.bidders, bid.bidderCode)) { + logWarn("bidder '".concat(bid.bidderCode, "' excluded from auction by bidder overrides")); + return; + } + + if (Array.isArray(overrides.bids)) { + overrides.bids.forEach(function (overrideBid) { + if (!bidExcluded(overrideBid, bid.bidderCode, adUnitCode)) { + applyBidOverrides(overrideBid, bid, 'bidder'); + } + }); + } + + next(adUnitCode, bid); +} +function addBidderRequestsHook(next, bidderRequests) { + var overrides = this; + var includedBidderRequests = bidderRequests.filter(function (bidderRequest) { + if (bidderExcluded(overrides.bidders, bidderRequest.bidderCode)) { + logWarn("bidRequest '".concat(bidderRequest.bidderCode, "' excluded from auction by bidder overrides")); + return false; + } + + return true; + }); + + if (Array.isArray(overrides.bidRequests)) { + includedBidderRequests.forEach(function (bidderRequest) { + overrides.bidRequests.forEach(function (overrideBid) { + bidderRequest.bids.forEach(function (bid) { + if (!bidExcluded(overrideBid, bidderRequest.bidderCode, bid.adUnitCode)) { + applyBidOverrides(overrideBid, bid, 'bidRequest'); + } + }); + }); + }); + } + + next(includedBidderRequests); +} +function getConfig(debugging) { + if (!debugging.enabled) { + disableOverrides(); + + try { + window.sessionStorage.removeItem(OVERRIDE_KEY); + } catch (e) {} + } else { + try { + window.sessionStorage.setItem(OVERRIDE_KEY, JSON.stringify(debugging)); + } catch (e) {} + + enableOverrides(debugging); + } +} +__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('debugging', function (_ref) { + var debugging = _ref.debugging; + return getConfig(debugging); +}); +function sessionLoader(storage) { + var overrides; + + try { + storage = storage || window.sessionStorage; + overrides = JSON.parse(storage.getItem(OVERRIDE_KEY)); + } catch (e) {} + + if (overrides) { + enableOverrides(overrides, true); + } +} + +/***/ }), + +/***/ 23: +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), + +/***/ 24: +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; + +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), + +/***/ 25: +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(42); +var global = __webpack_require__(22); + +var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; +}; + + +/***/ }), + +/***/ 26: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export newAuctionManager */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return auctionManager; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__auction_js__ = __webpack_require__(40); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); +/** + * 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 consolidated bid requests + * @property {function(): Array} getBidsReceived - returns consolidated bid received + * @property {function(): Array} getAdUnits - returns consolidated adUnits + * @property {function(): Array} getAdUnitCodes - returns consolidated 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 $$PREBID_GLOBAL$$.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 + */ + + + + +var CONSTANTS = __webpack_require__(5); +/** + * 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 + */ + + +function newAuctionManager() { + var _auctions = []; + var auctionManager = {}; + + auctionManager.addWinningBid = function (bid) { + var auction = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(_auctions, function (auction) { + return auction.getAuctionId() === bid.auctionId; + }); + + if (auction) { + bid.status = CONSTANTS.BID_STATUS.RENDERED; + auction.addWinningBid(bid); + } else { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"])("Auction not found when adding winning bid"); + } + }; + + auctionManager.getAllWinningBids = function () { + return _auctions.map(function (auction) { + return auction.getWinningBids(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getBidsRequested = function () { + return _auctions.map(function (auction) { + return auction.getBidRequests(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getNoBids = function () { + return _auctions.map(function (auction) { + return auction.getNoBids(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getBidsReceived = function () { + return _auctions.map(function (auction) { + if (auction.getAuctionStatus() === __WEBPACK_IMPORTED_MODULE_1__auction_js__["a" /* AUCTION_COMPLETED */]) { + return auction.getBidsReceived(); + } + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).filter(function (bid) { + return bid; + }); + }; + + auctionManager.getAdUnits = function () { + return _auctions.map(function (auction) { + return auction.getAdUnits(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getAdUnitCodes = function () { + return _auctions.map(function (auction) { + return auction.getAdUnitCodes(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).filter(__WEBPACK_IMPORTED_MODULE_0__utils_js__["uniques"]); + }; + + auctionManager.createAuction = function (_ref) { + var adUnits = _ref.adUnits, + adUnitCodes = _ref.adUnitCodes, + callback = _ref.callback, + cbTimeout = _ref.cbTimeout, + labels = _ref.labels, + auctionId = _ref.auctionId; + var auction = Object(__WEBPACK_IMPORTED_MODULE_1__auction_js__["k" /* newAuction */])({ + adUnits: adUnits, + adUnitCodes: adUnitCodes, + callback: callback, + cbTimeout: cbTimeout, + labels: labels, + auctionId: auctionId + }); + + _addAuction(auction); + + return auction; + }; + + auctionManager.findBidByAdId = function (adId) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(_auctions.map(function (auction) { + return auction.getBidsReceived(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []), function (bid) { + return bid.adId === adId; + }); + }; + + auctionManager.getStandardBidderAdServerTargeting = function () { + return Object(__WEBPACK_IMPORTED_MODULE_1__auction_js__["j" /* getStandardBidderSettings */])()[CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]; + }; + + auctionManager.setStatusForBids = function (adId, status) { + var bid = auctionManager.findBidByAdId(adId); + if (bid) bid.status = status; + + if (bid && status === CONSTANTS.BID_STATUS.BID_TARGETING_SET) { + var auction = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(_auctions, function (auction) { + return auction.getAuctionId() === bid.auctionId; + }); + if (auction) auction.setBidTargeting(bid); + } + }; + + auctionManager.getLastAuctionId = function () { + return _auctions.length && _auctions[_auctions.length - 1].getAuctionId(); + }; + + function _addAuction(auction) { + _auctions.push(auction); + } + + return auctionManager; +} +var auctionManager = newAuctionManager(); + +/***/ }), + +/***/ 27: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +// Thank's IE8 for his funny defineProperty +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); + + +/***/ }), + +/***/ 28: +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), + +/***/ 29: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var definePropertyModule = __webpack_require__(31); +var createPropertyDescriptor = __webpack_require__(46); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), + +/***/ 3: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RANDOM; }); +/* unused harmony export newConfig */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return config; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cpmBucketManager_js__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set__ = __webpack_require__(77); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_js__ = __webpack_require__(0); +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +/* + * Module for getting and setting Prebid configuration. + */ + +/** + * @typedef {Object} MediaTypePriceGranularity + * + * @property {(string|Object)} [banner] + * @property {(string|Object)} [native] + * @property {(string|Object)} [video] + * @property {(string|Object)} [video-instream] + * @property {(string|Object)} [video-outstream] + */ + + + + + + +var from = __webpack_require__(89); + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var DEFAULT_DEBUG = utils.getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; +var DEFAULT_BIDDER_TIMEOUT = 3000; +var DEFAULT_PUBLISHER_DOMAIN = window.location.origin; +var DEFAULT_ENABLE_SEND_ALL_BIDS = true; +var DEFAULT_DISABLE_AJAX_TIMEOUT = false; +var DEFAULT_BID_CACHE = false; +var DEFAULT_DEVICE_ACCESS = true; +var DEFAULT_TIMEOUTBUFFER = 400; +var 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; + var config; + var bidderConfig; + var currBidder = null; + + function resetConfig() { + defaults = {}; + var newConfig = { + // `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; + }, + + // 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 (utils.isPlainObject(val)) { + 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; + }, + + /** + * mediaTypePriceGranularity + * @type {MediaTypePriceGranularity} + */ + _mediaTypePriceGranularity: {}, + + get mediaTypePriceGranularity() { + return this._mediaTypePriceGranularity; + }, + + set mediaTypePriceGranularity(val) { + var _this = this; + + this._mediaTypePriceGranularity = Object.keys(val).reduce(function (aggregate, item) { + if (validatePriceGranularity(val[item])) { + if (typeof val === 'string') { + aggregate[item] = hasGranularity(val[item]) ? val[item] : _this._priceGranularity; + } else if (utils.isPlainObject(val)) { + aggregate[item] = val[item]; + utils.logMessage("Using custom price granularity for ".concat(item)); + } + } else { + utils.logWarn("Invalid price granularity for media type: ".concat(item)); + } + + return aggregate; + }, {}); + }, + + _sendAllBids: DEFAULT_ENABLE_SEND_ALL_BIDS, + + get enableSendAllBids() { + return this._sendAllBids; + }, + + set enableSendAllBids(val) { + this._sendAllBids = val; + }, + + _useBidCache: DEFAULT_BID_CACHE, + + get useBidCache() { + return this._useBidCache; + }, + + set useBidCache(val) { + this._useBidCache = val; + }, + + /** + * deviceAccess set to false will disable setCookie, getCookie, hasLocalStorage + * @type {boolean} + */ + _deviceAccess: DEFAULT_DEVICE_ACCESS, + + get deviceAccess() { + return this._deviceAccess; + }, + + set deviceAccess(val) { + this._deviceAccess = 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: ".concat(val, ". Bidder Sequence was not set.")); + } + }, + + // timeout buffer to adjust for bidder CDN latency + _timeoutBuffer: DEFAULT_TIMEOUTBUFFER, + + get timeoutBuffer() { + return this._timeoutBuffer; + }, + + set timeoutBuffer(val) { + this._timeoutBuffer = val; + }, + + _disableAjaxTimeout: DEFAULT_DISABLE_AJAX_TIMEOUT, + + get disableAjaxTimeout() { + return this._disableAjaxTimeout; + }, + + set disableAjaxTimeout(val) { + this._disableAjaxTimeout = val; + } + + }; + + if (config) { + callSubscribers(Object.keys(config).reduce(function (memo, topic) { + if (config[topic] !== newConfig[topic]) { + memo[topic] = newConfig[topic] || {}; + } + + return memo; + }, {})); + } + + config = newConfig; + bidderConfig = {}; + + function hasGranularity(val) { + return __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js___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 (utils.isPlainObject(val)) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0__cpmBucketManager_js__["b" /* isValidPriceConfig */])(val)) { + utils.logError('Invalid custom price value passed to `setPriceGranularity()`'); + return false; + } + } + + return true; + } + } + /** + * Returns base config with bidder overrides (if there is currently a bidder) + * @private + */ + + + function _getConfig() { + if (currBidder && bidderConfig && utils.isPlainObject(bidderConfig[currBidder])) { + var currBidderConfig = bidderConfig[currBidder]; + var configTopicSet = new __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set___default.a(Object.keys(config).concat(Object.keys(currBidderConfig))); + return from(configTopicSet).reduce(function (memo, topic) { + if (typeof currBidderConfig[topic] === 'undefined') { + memo[topic] = config[topic]; + } else if (typeof config[topic] === 'undefined') { + memo[topic] = currBidderConfig[topic]; + } else { + if (utils.isPlainObject(currBidderConfig[topic])) { + memo[topic] = Object(__WEBPACK_IMPORTED_MODULE_4__utils_js__["mergeDeep"])({}, config[topic], currBidderConfig[topic]); + } else { + memo[topic] = currBidderConfig[topic]; + } + } + + return memo; + }, {}); + } + + return _extends({}, config); + } + /* + * 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(_getConfig(), option) : _getConfig(); + } + + return subscribe.apply(void 0, arguments); + } + /** + * Internal API for modules (such as prebid-server) that might need access to all bidder config + */ + + + function getBidderConfig() { + return bidderConfig; + } + /* + * Sets configuration given an object containing key-value pairs and calls + * listeners that were added by the `subscribe` function + */ + + + function setConfig(options) { + if (!utils.isPlainObject(options)) { + 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 (utils.isPlainObject(defaults[topic]) && utils.isPlainObject(option)) { + 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 (!utils.isPlainObject(defaults)) { + 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; + } + + var nl = { + topic: topic, + callback: callback + }; + listeners.push(nl); // save and call this function to remove the listener + + return function unsubscribe() { + listeners.splice(listeners.indexOf(nl), 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 __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___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); + }); + } + + function setBidderConfig(config) { + try { + check(config); + config.bidders.forEach(function (bidder) { + if (!bidderConfig[bidder]) { + bidderConfig[bidder] = {}; + } + + Object.keys(config.config).forEach(function (topic) { + var option = config.config[topic]; + + if (utils.isPlainObject(option)) { + bidderConfig[bidder][topic] = _extends({}, bidderConfig[bidder][topic] || {}, option); + } else { + bidderConfig[bidder][topic] = option; + } + }); + }); + } catch (e) { + utils.logError(e); + } + + function check(obj) { + if (!utils.isPlainObject(obj)) { + throw 'setBidderConfig bidder options must be an object'; + } + + if (!(Array.isArray(obj.bidders) && obj.bidders.length)) { + throw 'setBidderConfig bidder options must contain a bidders list with at least 1 bidder'; + } + + if (!utils.isPlainObject(obj.config)) { + throw 'setBidderConfig bidder options must contain a config object'; + } + } + } + /** + * Internal functions for core to execute some synchronous code while having an active bidder set. + */ + + + function runWithBidder(bidder, fn) { + currBidder = bidder; + + try { + return fn(); + } finally { + currBidder = null; + } + } + + function callbackWithBidder(bidder) { + return function (cb) { + return function () { + if (typeof cb === 'function') { + var _utils$bind; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return runWithBidder(bidder, (_utils$bind = utils.bind).call.apply(_utils$bind, [cb, this].concat(args))); + } else { + utils.logWarn('config.callbackWithBidder callback is not a function'); + } + }; + }; + } + + function getCurrentBidder() { + return currBidder; + } + + resetConfig(); + return { + getCurrentBidder: getCurrentBidder, + getConfig: getConfig, + setConfig: setConfig, + setDefaults: setDefaults, + resetConfig: resetConfig, + runWithBidder: runWithBidder, + callbackWithBidder: callbackWithBidder, + setBidderConfig: setBidderConfig, + getBidderConfig: getBidderConfig + }; +} +var config = newConfig(); + +/***/ }), + +/***/ 30: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export detectReferer */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getRefererInfo; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * The referer detection module attempts to gather referer information from the current page that prebid.js resides in. + * The information that it tries to collect includes: + * The detected top url in the nav bar, + * Whether it was able to reach the top most window (if for example it was embedded in several iframes), + * The number of iframes it was embedded in if applicable, + * A list of the domains of each embedded window if applicable. + * Canonical URL which refers to an HTML link element, with the attribute of rel="canonical", found in the element of your webpage + */ + +function detectReferer(win) { + /** + * Returns number of frames to reach top from current frame where prebid.js sits + * @returns {Array} levels + */ + function getLevels() { + var levels = walkUpWindows(); + var ancestors = getAncestorOrigins(); + + if (ancestors) { + for (var i = 0, l = ancestors.length; i < l; i++) { + levels[i].ancestor = ancestors[i]; + } + } + + return levels; + } + /** + * This function would return a read-only array of hostnames for all the parent frames. + * win.location.ancestorOrigins is only supported in webkit browsers. For non-webkit browsers it will return undefined. + * @returns {(undefined|Array)} Ancestor origins or undefined + */ + + + function getAncestorOrigins() { + try { + if (!win.location.ancestorOrigins) { + return; + } + + return win.location.ancestorOrigins; + } catch (e) {// Ignore error + } + } + /** + * This function would try to get referer and urls for all parent frames in case of win.location.ancestorOrigins undefined. + * @param {Array} levels + * @returns {Object} urls for all parent frames and top most detected referer url + */ + + + function getPubUrlStack(levels) { + var stack = []; + var defUrl = null; + var frameLocation = null; + var prevFrame = null; + var prevRef = null; + var ancestor = null; + var detectedRefererUrl = null; + var i; + + for (i = levels.length - 1; i >= 0; i--) { + try { + frameLocation = levels[i].location; + } catch (e) {// Ignore error + } + + if (frameLocation) { + stack.push(frameLocation); + + if (!detectedRefererUrl) { + detectedRefererUrl = frameLocation; + } + } else if (i !== 0) { + prevFrame = levels[i - 1]; + + try { + prevRef = prevFrame.referrer; + ancestor = prevFrame.ancestor; + } catch (e) {// Ignore error + } + + if (prevRef) { + stack.push(prevRef); + + if (!detectedRefererUrl) { + detectedRefererUrl = prevRef; + } + } else if (ancestor) { + stack.push(ancestor); + + if (!detectedRefererUrl) { + detectedRefererUrl = ancestor; + } + } else { + stack.push(defUrl); + } + } else { + stack.push(defUrl); + } + } + + return { + stack: stack, + detectedRefererUrl: detectedRefererUrl + }; + } + /** + * This function returns canonical URL which refers to an HTML link element, with the attribute of rel="canonical", found in the element of your webpage + * @param {Object} doc document + */ + + + function getCanonicalUrl(doc) { + try { + var element = doc.querySelector("link[rel='canonical']"); + + if (element !== null) { + return element.href; + } + } catch (e) {} + + return null; + } + /** + * Walk up to the top of the window to detect origin, number of iframes, ancestor origins and canonical url + */ + + + function walkUpWindows() { + var acc = []; + var currentWindow; + + do { + try { + currentWindow = currentWindow ? currentWindow.parent : win; + + try { + var isTop = currentWindow == win.top; + var refData = { + referrer: currentWindow.document.referrer || null, + location: currentWindow.location.href || null, + isTop: isTop + }; + + if (isTop) { + refData = _extends(refData, { + canonicalUrl: getCanonicalUrl(currentWindow.document) + }); + } + + acc.push(refData); + } catch (e) { + acc.push({ + referrer: null, + location: null, + isTop: currentWindow == win.top + }); + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"])('Trying to access cross domain iframe. Continuing without referrer and location'); + } + } catch (e) { + acc.push({ + referrer: null, + location: null, + isTop: false + }); + return acc; + } + } while (currentWindow != win.top); + + return acc; + } + /** + * Referer info + * @typedef {Object} refererInfo + * @property {string} referer detected top url + * @property {boolean} reachedTop whether prebid was able to walk upto top window or not + * @property {number} numIframes number of iframes + * @property {string} stack comma separated urls of all origins + * @property {string} canonicalUrl canonical URL refers to an HTML link element, with the attribute of rel="canonical", found in the element of your webpage + */ + + /** + * Get referer info + * @returns {refererInfo} + */ + + + function refererInfo() { + try { + var levels = getLevels(); + var numIframes = levels.length - 1; + var reachedTop = levels[numIframes].location !== null || numIframes > 0 && levels[numIframes - 1].referrer !== null; + var stackInfo = getPubUrlStack(levels); + var canonicalUrl; + + if (levels[levels.length - 1].canonicalUrl) { + canonicalUrl = levels[levels.length - 1].canonicalUrl; + } + + return { + referer: stackInfo.detectedRefererUrl, + reachedTop: reachedTop, + numIframes: numIframes, + stack: stackInfo.stack, + canonicalUrl: canonicalUrl + }; + } catch (e) {// Ignore error + } + } + + return refererInfo; +} +var getRefererInfo = detectReferer(window); + +/***/ }), + +/***/ 31: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var IE8_DOM_DEFINE = __webpack_require__(71); +var anObject = __webpack_require__(15); +var toPrimitive = __webpack_require__(55); + +var nativeDefineProperty = Object.defineProperty; + +// `Object.defineProperty` method +// https://tc39.github.io/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), + +/***/ 32: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = createBid; +var utils = __webpack_require__(0); +/** + Required paramaters + bidderCode, + height, + width, + statusCode + Optional paramaters + adId, + cpm, + ad, + adUrl, + dealId, + priceKeyString; + */ + + +function Bid(statusCode, bidRequest) { + 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 = utils.getUniqueIdentifierStr(); + this.requestId = bidRequest && bidRequest.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. + + +function createBid(statusCode, bidRequest) { + return new Bid(statusCode, bidRequest); +} + +/***/ }), + +/***/ 33: +/***/ (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; + + +/***/ }), + +/***/ 339: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(340); + +module.exports = parent; + + +/***/ }), + +/***/ 34: +/***/ (function(module, exports, __webpack_require__) { + +var IS_PURE = __webpack_require__(16); +var getIterator = __webpack_require__(88); + +module.exports = IS_PURE ? getIterator : function (it) { + // eslint-disable-next-line no-undef + return Set.prototype.values.call(it); +}; + + +/***/ }), + +/***/ 340: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(341); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('String', 'includes'); + + +/***/ }), + +/***/ 341: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var notARegExp = __webpack_require__(342); +var requireObjectCoercible = __webpack_require__(49); +var correctIsRegExpLogic = __webpack_require__(344); + +// `String.prototype.includes` method +// https://tc39.github.io/ecma262/#sec-string.prototype.includes +$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~String(requireObjectCoercible(this)) + .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 342: +/***/ (function(module, exports, __webpack_require__) { + +var isRegExp = __webpack_require__(343); + +module.exports = function (it) { + if (isRegExp(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } return it; +}; + + +/***/ }), + +/***/ 343: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); +var classof = __webpack_require__(48); +var wellKnownSymbol = __webpack_require__(19); + +var MATCH = wellKnownSymbol('match'); + +// `IsRegExp` abstract operation +// https://tc39.github.io/ecma262/#sec-isregexp +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp'); +}; + + +/***/ }), + +/***/ 344: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); + +var MATCH = wellKnownSymbol('match'); + +module.exports = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (e) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (f) { /* empty */ } + } return false; +}; + + +/***/ }), + +/***/ 35: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return nativeAdapters; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NATIVE_TARGETING_KEYS; }); +/* harmony export (immutable) */ __webpack_exports__["g"] = processNativeAdUnitParams; +/* unused harmony export nativeAdUnit */ +/* unused harmony export nativeBidder */ +/* unused harmony export hasNonNativeBidder */ +/* harmony export (immutable) */ __webpack_exports__["f"] = nativeBidIsValid; +/* harmony export (immutable) */ __webpack_exports__["b"] = fireNativeTrackers; +/* harmony export (immutable) */ __webpack_exports__["d"] = getNativeTargeting; +/* harmony export (immutable) */ __webpack_exports__["c"] = getAssetMessage; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var CONSTANTS = __webpack_require__(5); + +var nativeAdapters = []; +var NATIVE_TARGETING_KEYS = Object.keys(CONSTANTS.NATIVE_KEYS).map(function (key) { + return CONSTANTS.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 && __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___default()(Object.keys(SUPPORTED_TYPES), type))) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logError"])("".concat(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 = function nativeAdUnit(adUnit) { + var mediaType = adUnit.mediaType === 'native'; + var mediaTypes = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnit, 'mediaTypes.native'); + return mediaType || mediaTypes; +}; +var nativeBidder = function nativeBidder(bid) { + return __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___default()(nativeAdapters, bid.bidder); +}; +var 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 = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidRequest"])(bid.requestId, bidRequests); + + if (!bidRequest) { + return false; + } // all native bid responses must define a landing page url + + + if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.clickUrl')) { + return false; + } + + if (Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.image')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.image.height') || !Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.image.width')) { + return false; + } + } + + if (Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.icon')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.icon.height') || !Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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 __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___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 + * + * %%PATTERN:hb_native_title%% + * + * + * + */ + +function fireNativeTrackers(message, adObject) { + var trackers; + + if (message.action === 'click') { + trackers = adObject['native'] && adObject['native'].clickTrackers; + } else { + trackers = adObject['native'] && adObject['native'].impressionTrackers; + + if (adObject['native'] && adObject['native'].javascriptTrackers) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["insertHtmlIntoIframe"])(adObject['native'].javascriptTrackers); + } + } + + (trackers || []).forEach(__WEBPACK_IMPORTED_MODULE_0__utils_js__["triggerPixel"]); + return message.action; +} +/** + * Gets native targeting key-value pairs + * @param {Object} bid + * @return {Object} targeting + */ + +function getNativeTargeting(bid, bidReq) { + var keyValues = {}; + Object.keys(bid['native']).forEach(function (asset) { + var key = CONSTANTS.NATIVE_KEYS[asset]; + var value = getAssetValue(bid['native'][asset]); + var sendPlaceholder = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bidReq, "mediaTypes.native.".concat(asset, ".sendId")); + + if (sendPlaceholder) { + var placeholder = "".concat(key, ":").concat(bid.adId); + value = placeholder; + } + + if (key && value) { + keyValues[key] = value; + } + }); + return keyValues; +} +/** + * Constructs a message object containing asset values for each of the + * requested data keys. + */ + +function getAssetMessage(data, adObject) { + var message = { + message: 'assetResponse', + adId: data.adId, + assets: [] + }; + data.assets.forEach(function (asset) { + var key = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getKeyByValue"])(CONSTANTS.NATIVE_KEYS, asset); + var value = getAssetValue(adObject.native[key]); + message.assets.push({ + key: key, + value: value + }); + }); + return message; +} +/** + * Native assets can be a string or an object with a url prop. Returns the value + * appropriate for sending in adserver targeting or placeholder replacement. + */ + +function getAssetValue(value) { + if (_typeof(value) === 'object' && value.url) { + return value.url; + } + + return value; +} + +/***/ }), + +/***/ 36: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return OUTSTREAM; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return INSTREAM; }); +/* unused harmony export videoAdUnit */ +/* unused harmony export videoBidder */ +/* unused harmony export hasNonVideoBidder */ +/* harmony export (immutable) */ __webpack_exports__["d"] = isValidVideoBid; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return checkVideoBidSetup; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__hook_js__ = __webpack_require__(13); + + + + + +var VIDEO_MEDIA_TYPE = 'video'; +var OUTSTREAM = 'outstream'; +var INSTREAM = 'instream'; +/** + * Helper functions for working with video-enabled adUnits + */ + +var videoAdUnit = function videoAdUnit(adUnit) { + var mediaType = adUnit.mediaType === VIDEO_MEDIA_TYPE; + var mediaTypes = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(adUnit, 'mediaTypes.video'); + return mediaType || mediaTypes; +}; +var videoBidder = function videoBidder(bid) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(__WEBPACK_IMPORTED_MODULE_0__adapterManager_js__["default"].videoAdapters, bid.bidder); +}; +var 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 = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["getBidRequest"])(bid.requestId, bidRequests); + var videoMediaType = bidRequest && Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(bidRequest, 'mediaTypes.video'); + var context = videoMediaType && Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(videoMediaType, 'context'); // if context not defined assume default 'instream' for video bids + // instream bids require a vast url or vast xml content + + return checkVideoBidSetup(bid, bidRequest, videoMediaType, context); +} +var checkVideoBidSetup = Object(__WEBPACK_IMPORTED_MODULE_4__hook_js__["b" /* hook */])('sync', function (bid, bidRequest, videoMediaType, context) { + if (!bidRequest || videoMediaType && context !== OUTSTREAM) { + // xml-only video bids require a prebid cache url + if (!__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('cache.url') && bid.vastXml && !bid.vastUrl) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["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; +}, 'checkVideoBidSetup'); + +/***/ }), + +/***/ 37: +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), + +/***/ 38: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var wellKnownSymbol = __webpack_require__(19); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.github.io/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); +}; + + +/***/ }), + +/***/ 39: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = loadExternalScript; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); + + +var _requestCache = {}; // The below list contains modules or vendors whom Prebid allows to load external JS. + +var _approvedLoadExternalJSList = ['criteo', 'outstream', 'adagio', 'browsi']; +/** + * Loads external javascript. Can only be used if external JS is approved by Prebid. See https://github.com/prebid/prebid-js-external-js-template#policy + * Each unique URL will be loaded at most 1 time. + * @param {string} url the url to load + * @param {string} moduleCode bidderCode or module code of the module requesting this resource + * @param {function} [callback] callback function to be called after the script is loaded. + */ + +function loadExternalScript(url, moduleCode, callback) { + if (!moduleCode || !url) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('cannot load external script without url and moduleCode'); + return; + } + + if (!__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___default()(_approvedLoadExternalJSList, moduleCode)) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]("".concat(moduleCode, " not whitelisted for loading external JavaScript")); + return; + } // only load each asset once + + + if (_requestCache[url]) { + if (callback && typeof callback === 'function') { + if (_requestCache[url].loaded) { + // invokeCallbacks immediately + callback(); + } else { + // queue the callback + _requestCache[url].callbacks.push(callback); + } + } + + return _requestCache[url].tag; + } + + _requestCache[url] = { + loaded: false, + tag: null, + callbacks: [] + }; + + if (callback && typeof callback === 'function') { + _requestCache[url].callbacks.push(callback); + } + + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"]("module ".concat(moduleCode, " is loading external JavaScript")); + return requestResource(url, function () { + _requestCache[url].loaded = true; + + try { + for (var i = 0; i < _requestCache[url].callbacks.length; i++) { + _requestCache[url].callbacks[i](); + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('Error executing callback', 'adloader.js:loadExternalScript', e); + } + }); + + function requestResource(tagSrc, callback) { + var jptScript = document.createElement('script'); + jptScript.type = 'text/javascript'; + jptScript.async = true; + _requestCache[url].tag = jptScript; + + 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 + + __WEBPACK_IMPORTED_MODULE_1__utils_js__["insertElement"](jptScript); + return jptScript; + } +} +; + +/***/ }), + +/***/ 4: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ajax; }); +/* harmony export (immutable) */ __webpack_exports__["b"] = ajaxBuilder; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +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 = ajaxBuilder(); +function ajaxBuilder() { + var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3000; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + request = _ref.request, + done = _ref.done; + + return function (url, callback, data) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + try { + var x; + var method = options.method || (data ? 'POST' : 'GET'); + var parser = document.createElement('a'); + parser.href = url; + var callbacks = _typeof(callback) === 'object' && callback !== null ? 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; + } + + x = new window.XMLHttpRequest(); + + x.onreadystatechange = function () { + if (x.readyState === XHR_DONE) { + if (typeof done === 'function') { + done(parser.origin); + } + + var status = x.status; + + if (status >= 200 && status < 300 || status === 304) { + callbacks.success(x.responseText, x); + } else { + callbacks.error(x.statusText, x); + } + } + }; // Disabled timeout temporarily to avoid xhr failed requests. https://github.com/prebid/Prebid.js/issues/2648 + + + if (!__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('disableAjaxTimeout')) { + x.ontimeout = function () { + utils.logError(' xhr timeout after ', x.timeout, 'ms'); + }; + } + + if (method === 'GET' && data) { + var urlInfo = utils.parseUrl(url, options); + + _extends(urlInfo.search, data); + + url = utils.buildUrl(urlInfo); + } + + x.open(method, url, true); // IE needs timoeut to be set after open - see #1410 + // Disabled timeout temporarily to avoid xhr failed requests. https://github.com/prebid/Prebid.js/issues/2648 + + if (!__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('disableAjaxTimeout')) { + x.timeout = timeout; + } + + 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 (typeof request === 'function') { + request(parser.origin); + } + + if (method === 'POST' && data) { + x.send(data); + } else { + x.send(); + } + } catch (error) { + utils.logError('xhr construction', error); + } + }; +} + +/***/ }), + +/***/ 40: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export AUCTION_STARTED */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AUCTION_IN_PROGRESS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AUCTION_COMPLETED; }); +/* harmony export (immutable) */ __webpack_exports__["k"] = newAuction; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return addBidResponse; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return addBidderRequests; }); +/* unused harmony export bidsBackCallback */ +/* unused harmony export auctionCallbacks */ +/* harmony export (immutable) */ __webpack_exports__["g"] = doCallbacksIfTimedout; +/* harmony export (immutable) */ __webpack_exports__["d"] = addBidToAuction; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return callPrebidCache; }); +/* unused harmony export getMediaTypeGranularity */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return getPriceGranularity; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return getPriceByGranularity; }); +/* harmony export (immutable) */ __webpack_exports__["j"] = getStandardBidderSettings; +/* unused harmony export getKeyValueTargetingPairs */ +/* unused harmony export adjustBids */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cpmBucketManager_js__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__videoCache_js__ = __webpack_require__(93); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__userSync_js__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__video_js__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * Module for auction instances. + * + * In Prebid 0.x, $$PREBID_GLOBAL$$ 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.} 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.} size + */ + +/** + * @typedef {Array.} AdUnitCode + */ + +/** + * @typedef {Object} BidderRequest + * + * @property {string} bidderCode - adUnit bidder + * @property {number} auctionId - random UUID + * @property {string} bidderRequestId - random string, unique key set on all bidRequest.bids[] + * @property {Array.} bids + * @property {number} auctionStart - Date.now() at auction start + * @property {number} timeout - callback timeout + * @property {refererInfo} refererInfo - referer info object + * @property {string} [tid] - random UUID (used for s2s) + * @property {string} [src] - s2s or client (used for s2s) + */ + +/** + * @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 + */ + + + + + + + + + + + +var syncUsers = __WEBPACK_IMPORTED_MODULE_6__userSync_js__["a" /* userSync */].syncUsers; + +var utils = __webpack_require__(0); + +var adapterManager = __webpack_require__(7).default; + +var events = __webpack_require__(8); + +var CONSTANTS = __webpack_require__(5); + +var AUCTION_STARTED = 'started'; +var AUCTION_IN_PROGRESS = 'inProgress'; +var AUCTION_COMPLETED = 'completed'; // register event for bid adjustment + +events.on(CONSTANTS.EVENTS.BID_ADJUSTMENT, function (bid) { + adjustBids(bid); +}); +var MAX_REQUESTS_PER_ORIGIN = 4; +var outstandingRequests = {}; +var sourceInfo = {}; +var queuedCalls = []; +/** + * Creates new auction instance + * + * @param {Object} requestConfig + * @param {AdUnit} requestConfig.adUnits + * @param {AdUnitCode} requestConfig.adUnitCodes + * @param {function():void} requestConfig.callback + * @param {number} requestConfig.cbTimeout + * @param {Array.} requestConfig.labels + * @param {string} requestConfig.auctionId + * + * @returns {Auction} auction instance + */ + +function newAuction(_ref) { + var adUnits = _ref.adUnits, + adUnitCodes = _ref.adUnitCodes, + callback = _ref.callback, + cbTimeout = _ref.cbTimeout, + labels = _ref.labels, + auctionId = _ref.auctionId; + var _adUnits = adUnits; + var _labels = labels; + var _adUnitCodes = adUnitCodes; + var _bidderRequests = []; + var _bidsReceived = []; + var _noBids = []; + + var _auctionStart; + + var _auctionEnd; + + var _auctionId = auctionId || utils.generateUUID(); + + var _auctionStatus; + + var _callback = callback; + + var _timer; + + var _timeout = cbTimeout; + var _winningBids = []; + + var _timelyBidders = new Set(); + + function addBidRequests(bidderRequests) { + _bidderRequests = _bidderRequests.concat(bidderRequests); + } + + function addBidReceived(bidsReceived) { + _bidsReceived = _bidsReceived.concat(bidsReceived); + } + + function addNoBid(noBid) { + _noBids = _noBids.concat(noBid); + } + + function getProperties() { + return { + auctionId: _auctionId, + timestamp: _auctionStart, + auctionEnd: _auctionEnd, + auctionStatus: _auctionStatus, + adUnits: _adUnits, + adUnitCodes: _adUnitCodes, + labels: _labels, + bidderRequests: _bidderRequests, + noBids: _noBids, + bidsReceived: _bidsReceived, + winningBids: _winningBids, + timeout: _timeout + }; + } + + 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 (_auctionEnd === undefined) { + var timedOutBidders = []; + + if (timedOut) { + utils.logMessage("Auction ".concat(_auctionId, " timedOut")); + timedOutBidders = getTimedOutBids(_bidderRequests, _timelyBidders); + + if (timedOutBidders.length) { + events.emit(CONSTANTS.EVENTS.BID_TIMEOUT, timedOutBidders); + } + } + + _auctionStatus = AUCTION_COMPLETED; + _auctionEnd = Date.now(); + events.emit(CONSTANTS.EVENTS.AUCTION_END, getProperties()); + bidsBackCallback(_adUnits, function () { + try { + if (_callback != null) { + var _adUnitCodes2 = _adUnitCodes; + + var bids = _bidsReceived.filter(utils.bind.call(__WEBPACK_IMPORTED_MODULE_0__utils_js__["adUnitsFilter"], this, _adUnitCodes2)).reduce(groupByPlacement, {}); + + _callback.apply(pbjs, [bids, timedOut, _auctionId]); + + _callback = null; + } + } catch (e) { + utils.logError('Error executing bidsBackHandler', null, e); + } finally { + // Calling timed out bidders + if (timedOutBidders.length) { + adapterManager.callTimedOutBidders(adUnits, timedOutBidders, _timeout); + } // Only automatically sync if the publisher has not chosen to "enableOverride" + + + var userSyncConfig = __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('userSync') || {}; + + if (!userSyncConfig.enableOverride) { + // Delay the auto sync by the config delay + syncUsers(userSyncConfig.syncDelay); + } + } + }); + } + } + + function auctionDone() { + // when all bidders have called done callback atleast once it means auction is complete + utils.logInfo("Bids Received for Auction with id: ".concat(_auctionId), _bidsReceived); + _auctionStatus = AUCTION_COMPLETED; + executeCallback(false, true); + } + + function onTimelyResponse(bidderCode) { + _timelyBidders.add(bidderCode); + } + + function callBids() { + _auctionStatus = AUCTION_STARTED; + _auctionStart = Date.now(); + var bidRequests = adapterManager.makeBidRequests(_adUnits, _auctionStart, _auctionId, _timeout, _labels); + utils.logInfo("Bids Requested for Auction with id: ".concat(_auctionId), bidRequests); + + if (bidRequests.length < 1) { + utils.logWarn('No valid bid requests returned for auction'); + auctionDone(); + } else { + addBidderRequests.call({ + dispatch: addBidderRequestsCallback, + context: this + }, bidRequests); + } + } + /** + * callback executed after addBidderRequests completes + * @param {BidRequest[]} bidRequests + */ + + + function addBidderRequestsCallback(bidRequests) { + var _this = this; + + bidRequests.forEach(function (bidRequest) { + addBidRequests(bidRequest); + }); + var requests = {}; + var call = { + bidRequests: bidRequests, + run: function run() { + startAuctionTimer(); + _auctionStatus = AUCTION_IN_PROGRESS; + events.emit(CONSTANTS.EVENTS.AUCTION_INIT, getProperties()); + var callbacks = auctionCallbacks(auctionDone, _this); + adapterManager.callBids(_adUnits, bidRequests, function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + addBidResponse.apply({ + dispatch: callbacks.addBidResponse, + bidderRequest: this + }, args); + }, callbacks.adapterDone, { + request: function request(source, origin) { + increment(outstandingRequests, origin); + increment(requests, source); + + if (!sourceInfo[source]) { + sourceInfo[source] = { + SRA: true, + origin: origin + }; + } + + if (requests[source] > 1) { + sourceInfo[source].SRA = false; + } + }, + done: function done(origin) { + outstandingRequests[origin]--; + + if (queuedCalls[0]) { + if (runIfOriginHasCapacity(queuedCalls[0])) { + queuedCalls.shift(); + } + } + } + }, _timeout, onTimelyResponse); + } + }; + + if (!runIfOriginHasCapacity(call)) { + utils.logWarn('queueing auction due to limited endpoint capacity'); + queuedCalls.push(call); + } + + function runIfOriginHasCapacity(call) { + var hasCapacity = true; + var maxRequests = __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('maxRequestsPerOrigin') || MAX_REQUESTS_PER_ORIGIN; + call.bidRequests.some(function (bidRequest) { + var requests = 1; + var source = typeof bidRequest.src !== 'undefined' && bidRequest.src === CONSTANTS.S2S.SRC ? 's2s' : bidRequest.bidderCode; // if we have no previous info on this source just let them through + + if (sourceInfo[source]) { + if (sourceInfo[source].SRA === false) { + // some bidders might use more than the MAX_REQUESTS_PER_ORIGIN in a single auction. In those cases + // set their request count to MAX_REQUESTS_PER_ORIGIN so the auction isn't permanently queued waiting + // for capacity for that bidder + requests = Math.min(bidRequest.bids.length, maxRequests); + } + + if (outstandingRequests[sourceInfo[source].origin] + requests > maxRequests) { + hasCapacity = false; + } + } // return only used for terminating this .some() iteration early if it is determined we don't have capacity + + + return !hasCapacity; + }); + + if (hasCapacity) { + call.run(); + } + + return hasCapacity; + } + + function increment(obj, prop) { + if (typeof obj[prop] === 'undefined') { + obj[prop] = 1; + } else { + obj[prop]++; + } + } + } + + function addWinningBid(winningBid) { + _winningBids = _winningBids.concat(winningBid); + adapterManager.callBidWonBidder(winningBid.bidder, winningBid, adUnits); + } + + function setBidTargeting(bid) { + adapterManager.callSetTargetingBidder(bid.bidder, bid); + } + + return { + addBidReceived: addBidReceived, + addNoBid: addNoBid, + executeCallback: executeCallback, + callBids: callBids, + addWinningBid: addWinningBid, + setBidTargeting: setBidTargeting, + getWinningBids: function getWinningBids() { + return _winningBids; + }, + 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; + }, + getNoBids: function getNoBids() { + return _noBids; + } + }; +} +var addBidResponse = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function (adUnitCode, bid) { + this.dispatch.call(this.bidderRequest, adUnitCode, bid); +}, 'addBidResponse'); +var addBidderRequests = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('sync', function (bidderRequests) { + this.dispatch.call(this.context, bidderRequests); +}, 'addBidderRequests'); +var bidsBackCallback = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function (adUnits, callback) { + if (callback) { + callback(); + } +}, 'bidsBackCallback'); +function auctionCallbacks(auctionDone, auctionInstance) { + var outstandingBidsAdded = 0; + var allAdapterCalledDone = false; + var bidderRequestsDone = new Set(); + var bidResponseMap = {}; + + function afterBidAdded() { + outstandingBidsAdded--; + + if (allAdapterCalledDone && outstandingBidsAdded === 0) { + auctionDone(); + } + } + + function addBidResponse(adUnitCode, bid) { + var bidderRequest = this; + bidResponseMap[bid.requestId] = true; + outstandingBidsAdded++; + var auctionId = auctionInstance.getAuctionId(); + var bidResponse = getPreparedBidForAuction({ + adUnitCode: adUnitCode, + bid: bid, + bidderRequest: bidderRequest, + auctionId: auctionId + }); + + if (bidResponse.mediaType === 'video') { + tryAddVideoBid(auctionInstance, bidResponse, bidderRequest, afterBidAdded); + } else { + addBidToAuction(auctionInstance, bidResponse); + afterBidAdded(); + } + } + + function adapterDone() { + var bidderRequest = this; + bidderRequestsDone.add(bidderRequest); + allAdapterCalledDone = auctionInstance.getBidRequests().every(function (bidderRequest) { + return bidderRequestsDone.has(bidderRequest); + }); + bidderRequest.bids.forEach(function (bid) { + if (!bidResponseMap[bid.bidId]) { + auctionInstance.addNoBid(bid); + events.emit(CONSTANTS.EVENTS.NO_BID, bid); + } + }); + + if (allAdapterCalledDone && outstandingBidsAdded === 0) { + auctionDone(); + } + } + + return { + addBidResponse: addBidResponse, + adapterDone: adapterDone + }; +} +function doCallbacksIfTimedout(auctionInstance, bidResponse) { + if (bidResponse.timeToRespond > auctionInstance.getTimeout() + __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('timeoutBuffer')) { + auctionInstance.executeCallback(true); + } +} // Add a bid to the auction. + +function addBidToAuction(auctionInstance, bidResponse) { + var bidderRequests = auctionInstance.getBidRequests(); + var bidderRequest = __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidderRequests, function (bidderRequest) { + return bidderRequest.bidderCode === bidResponse.bidderCode; + }); + setupBidTargeting(bidResponse, bidderRequest); + 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, bidRequests, afterBidAdded) { + var addBid = true; + var bidderRequest = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidRequest"])(bidResponse.requestId, [bidRequests]); + var videoMediaType = bidderRequest && Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bidderRequest, 'mediaTypes.video'); + var context = videoMediaType && Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(videoMediaType, 'context'); + + if (__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('cache.url') && context !== __WEBPACK_IMPORTED_MODULE_9__video_js__["b" /* OUTSTREAM */]) { + if (!bidResponse.videoCacheKey) { + addBid = false; + callPrebidCache(auctionInstance, bidResponse, afterBidAdded, bidderRequest); + } else if (!bidResponse.vastUrl) { + utils.logError('videoCacheKey specified but not required vastUrl for video bid'); + addBid = false; + } + } + + if (addBid) { + addBidToAuction(auctionInstance, bidResponse); + afterBidAdded(); + } +} + +var callPrebidCache = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function (auctionInstance, bidResponse, afterBidAdded, bidderRequest) { + Object(__WEBPACK_IMPORTED_MODULE_3__videoCache_js__["b" /* store */])([bidResponse], function (error, cacheIds) { + if (error) { + utils.logWarn("Failed to save to the video cache: ".concat(error, ". Video bid must be discarded.")); + doCallbacksIfTimedout(auctionInstance, bidResponse); + } else { + if (cacheIds[0].uuid === '') { + utils.logWarn("Supplied video cache key was already in use by Prebid Cache; caching attempt was rejected. Video bid must be discarded."); + doCallbacksIfTimedout(auctionInstance, bidResponse); + } else { + bidResponse.videoCacheKey = cacheIds[0].uuid; + + if (!bidResponse.vastUrl) { + bidResponse.vastUrl = Object(__WEBPACK_IMPORTED_MODULE_3__videoCache_js__["a" /* getCacheUrl */])(bidResponse.videoCacheKey); + } + + addBidToAuction(auctionInstance, bidResponse); + afterBidAdded(); + } + } + }, bidderRequest); +}, 'callPrebidCache'); // 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, + bidderRequest = _ref2.bidderRequest, + auctionId = _ref2.auctionId; + var start = bidderRequest.start; + + var bidObject = _extends({}, bid, { + auctionId: auctionId, + responseTimestamp: Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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 bidReq = bidderRequest.bids && __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidderRequest.bids, function (bid) { + return bid.adUnitCode == adUnitCode; + }); + var adUnitRenderer = bidReq && bidReq.renderer; + + if (adUnitRenderer && adUnitRenderer.url) { + bidObject.renderer = __WEBPACK_IMPORTED_MODULE_4__Renderer_js__["a" /* Renderer */].install({ + url: adUnitRenderer.url + }); + bidObject.renderer.setRender(adUnitRenderer.render); + } // Use the config value 'mediaTypeGranularity' if it has been defined for mediaType, else use 'customPriceBucket' + + + var mediaTypeGranularity = getMediaTypeGranularity(bid.mediaType, bidReq, __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('mediaTypePriceGranularity')); + var priceStringsObj = Object(__WEBPACK_IMPORTED_MODULE_1__cpmBucketManager_js__["a" /* getPriceBucketString */])(bidObject.cpm, _typeof(mediaTypeGranularity) === 'object' ? mediaTypeGranularity : __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('customPriceBucket'), __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* 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; + return bidObject; +} + +function setupBidTargeting(bidObject, bidderRequest) { + var keyValues; + + if (bidObject.bidderCode && (bidObject.cpm > 0 || bidObject.dealId)) { + var bidReq = __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidderRequest.bids, function (bid) { + return bid.adUnitCode === bidObject.adUnitCode; + }); + keyValues = getKeyValueTargetingPairs(bidObject.bidderCode, bidObject, bidReq); + } // use any targeting provided as defaults, otherwise just set from getKeyValueTargetingPairs + + + bidObject.adserverTargeting = _extends(bidObject.adserverTargeting || {}, keyValues); +} +/** + * @param {MediaType} mediaType + * @param {Bid} [bidReq] + * @param {MediaTypePriceGranularity} [mediaTypePriceGranularity] + * @returns {(Object|string|undefined)} + */ + + +function getMediaTypeGranularity(mediaType, bidReq, mediaTypePriceGranularity) { + if (mediaType && mediaTypePriceGranularity) { + if (mediaType === __WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */]) { + var context = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bidReq, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */], ".context"), 'instream'); + + if (mediaTypePriceGranularity["".concat(__WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */], "-").concat(context)]) { + return mediaTypePriceGranularity["".concat(__WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */], "-").concat(context)]; + } + } + + return mediaTypePriceGranularity[mediaType]; + } +} +/** + * This function returns the price granularity defined. It can be either publisher defined or default value + * @param {string} mediaType + * @param {BidRequest} bidReq + * @returns {string} granularity + */ + +var getPriceGranularity = function getPriceGranularity(mediaType, bidReq) { + // Use the config value 'mediaTypeGranularity' if it has been set for mediaType, else use 'priceGranularity' + var mediaTypeGranularity = getMediaTypeGranularity(mediaType, bidReq, __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('mediaTypePriceGranularity')); + var granularity = typeof mediaType === 'string' && mediaTypeGranularity ? typeof mediaTypeGranularity === 'string' ? mediaTypeGranularity : 'custom' : __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('priceGranularity'); + return granularity; +}; +/** + * This function returns a function to get bid price by price granularity + * @param {string} granularity + * @returns {function} + */ + +var getPriceByGranularity = function getPriceByGranularity(granularity) { + return function (bid) { + if (granularity === CONSTANTS.GRANULARITY_OPTIONS.AUTO) { + return bid.pbAg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.DENSE) { + return bid.pbDg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.LOW) { + return bid.pbLg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.MEDIUM) { + return bid.pbMg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.HIGH) { + return bid.pbHg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.CUSTOM) { + return bid.pbCg; + } + }; +}; +/** + * @param {string} mediaType + * @param {string} bidderCode + * @param {BidRequest} bidReq + * @returns {*} + */ + +function getStandardBidderSettings(mediaType, bidderCode, bidReq) { + // factory for key value objs + function createKeyVal(key, value) { + return { + key: key, + val: typeof value === 'function' ? function (bidResponse) { + return value(bidResponse); + } : function (bidResponse) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getValue"])(bidResponse, value); + } + }; + } + + var TARGETING_KEYS = CONSTANTS.TARGETING_KEYS; + var granularity = getPriceGranularity(mediaType, bidReq); + var bidderSettings = pbjs.bidderSettings; + + if (!bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]) { + bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD] = {}; + } + + if (!bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { + bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING] = [createKeyVal(TARGETING_KEYS.BIDDER, 'bidderCode'), createKeyVal(TARGETING_KEYS.AD_ID, 'adId'), createKeyVal(TARGETING_KEYS.PRICE_BUCKET, getPriceByGranularity(granularity)), createKeyVal(TARGETING_KEYS.SIZE, 'size'), createKeyVal(TARGETING_KEYS.DEAL, 'dealId'), createKeyVal(TARGETING_KEYS.SOURCE, 'source'), createKeyVal(TARGETING_KEYS.FORMAT, 'mediaType')]; + } + + if (mediaType === 'video') { + var adserverTargeting = bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]; // Adding hb_uuid + hb_cache_id + + [TARGETING_KEYS.UUID, TARGETING_KEYS.CACHE_ID].forEach(function (targetingKeyVal) { + if (typeof __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adserverTargeting, function (kvPair) { + return kvPair.key === targetingKeyVal; + }) === 'undefined') { + adserverTargeting.push(createKeyVal(targetingKeyVal, 'videoCacheKey')); + } + }); // Adding hb_cache_host + + if (__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('cache.url') && (!bidderCode || utils.deepAccess(bidderSettings, "".concat(bidderCode, ".sendStandardTargeting")) !== false)) { + var urlInfo = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["parseUrl"])(__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('cache.url')); + + if (typeof __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adserverTargeting, function (targetingKeyVal) { + return targetingKeyVal.key === TARGETING_KEYS.CACHE_HOST; + }) === 'undefined') { + adserverTargeting.push(createKeyVal(TARGETING_KEYS.CACHE_HOST, function (bidResponse) { + return utils.deepAccess(bidResponse, "adserverTargeting.".concat(TARGETING_KEYS.CACHE_HOST)) ? bidResponse.adserverTargeting[TARGETING_KEYS.CACHE_HOST] : urlInfo.hostname; + })); + } + } + } + + return bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]; +} +function getKeyValueTargetingPairs(bidderCode, custBidObj, bidReq) { + if (!custBidObj) { + return {}; + } + + var keyValues = {}; + var bidderSettings = pbjs.bidderSettings; // 1) set the keys from "standard" setting or from prebid defaults + + if (bidderSettings) { + // initialize default if not set + var standardSettings = getStandardBidderSettings(custBidObj.mediaType, bidderCode, bidReq); + setKeys(keyValues, standardSettings, custBidObj); // 2) set keys from specific bidder setting override if they exist + + if (bidderCode && bidderSettings[bidderCode] && bidderSettings[bidderCode][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { + setKeys(keyValues, bidderSettings[bidderCode], custBidObj); + custBidObj.sendStandardTargeting = bidderSettings[bidderCode].sendStandardTargeting; + } + } // set native key value targeting + + + if (custBidObj['native']) { + keyValues = _extends({}, keyValues, Object(__WEBPACK_IMPORTED_MODULE_2__native_js__["d" /* getNativeTargeting */])(custBidObj, bidReq)); + } + + 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 === CONSTANTS.TARGETING_KEYS.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; + + 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 {Set} timelyBidders Set of bidders which responded in time + * + * @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} List of bids that Prebid hasn't received a response for + */ + + +function getTimedOutBids(bidderRequests, timelyBidders) { + var timedOutBids = bidderRequests.map(function (bid) { + return (bid.bids || []).filter(function (bid) { + return !timelyBidders.has(bid.bidder); + }); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).map(function (bid) { + return { + bidId: bid.bidId, + bidder: bid.bidder, + adUnitCode: bid.adUnitCode, + auctionId: bid.auctionId + }; + }); + return timedOutBids; +} + +/***/ }), + +/***/ 41: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export TARGETING_KEYS */ +/* unused harmony export filters */ +/* unused harmony export getHighestCpmBidsFromBidPool */ +/* unused harmony export sortByDealAndPriceBucketOrCpm */ +/* unused harmony export newTargeting */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return targeting; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__sizeMapping_js__ = __webpack_require__(91); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js__); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +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) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + + + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var pbTargetingKeys = []; +var MAX_DFP_KEYLENGTH = 20; +var TTL_BUFFER = 1000; +var TARGETING_KEYS = Object.keys(CONSTANTS.TARGETING_KEYS).map(function (key) { + return CONSTANTS.TARGETING_KEYS[key]; +}); // return unexpired bids + +var isBidNotExpired = function isBidNotExpired(bid) { + return bid.responseTimestamp + bid.ttl * 1000 + TTL_BUFFER > Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["timestamp"])(); +}; // return bids whose status is not set. Winning bids can only have a status of `rendered`. + + +var isUnusedBid = function isUnusedBid(bid) { + return bid && (bid.status && !__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()([CONSTANTS.BID_STATUS.RENDERED], bid.status) || !bid.status); +}; + +var filters = { + isBidNotExpired: isBidNotExpired, + isUnusedBid: isUnusedBid +}; // If two bids are found for same adUnitCode, we will use the highest one to take part in auction +// This can happen in case of concurrent auctions +// If adUnitBidLimit is set above 0 return top N number of bids + +function getHighestCpmBidsFromBidPool(bidsReceived, highestCpmCallback) { + var adUnitBidLimit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + var bids = []; + var dealPrioritization = __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('sendBidsControl.dealPrioritization'); // bucket by adUnitcode + + var buckets = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["groupBy"])(bidsReceived, 'adUnitCode'); // filter top bid for each bucket by bidder + + Object.keys(buckets).forEach(function (bucketKey) { + var bucketBids = []; + var bidsByBidder = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["groupBy"])(buckets[bucketKey], 'bidderCode'); + Object.keys(bidsByBidder).forEach(function (key) { + return bucketBids.push(bidsByBidder[key].reduce(highestCpmCallback)); + }); // if adUnitBidLimit is set, pass top N number bids + + if (adUnitBidLimit > 0) { + bucketBids = dealPrioritization ? bucketBids.sort(sortByDealAndPriceBucketOrCpm(true)) : bucketBids.sort(function (a, b) { + return b.cpm - a.cpm; + }); + bids.push.apply(bids, _toConsumableArray(bucketBids.slice(0, adUnitBidLimit))); + } else { + bids.push.apply(bids, _toConsumableArray(bucketBids)); + } + }); + return bids; +} +/** +* A descending sort function that will sort the list of objects based on the following two dimensions: +* - bids with a deal are sorted before bids w/o a deal +* - then sort bids in each grouping based on the hb_pb value +* eg: the following list of bids would be sorted like: +* [{ +* "hb_adid": "vwx", +* "hb_pb": "28", +* "hb_deal": "7747" +* }, { +* "hb_adid": "jkl", +* "hb_pb": "10", +* "hb_deal": "9234" +* }, { +* "hb_adid": "stu", +* "hb_pb": "50" +* }, { +* "hb_adid": "def", +* "hb_pb": "2" +* }] +*/ + +function sortByDealAndPriceBucketOrCpm() { + var useCpm = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + return function (a, b) { + if (a.adserverTargeting.hb_deal !== undefined && b.adserverTargeting.hb_deal === undefined) { + return -1; + } + + if (a.adserverTargeting.hb_deal === undefined && b.adserverTargeting.hb_deal !== undefined) { + return 1; + } // assuming both values either have a deal or don't have a deal - sort by the hb_pb param + + + if (useCpm) { + return b.cpm - a.cpm; + } + + return b.adserverTargeting.hb_pb - a.adserverTargeting.hb_pb; + }; +} +/** + * @typedef {Object.} targeting + * @property {string} targeting_key + */ + +/** + * @typedef {Object.[]>[]} targetingArray + */ + +function newTargeting(auctionManager) { + var targeting = {}; + var latestAuctionForAdUnit = {}; + + targeting.setLatestAuctionForAdUnit = function (adUnitCode, auctionId) { + latestAuctionForAdUnit[adUnitCode] = auctionId; + }; + + targeting.resetPresetTargeting = function (adUnitCode, customSlotMatching) { + if (Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["isGptPubadsDefined"])()) { + var adUnitCodes = getAdUnitCodes(adUnitCode); + var adUnits = auctionManager.getAdUnits().filter(function (adUnit) { + return __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(adUnitCodes, adUnit.code); + }); + window.googletag.pubads().getSlots().forEach(function (slot) { + var customSlotMatchingFunc = utils.isFn(customSlotMatching) && customSlotMatching(slot); + pbTargetingKeys.forEach(function (key) { + // reset only registered adunits + adUnits.forEach(function (unit) { + if (unit.code === slot.getAdUnitPath() || unit.code === slot.getSlotElementId() || utils.isFn(customSlotMatchingFunc) && customSlotMatchingFunc(unit.code)) { + slot.setTargeting(key, null); + } + }); + }); + }); + } + }; + + targeting.resetPresetTargetingAST = function (adUnitCode) { + var adUnitCodes = getAdUnitCodes(adUnitCode); + adUnitCodes.forEach(function (unit) { + var astTag = window.apntag.getTag(unit); + + if (astTag && astTag.keywords) { + var currentKeywords = Object.keys(astTag.keywords); + var newKeywords = {}; + currentKeywords.forEach(function (key) { + if (!__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(pbTargetingKeys, key.toLowerCase())) { + newKeywords[key] = astTag.keywords[key]; + } + }); + window.apntag.modifyTag(unit, { + keywords: newKeywords + }); + } + }); + }; + /** + * checks if bid has targeting set and belongs based on matching ad unit codes + * @return {boolean} true or false + */ + + + function bidShouldBeAddedToTargeting(bid, adUnitCodes) { + return bid.adserverTargeting && adUnitCodes && (utils.isArray(adUnitCodes) && __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(adUnitCodes, bid.adUnitCode) || typeof adUnitCodes === 'string' && bid.adUnitCode === adUnitCodes); + } + + ; + /** + * Returns targeting for any bids which have deals if alwaysIncludeDeals === true + */ + + function getDealBids(adUnitCodes, bidsReceived) { + if (__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('targetingControls.alwaysIncludeDeals') === true) { + var standardKeys = TARGETING_KEYS.concat(__WEBPACK_IMPORTED_MODULE_2__native_js__["a" /* NATIVE_TARGETING_KEYS */]); // we only want the top bid from bidders who have multiple entries per ad unit code + + var bids = getHighestCpmBidsFromBidPool(bidsReceived, __WEBPACK_IMPORTED_MODULE_0__utils_js__["getHighestCpm"]); // populate targeting keys for the remaining bids if they have a dealId + + return bids.map(function (bid) { + if (bid.dealId && bidShouldBeAddedToTargeting(bid, adUnitCodes)) { + 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 + } + + return []; + } + + ; + /** + * Returns all ad server targeting for all ad units. + * @param {string=} adUnitCode + * @return {Object.} 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(__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('enableSendAllBids') ? getBidLandscapeTargeting(adUnitCodes, bidsReceived) : getDealBids(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); + var auctionKeysThreshold = __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('targetingControls.auctionKeyMaxChars'); + + if (auctionKeysThreshold) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logInfo"])("Detected 'targetingControls.auctionKeyMaxChars' was active for this auction; set with a limit of ".concat(auctionKeysThreshold, " characters. Running checks on auction keys...")); + targeting = filterTargetingKeys(targeting, auctionKeysThreshold); + } // make sure at least there is a entry per adUnit code in the targetingSet so receivers of SET_TARGETING call's can know what ad units are being invoked + + + adUnitCodes.forEach(function (code) { + if (!targeting[code]) { + targeting[code] = {}; + } + }); + return targeting; + }; // create an encoded string variant based on the keypairs of the provided object + // - note this will encode the characters between the keys (ie = and &) + + + function convertKeysToQueryForm(keyMap) { + return Object.keys(keyMap).reduce(function (queryString, key) { + var encodedKeyPair = "".concat(key, "%3d").concat(encodeURIComponent(keyMap[key]), "%26"); + return queryString += encodedKeyPair; + }, ''); + } + + function filterTargetingKeys(targeting, auctionKeysThreshold) { + // read each targeting.adUnit object and sort the adUnits into a list of adUnitCodes based on priorization setting (eg CPM) + var targetingCopy = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepClone"])(targeting); + var targetingMap = Object.keys(targetingCopy).map(function (adUnitCode) { + return { + adUnitCode: adUnitCode, + adserverTargeting: targetingCopy[adUnitCode] + }; + }).sort(sortByDealAndPriceBucketOrCpm()); // iterate through the targeting based on above list and transform the keys into the query-equivalent and count characters + + return targetingMap.reduce(function (accMap, currMap, index, arr) { + var adUnitQueryString = convertKeysToQueryForm(currMap.adserverTargeting); // for the last adUnit - trim last encoded ampersand from the converted query string + + if (index + 1 === arr.length) { + adUnitQueryString = adUnitQueryString.slice(0, -3); + } // if under running threshold add to result + + + var code = currMap.adUnitCode; + var querySize = adUnitQueryString.length; + + if (querySize <= auctionKeysThreshold) { + auctionKeysThreshold -= querySize; + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logInfo"])("AdUnit '".concat(code, "' auction keys comprised of ").concat(querySize, " characters. Deducted from running threshold; new limit is ").concat(auctionKeysThreshold), targetingCopy[code]); + accMap[code] = targetingCopy[code]; + } else { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"])("The following keys for adUnitCode '".concat(code, "' exceeded the current limit of the 'auctionKeyMaxChars' setting.\nThe key-set size was ").concat(querySize, ", the current allotted amount was ").concat(auctionKeysThreshold, ".\n"), targetingCopy[code]); + } + + if (index + 1 === arr.length && Object.keys(accMap).length === 0) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logError"])('No auction targeting keys were permitted due to the setting in setConfig(targetingControls.auctionKeyMaxChars). Please review setup and consider adjusting.'); + } + + return accMap; + }, {}); + } + /** + * 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.} 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.>} targetingConfig + */ + + + targeting.setTargetingForGPT = function (targetingConfig, customSlotMatching) { + window.googletag.pubads().getSlots().forEach(function (slot) { + Object.keys(targetingConfig).filter(customSlotMatching ? customSlotMatching(slot) : Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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: ".concat(slot.getSlotElementId(), " key: ").concat(key, " value: ").concat(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() { + var bidsReceived = auctionManager.getBidsReceived(); + + if (!__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('useBidCache')) { + bidsReceived = bidsReceived.filter(function (bid) { + return latestAuctionForAdUnit[bid.adUnitCode] === bid.auctionId; + }); + } + + bidsReceived = bidsReceived.filter(function (bid) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'video.context') !== __WEBPACK_IMPORTED_MODULE_5__mediaTypes_js__["a" /* ADPOD */]; + }).filter(function (bid) { + return bid.mediaType !== 'banner' || Object(__WEBPACK_IMPORTED_MODULE_4__sizeMapping_js__["c" /* sizeSupported */])([bid.width, bid.height]); + }).filter(filters.isUnusedBid).filter(filters.isBidNotExpired); + return getHighestCpmBidsFromBidPool(bidsReceived, __WEBPACK_IMPORTED_MODULE_0__utils_js__["getOldestHighestCpmBid"]); + } + /** + * 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 __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(adUnitCodes, bid.adUnitCode); + }).filter(function (bid) { + return bid.cpm > 0; + }).map(function (bid) { + return bid.adUnitCode; + }).filter(__WEBPACK_IMPORTED_MODULE_0__utils_js__["uniques"]).map(function (adUnitCode) { + return bidsReceived.filter(function (bid) { + return bid.adUnitCode === adUnitCode ? bid : null; + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getHighestCpm"]); + }); + }; + /** + * @param {(string|string[])} adUnitCode adUnitCode or array of adUnitCodes + * Sets targeting for AST + */ + + + targeting.setTargetingForAst = function (adUnitCodes) { + var astTargeting = targeting.getAllTargeting(adUnitCodes); + + try { + targeting.resetPresetTargetingAST(adUnitCodes); + } catch (e) { + utils.logError('unable to reset targeting for AST' + e); + } + + Object.keys(astTargeting).forEach(function (targetId) { + return Object.keys(astTargeting[targetId]).forEach(function (key) { + utils.logMessage("Attempting to set targeting for targetId: ".concat(targetId, " key: ").concat(key, " value: ").concat(astTargeting[targetId][key])); // setKeywords supports string and array as value + + if (utils.isStr(astTargeting[targetId][key]) || utils.isArray(astTargeting[targetId][key])) { + var keywordsObj = {}; + var regex = /pt[0-9]/; + + if (key.search(regex) < 0) { + keywordsObj[key.toUpperCase()] = astTargeting[targetId][key]; + } else { + // pt${n} keys should not be uppercased + keywordsObj[key] = astTargeting[targetId][key]; + } + + window.apntag.setKeywords(targetId, keywordsObj, { + overrideKeyValue: true + }); + } + }); + }); + }; + /** + * 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); + 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; + }).reduce(function (acc, key) { + var targetingValue = [winner.adserverTargeting[key]]; + + var targeting = _defineProperty({}, key.substring(0, MAX_DFP_KEYLENGTH), targetingValue); + + if (key === CONSTANTS.TARGETING_KEYS.DEAL) { + var bidderCodeTargetingKey = "".concat(key, "_").concat(winner.bidderCode).substring(0, MAX_DFP_KEYLENGTH); + + var bidderCodeTargeting = _defineProperty({}, bidderCodeTargetingKey, targetingValue); + + return [].concat(_toConsumableArray(acc), [targeting, bidderCodeTargeting]); + } + + return [].concat(_toConsumableArray(acc), [targeting]); + }, [])); + }); + return winners; + } + + function getStandardKeys() { + return auctionManager.getStandardBidderAdServerTargeting() // in case using a custom standard key set + .map(function (targeting) { + return targeting.key; + }).concat(TARGETING_KEYS).filter(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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().concat(__WEBPACK_IMPORTED_MODULE_2__native_js__["a" /* NATIVE_TARGETING_KEYS */]); + 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 __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___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 = TARGETING_KEYS.concat(__WEBPACK_IMPORTED_MODULE_2__native_js__["a" /* NATIVE_TARGETING_KEYS */]); + var adUnitBidLimit = __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('sendBidsControl.bidLimit'); + var bids = getHighestCpmBidsFromBidPool(bidsReceived, __WEBPACK_IMPORTED_MODULE_0__utils_js__["getHighestCpm"], adUnitBidLimit); // populate targeting keys for the remaining bids + + return bids.map(function (bid) { + if (bidShouldBeAddedToTargeting(bid, adUnitCodes)) { + 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({}, "".concat(key, "_").concat(bid.bidderCode).substring(0, MAX_DFP_KEYLENGTH), [bid.adserverTargeting[key]]); + }); + } + + targeting.isApntagDefined = function () { + if (window.apntag && utils.isFn(window.apntag.setKeywords)) { + return true; + } + }; + + return targeting; +} +var targeting = newTargeting(__WEBPACK_IMPORTED_MODULE_3__auctionManager_js__["a" /* auctionManager */]); + +/***/ }), + +/***/ 42: +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), + +/***/ 43: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export USERSYNC_DEFAULT_CONFIG */ +/* unused harmony export newUserSync */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return userSync; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__storageManager_js__ = __webpack_require__(9); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var USERSYNC_DEFAULT_CONFIG = { + syncEnabled: true, + filterSettings: { + image: { + bidders: '*', + filter: 'include' + } + }, + syncsPerBidder: 5, + syncDelay: 3000, + auctionDelay: 0 +}; // Set userSync default values + +__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].setDefaults({ + 'userSync': __WEBPACK_IMPORTED_MODULE_0__utils_js__["deepClone"](USERSYNC_DEFAULT_CONFIG) +}); +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__storageManager_js__["a" /* getCoreStorageManager */])('usersync'); +/** + * 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 for a specific bidder + + var hasFiredBidder = new Set(); // How many bids for each adapter + + var numAdapterBids = {}; // for now - default both to false in case filterSettings config is absent/misconfigured + + var permittedPixels = { + image: true, + iframe: false + }; // Use what is in config by default + + var usConfig = userSyncDependencies.config; // Update if it's (re)set + + __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('userSync', function (conf) { + // Added this logic for https://github.com/prebid/Prebid.js/issues/4864 + // if userSync.filterSettings does not contain image/all configs, merge in default image config to ensure image pixels are fired + if (conf.userSync) { + var fs = conf.userSync.filterSettings; + + if (__WEBPACK_IMPORTED_MODULE_0__utils_js__["isPlainObject"](fs)) { + if (!fs.image && !fs.all) { + conf.userSync.filterSettings.image = { + bidders: '*', + filter: 'include' + }; + } + } + } + + 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) { + return; + } + + try { + // Image pixels + fireImagePixels(); // Iframe syncs + + loadIframes(); + } catch (e) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logError"]('Error firing user syncs', e); + } // Reset the user sync queue + + + queue = getDefaultQueue(); + } + + function forEachFire(queue, fn) { + // 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 + __WEBPACK_IMPORTED_MODULE_0__utils_js__["shuffle"](queue).forEach(function (sync) { + fn(sync); + hasFiredBidder.add(sync[0]); + }); + } + /** + * @function fireImagePixels + * @summary Loops through user sync pixels and fires each one + * @private + */ + + + function fireImagePixels() { + if (!permittedPixels.image) { + return; + } + + forEachFire(queue.image, function (sync) { + var _sync = _slicedToArray(sync, 2), + bidderName = _sync[0], + trackingPixelUrl = _sync[1]; + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logMessage"]("Invoking image pixel user sync for bidder: ".concat(bidderName)); // Create image object and add the src url + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["triggerPixel"](trackingPixelUrl); + }); + } + /** + * @function loadIframes + * @summary Loops through iframe syncs and loads an iframe element into the page + * @private + */ + + + function loadIframes() { + if (!permittedPixels.iframe) { + return; + } + + forEachFire(queue.iframe, function (sync) { + var _sync2 = _slicedToArray(sync, 2), + bidderName = _sync2[0], + iframeUrl = _sync2[1]; + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logMessage"]("Invoking iframe user sync for bidder: ".concat(bidderName)); // Insert iframe into DOM + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["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 Using Image Sync + * // registerSync(type, adapter, pixelUrl) + * userSync.registerSync('image', 'rubicon', 'http://example.com/pixel') + */ + + + publicApi.registerSync = function (type, bidder, url) { + if (hasFiredBidder.has(bidder)) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logMessage"]("already fired syncs for \"".concat(bidder, "\", ignoring registerSync call")); + } + + if (!usConfig.syncEnabled || !__WEBPACK_IMPORTED_MODULE_0__utils_js__["isArray"](queue[type])) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("User sync type \"".concat(type, "\" not supported")); + } + + if (!bidder) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Bidder is required for registering sync"); + } + + if (usConfig.syncsPerBidder !== 0 && Number(numAdapterBids[bidder]) >= usConfig.syncsPerBidder) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Number of user syncs exceeded for \"".concat(bidder, "\"")); + } + + var canBidderRegisterSync = publicApi.canBidderRegisterSync(type, bidder); + + if (!canBidderRegisterSync) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Bidder \"".concat(bidder, "\" not permitted to register their \"").concat(type, "\" userSync pixels.")); + } // the bidder's pixel has passed all checks and is allowed to register + + + queue[type].push([bidder, url]); + numAdapterBids = incrementAdapterBids(numAdapterBids, bidder); + }; + /** + * @function shouldBidderBeBlocked + * @summary Check filterSettings logic to determine if the bidder should be prevented from registering their userSync tracker + * @private + * @param {string} type The type of the sync; either image or iframe + * @param {string} bidder The name of the adapter. e.g. "rubicon" + * @returns {boolean} true => bidder is not allowed to register; false => bidder can register + */ + + + function shouldBidderBeBlocked(type, bidder) { + var filterConfig = usConfig.filterSettings; // apply the filter check if the config object is there (eg filterSettings.iframe exists) and if the config object is properly setup + + if (isFilterConfigValid(filterConfig, type)) { + permittedPixels[type] = true; + var activeConfig = filterConfig.all ? filterConfig.all : filterConfig[type]; + var biddersToFilter = activeConfig.bidders === '*' ? [bidder] : activeConfig.bidders; + var filterType = activeConfig.filter || 'include'; // set default if undefined + // return true if the bidder is either: not part of the include (ie outside the whitelist) or part of the exclude (ie inside the blacklist) + + var checkForFiltering = { + 'include': function include(bidders, bidder) { + return !__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(bidders, bidder); + }, + 'exclude': function exclude(bidders, bidder) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(bidders, bidder); + } + }; + return checkForFiltering[filterType](biddersToFilter, bidder); + } + + return false; + } + /** + * @function isFilterConfigValid + * @summary Check if the filterSettings object in the userSync config is setup properly + * @private + * @param {object} filterConfig sub-config object taken from filterSettings + * @param {string} type The type of the sync; either image or iframe + * @returns {boolean} true => config is setup correctly, false => setup incorrectly or filterConfig[type] is not present + */ + + + function isFilterConfigValid(filterConfig, type) { + if (filterConfig.all && filterConfig[type]) { + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Detected presence of the \"filterSettings.all\" and \"filterSettings.".concat(type, "\" in userSync config. You cannot mix \"all\" with \"iframe/image\" configs; they are mutually exclusive.")); + return false; + } + + var activeConfig = filterConfig.all ? filterConfig.all : filterConfig[type]; + var activeConfigName = filterConfig.all ? 'all' : type; // if current pixel type isn't part of the config's logic, skip rest of the config checks... + // we return false to skip subsequent filter checks in shouldBidderBeBlocked() function + + if (!activeConfig) { + return false; + } + + var filterField = activeConfig.filter; + var biddersField = activeConfig.bidders; + + if (filterField && filterField !== 'include' && filterField !== 'exclude') { + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("UserSync \"filterSettings.".concat(activeConfigName, ".filter\" setting '").concat(filterField, "' is not a valid option; use either 'include' or 'exclude'.")); + return false; + } + + if (biddersField !== '*' && !(Array.isArray(biddersField) && biddersField.length > 0 && biddersField.every(function (bidderInList) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["isStr"](bidderInList) && bidderInList !== '*'; + }))) { + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Detected an invalid setup in userSync \"filterSettings.".concat(activeConfigName, ".bidders\"; use either '*' (to represent all bidders) or an array of bidders.")); + return false; + } + + return true; + } + /** + * @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(); + } + }; + + publicApi.canBidderRegisterSync = function (type, bidder) { + if (usConfig.filterSettings) { + if (shouldBidderBeBlocked(type, bidder)) { + return false; + } + } + + return true; + }; + + return publicApi; +} +var browserSupportsCookies = !__WEBPACK_IMPORTED_MODULE_0__utils_js__["isSafariBrowser"]() && storage.cookiesAreEnabled(); +var userSync = newUserSync({ + config: __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* 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 {int} syncsPerBidder + * @property {string[]} enabledBidders + * @property {Object} filterSettings + */ + +/***/ }), + +/***/ 45: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getPriceBucketString; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return isValidPriceConfig; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__); + + +var utils = __webpack_require__(0); + +var _defaultPrecision = 2; +var _lgPriceConfig = { + 'buckets': [{ + 'max': 5, + 'increment': 0.5 + }] +}; +var _mgPriceConfig = { + 'buckets': [{ + 'max': 20, + 'increment': 0.1 + }] +}; +var _hgPriceConfig = { + 'buckets': [{ + 'max': 20, + 'increment': 0.01 + }] +}; +var _densePriceConfig = { + 'buckets': [{ + 'max': 3, + 'increment': 0.01 + }, { + 'max': 8, + 'increment': 0.05 + }, { + 'max': 20, + 'increment': 0.5 + }] +}; +var _autoPriceConfig = { + 'buckets': [{ + 'max': 5, + 'increment': 0.05 + }, { + 'max': 10, + 'increment': 0.1 + }, { + '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 bucketFloor = 0; + var bucket = __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___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 >= bucketFloor * granularityMultiplier) { + bucket.min = bucketFloor; + return bucket; + } else { + bucketFloor = bucket.max; + } + }); + + if (bucket) { + cpmStr = getCpmTarget(cpm, bucket, 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 (!bucket.max || !bucket.increment) { + isValid = false; + } + }); + return isValid; +} + +function getCpmTarget(cpm, bucket, granularityMultiplier) { + var precision = typeof bucket.precision !== 'undefined' ? bucket.precision : _defaultPrecision; + var increment = bucket.increment * granularityMultiplier; + var bucketMin = bucket.min * granularityMultiplier; // start increments at the bucket min and then add bucket min back to arrive at the correct rounding + // note - we're padding the values to avoid using decimals in the math prior to flooring + // this is done as JS can return values slightly below the expected mark which would skew the price bucket target + // (eg 4.01 / 0.01 = 400.99999999999994) + // min precison should be 2 to move decimal place over. + + var pow = Math.pow(10, precision + 2); + var cpmToFloor = (cpm * pow - bucketMin * pow) / (increment * pow); + var cpmTarget = Math.floor(cpmToFloor) * increment + bucketMin; // force to 10 decimal places to deal with imprecise decimal/binary conversions + // (for example 0.1 * 3 = 0.30000000000000004) + + cpmTarget = Number(cpmTarget.toFixed(10)); + return cpmTarget.toFixed(precision); +} + + + +/***/ }), + +/***/ 46: +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), + +/***/ 466: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(467); + +module.exports = parent; + + +/***/ }), + +/***/ 467: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(468); +var path = __webpack_require__(42); + +module.exports = path.Number.isInteger; + + +/***/ }), + +/***/ 468: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var isInteger = __webpack_require__(469); + +// `Number.isInteger` method +// https://tc39.github.io/ecma262/#sec-number.isinteger +$({ target: 'Number', stat: true }, { + isInteger: isInteger +}); + + +/***/ }), + +/***/ 469: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +var floor = Math.floor; + +// `Number.isInteger` method implementation +// https://tc39.github.io/ecma262/#sec-number.isinteger +module.exports = function isInteger(it) { + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + + +/***/ }), + +/***/ 47: +/***/ (function(module, exports, __webpack_require__) { + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(70); +var requireObjectCoercible = __webpack_require__(49); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), + +/***/ 48: +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), + +/***/ 49: +/***/ (function(module, exports) { + +// `RequireObjectCoercible` abstract operation +// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), + +/***/ 5: +/***/ (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"},"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","NO_BID":"noBid","BID_WON":"bidWon","BIDDER_DONE":"bidderDone","SET_TARGETING":"setTargeting","BEFORE_REQUEST_BIDS":"beforeRequestBids","REQUEST_BIDS":"requestBids","ADD_AD_UNITS":"addAdUnits","AD_RENDER_FAILED":"adRenderFailed","BIDDER_BLOCKED":"bidderBlocked"},"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":{"BIDDER":"hb_bidder","AD_ID":"hb_adid","PRICE_BUCKET":"hb_pb","SIZE":"hb_size","DEAL":"hb_deal","SOURCE":"hb_source","FORMAT":"hb_format","UUID":"hb_uuid","CACHE_ID":"hb_cache_id","CACHE_HOST":"hb_cache_host"},"NATIVE_KEYS":{"title":"hb_native_title","body":"hb_native_body","body2":"hb_native_body2","privacyLink":"hb_native_privacy","privacyIcon":"hb_native_privicon","sponsoredBy":"hb_native_brand","image":"hb_native_image","icon":"hb_native_icon","clickUrl":"hb_native_linkurl","displayUrl":"hb_native_displayurl","cta":"hb_native_cta","rating":"hb_native_rating","address":"hb_native_address","downloads":"hb_native_downloads","likes":"hb_native_likes","phone":"hb_native_phone","price":"hb_native_price","salePrice":"hb_native_saleprice"},"S2S":{"SRC":"s2s","DEFAULT_ENDPOINT":"https://prebid.adnxs.com/pbs/v1/openrtb2/auction","SYNCED_BIDDERS_KEY":"pbjsSyncs"},"BID_STATUS":{"BID_TARGETING_SET":"targetingSet","RENDERED":"rendered","BID_REJECTED":"bidRejected"}} + +/***/ }), + +/***/ 50: +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(58); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.github.io/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), + +/***/ 51: +/***/ (function(module, exports) { + +module.exports = function () { /* empty */ }; + + +/***/ }), + +/***/ 52: +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(25); + +module.exports = getBuiltIn; + + +/***/ }), + +/***/ 53: +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), + +/***/ 54: +/***/ (function(module, exports, __webpack_require__) { + +var NATIVE_WEAK_MAP = __webpack_require__(113); +var global = __webpack_require__(22); +var isObject = __webpack_require__(23); +var createNonEnumerableProperty = __webpack_require__(29); +var objectHas = __webpack_require__(24); +var sharedKey = __webpack_require__(65); +var hiddenKeys = __webpack_require__(53); + +var WeakMap = global.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP) { + var store = new WeakMap(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), + +/***/ 55: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +// `ToPrimitive` abstract operation +// https://tc39.github.io/ecma262/#sec-toprimitive +// 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 (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), + +/***/ 56: +/***/ (function(module, exports, __webpack_require__) { + +var bind = __webpack_require__(21); +var IndexedObject = __webpack_require__(70); +var toObject = __webpack_require__(57); +var toLength = __webpack_require__(50); +var arraySpeciesCreate = __webpack_require__(101); + +var push = [].push; + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation +var createMethod = function (TYPE) { + 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; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push.call(target, value); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6) +}; + + +/***/ }), + +/***/ 57: +/***/ (function(module, exports, __webpack_require__) { + +var requireObjectCoercible = __webpack_require__(49); + +// `ToObject` abstract operation +// https://tc39.github.io/ecma262/#sec-toobject +module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); +}; + + +/***/ }), + +/***/ 58: +/***/ (function(module, exports) { + +var ceil = Math.ceil; +var floor = Math.floor; + +// `ToInteger` abstract operation +// https://tc39.github.io/ecma262/#sec-tointeger +module.exports = function (argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); +}; + + +/***/ }), + +/***/ 59: +/***/ (function(module, exports) { + +var id = 0; +var postfix = Math.random(); + +module.exports = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); +}; + + +/***/ }), + +/***/ 60: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var fails = __webpack_require__(28); +var has = __webpack_require__(24); + +var defineProperty = Object.defineProperty; +var cache = {}; + +var thrower = function (it) { throw it; }; + +module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return cache[METHOD_NAME] = !!method && !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + + if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + }); +}; + + +/***/ }), + +/***/ 61: +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(62); +var Iterators = __webpack_require__(37); +var wellKnownSymbol = __webpack_require__(19); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + + +/***/ }), + +/***/ 62: +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(63); +var classofRaw = __webpack_require__(48); +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; +}; + + +/***/ }), + +/***/ 63: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), + +/***/ 64: +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(63); +var defineProperty = __webpack_require__(31).f; +var createNonEnumerableProperty = __webpack_require__(29); +var has = __webpack_require__(24); +var toString = __webpack_require__(112); +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC, SET_METHOD) { + if (it) { + var target = STATIC ? it : it.prototype; + if (!has(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, 'toString', toString); + } + } +}; + + +/***/ }), + +/***/ 65: +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(73); +var uid = __webpack_require__(59); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), + +/***/ 66: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var createIteratorConstructor = __webpack_require__(121); +var getPrototypeOf = __webpack_require__(86); +var setPrototypeOf = __webpack_require__(123); +var setToStringTag = __webpack_require__(64); +var createNonEnumerableProperty = __webpack_require__(29); +var redefine = __webpack_require__(84); +var wellKnownSymbol = __webpack_require__(19); +var IS_PURE = __webpack_require__(16); +var Iterators = __webpack_require__(37); +var IteratorsCore = __webpack_require__(85); + +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return nativeIterator.call(this); }; + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); + } + Iterators[NAME] = defaultIterator; + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + return methods; +}; + + +/***/ }), + +/***/ 67: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return adunitCounter; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); + +var adUnits = {}; + +function ensureAdUnit(adunit, bidderCode) { + var adUnit = adUnits[adunit] = adUnits[adunit] || { + bidders: {} + }; + + if (bidderCode) { + return adUnit.bidders[bidderCode] = adUnit.bidders[bidderCode] || {}; + } + + return adUnit; +} + +function incrementAdUnitCount(adunit, counter, bidderCode) { + var adUnit = ensureAdUnit(adunit, bidderCode); + adUnit[counter] = (adUnit[counter] || 0) + 1; + return adUnit[counter]; +} +/** + * Increments and returns current Adunit counter + * @param {string} adunit id + * @returns {number} current adunit count + */ + + +function incrementRequestsCounter(adunit) { + return incrementAdUnitCount(adunit, 'requestsCounter'); +} +/** + * Increments and returns current Adunit requests counter for a bidder + * @param {string} adunit id + * @param {string} bidderCode code + * @returns {number} current adunit bidder requests count + */ + + +function incrementBidderRequestsCounter(adunit, bidderCode) { + return incrementAdUnitCount(adunit, 'requestsCounter', bidderCode); +} +/** + * Increments and returns current Adunit wins counter for a bidder + * @param {string} adunit id + * @param {string} bidderCode code + * @returns {number} current adunit bidder requests count + */ + + +function incrementBidderWinsCounter(adunit, bidderCode) { + return incrementAdUnitCount(adunit, 'winsCounter', bidderCode); +} +/** + * Returns current Adunit counter + * @param {string} adunit id + * @returns {number} current adunit count + */ + + +function getRequestsCounter(adunit) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnits, "".concat(adunit, ".requestsCounter")) || 0; +} +/** + * Returns current Adunit requests counter for a specific bidder code + * @param {string} adunit id + * @param {string} bidder code + * @returns {number} current adunit bidder requests count + */ + + +function getBidderRequestsCounter(adunit, bidder) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnits, "".concat(adunit, ".bidders.").concat(bidder, ".requestsCounter")) || 0; +} +/** + * Returns current Adunit requests counter for a specific bidder code + * @param {string} adunit id + * @param {string} bidder code + * @returns {number} current adunit bidder requests count + */ + + +function getBidderWinsCounter(adunit, bidder) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnits, "".concat(adunit, ".bidders.").concat(bidder, ".winsCounter")) || 0; +} +/** + * A module which counts how many times an adunit was called + * @module adunitCounter + */ + + +var adunitCounter = { + incrementRequestsCounter: incrementRequestsCounter, + incrementBidderRequestsCounter: incrementBidderRequestsCounter, + incrementBidderWinsCounter: incrementBidderWinsCounter, + getRequestsCounter: getRequestsCounter, + getBidderRequestsCounter: getBidderRequestsCounter, + getBidderWinsCounter: getBidderWinsCounter +}; + + +/***/ }), + +/***/ 68: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "adUnitSetupChecks", function() { return adUnitSetupChecks; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAdUnitSetup", function() { return checkAdUnitSetup; }); +/* harmony export (immutable) */ __webpack_exports__["executeStorageCallbacks"] = executeStorageCallbacks; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__secureCreatives_js__ = __webpack_require__(223); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__userSync_js__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__targeting_js__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__debugging_js__ = __webpack_require__(224); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__adUnits_js__ = __webpack_require__(67); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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 _extends() { _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; }; return _extends.apply(this, arguments); } + +/** @module pbjs */ + + + + + + + + + + + + + + +var pbjs = Object(__WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__["a" /* getGlobal */])(); + +var CONSTANTS = __webpack_require__(5); + +var utils = __webpack_require__(0); + +var adapterManager = __webpack_require__(7).default; + +var events = __webpack_require__(8); + +var triggerUserSyncs = __WEBPACK_IMPORTED_MODULE_3__userSync_js__["a" /* userSync */].triggerUserSyncs; +/* private variables */ + +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 +}; // initialize existing debugging sessions if present + +Object(__WEBPACK_IMPORTED_MODULE_8__debugging_js__["a" /* sessionLoader */])(); +/* Public vars */ + +pbjs.bidderSettings = pbjs.bidderSettings || {}; // let the world know we are loaded + +pbjs.libLoaded = true; // version auto generated from build + +pbjs.version = "v4.2.0"; +utils.logInfo("Prebid.js v4.2.0 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 = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsRequested().map(function (bidSet) { + return bidSet.bids.map(function (bid) { + return bid.adUnitCode; + }); + }).reduce(__WEBPACK_IMPORTED_MODULE_1__utils_js__["flatten"]).filter(__WEBPACK_IMPORTED_MODULE_1__utils_js__["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; + } +} + +function validateSizes(sizes, targLength) { + var cleanSizes = []; + + if (utils.isArray(sizes) && (targLength ? sizes.length === targLength : sizes.length > 0)) { + // check if an array of arrays or array of numbers + if (sizes.every(function (sz) { + return Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isArrayOfNums"])(sz, 2); + })) { + cleanSizes = sizes; + } else if (Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isArrayOfNums"])(sizes, 2)) { + cleanSizes.push(sizes); + } + } + + return cleanSizes; +} + +function validateBannerMediaType(adUnit) { + var validatedAdUnit = utils.deepClone(adUnit); + var banner = validatedAdUnit.mediaTypes.banner; + var bannerSizes = validateSizes(banner.sizes); + + if (bannerSizes.length > 0) { + banner.sizes = bannerSizes; // Deprecation Warning: This property will be deprecated in next release in favor of adUnit.mediaTypes.banner.sizes + + validatedAdUnit.sizes = bannerSizes; + } else { + utils.logError('Detected a mediaTypes.banner object without a proper sizes field. Please ensure the sizes are listed like: [[300, 250], ...]. Removing invalid mediaTypes.banner object from request.'); + delete validatedAdUnit.mediaTypes.banner; + } + + return validatedAdUnit; +} + +function validateVideoMediaType(adUnit) { + var validatedAdUnit = utils.deepClone(adUnit); + var video = validatedAdUnit.mediaTypes.video; + + if (video.playerSize) { + var tarPlayerSizeLen = typeof video.playerSize[0] === 'number' ? 2 : 1; + var videoSizes = validateSizes(video.playerSize, tarPlayerSizeLen); + + if (videoSizes.length > 0) { + if (tarPlayerSizeLen === 2) { + utils.logInfo('Transforming video.playerSize from [640,480] to [[640,480]] so it\'s in the proper format.'); + } + + video.playerSize = videoSizes; // Deprecation Warning: This property will be deprecated in next release in favor of adUnit.mediaTypes.video.playerSize + + validatedAdUnit.sizes = videoSizes; + } 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 validatedAdUnit.mediaTypes.video.playerSize; + } + } + + return validatedAdUnit; +} + +function validateNativeMediaType(adUnit) { + var validatedAdUnit = utils.deepClone(adUnit); + var native = validatedAdUnit.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 validatedAdUnit.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 validatedAdUnit.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 validatedAdUnit.mediaTypes.native.icon.sizes; + } + + return validatedAdUnit; +} + +var adUnitSetupChecks = { + validateBannerMediaType: validateBannerMediaType, + validateVideoMediaType: validateVideoMediaType, + validateNativeMediaType: validateNativeMediaType, + validateSizes: validateSizes +}; +var checkAdUnitSetup = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('sync', function (adUnits) { + var validatedAdUnits = []; + adUnits.forEach(function (adUnit) { + var mediaTypes = adUnit.mediaTypes; + var validatedBanner, validatedVideo, validatedNative; + + if (!mediaTypes || Object.keys(mediaTypes).length === 0) { + utils.logError("Detected adUnit.code '".concat(adUnit.code, "' did not have a 'mediaTypes' object defined. This is a required field for the auction, so this adUnit has been removed.")); + return; + } + + if (mediaTypes.banner) { + validatedBanner = validateBannerMediaType(adUnit); + } + + if (mediaTypes.video) { + validatedVideo = validatedBanner ? validateVideoMediaType(validatedBanner) : validateVideoMediaType(adUnit); + } + + if (mediaTypes.native) { + validatedNative = validatedVideo ? validateNativeMediaType(validatedVideo) : validatedBanner ? validateNativeMediaType(validatedBanner) : validateNativeMediaType(adUnit); + } + + var validatedAdUnit = _extends({}, validatedBanner, validatedVideo, validatedNative); + + validatedAdUnits.push(validatedAdUnit); + }); + return validatedAdUnits; +}, 'checkAdUnitSetup'); /// /////////////////////////////// +// // +// 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 __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getAllTargeting(adUnitCode); +}; + +function getBids(type) { + var responses = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */][type]().filter(utils.bind.call(__WEBPACK_IMPORTED_MODULE_1__utils_js__["adUnitsFilter"], this, __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getAdUnitCodes())); // find the last auction id to get responses for most recent auction only + + var currentAuctionId = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getLastAuctionId(); + return responses.map(function (bid) { + return bid.adUnitCode; + }).filter(__WEBPACK_IMPORTED_MODULE_1__utils_js__["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 + }); + }).reduce(function (a, b) { + return _extends(a, b); + }, {}); +} +/** + * This function returns the bids requests involved in an auction but not bid on + * @alias module:pbjs.getNoBids + * @return {Object} map | object that contains the bidRequests + */ + + +pbjs.getNoBids = function () { + utils.logInfo("Invoking pbjs.getNoBids", arguments); + return getBids('getNoBids'); +}; +/** + * 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); + return getBids('getBidsReceived'); +}; +/** + * Returns bidResponses for the specified adUnitCode + * @param {string} adUnitCode adUnitCode + * @alias module:pbjs.getBidResponsesForAdUnitCode + * @return {Object} bidResponse object + */ + + +pbjs.getBidResponsesForAdUnitCode = function (adUnitCode) { + var bids = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.adUnitCode === adUnitCode; + }); + return { + bids: bids + }; +}; +/** + * Set query string targeting on one or more GPT ad units. + * @param {(string|string[])} adUnit a single `adUnit.code` or multiple. + * @param {function(object)} customSlotMatching gets a GoogleTag slot and returns a filter function for adUnitCode, so you can decide to match on either eg. return slot => { return adUnitCode => { return slot.getSlotElementId() === 'myFavoriteDivId'; } }; + * @alias module:pbjs.setTargetingForGPTAsync + */ + + +pbjs.setTargetingForGPTAsync = function (adUnit, customSlotMatching) { + utils.logInfo("Invoking pbjs.setTargetingForGPTAsync", arguments); + + if (!Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isGptPubadsDefined"])()) { + utils.logError('window.googletag is not defined on the page'); + return; + } // get our ad unit codes + + + var targetingSet = __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getAllTargeting(adUnit); // first reset any old targeting + + __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].resetPresetTargeting(adUnit, customSlotMatching); // now set new targeting keys + + __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].setTargetingForGPT(targetingSet, customSlotMatching); + Object.keys(targetingSet).forEach(function (adUnitCode) { + Object.keys(targetingSet[adUnitCode]).forEach(function (targetingKey) { + if (targetingKey === 'hb_adid') { + __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].setStatusForBids(targetingSet[adUnitCode][targetingKey], CONSTANTS.BID_STATUS.BID_TARGETING_SET); + } + }); + }); // emit event + + events.emit(SET_TARGETING, targetingSet); +}; +/** + * 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). + * @param {(string|string[])} adUnitCode adUnitCode or array of adUnitCodes + * @alias module:pbjs.setTargetingForAst + */ + + +pbjs.setTargetingForAst = function (adUnitCodes) { + utils.logInfo("Invoking pbjs.setTargetingForAn", arguments); + + if (!__WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].isApntagDefined()) { + utils.logError('window.apntag is not defined on the page'); + return; + } + + __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].setTargetingForAst(adUnitCodes); // emit event + + events.emit(SET_TARGETING, __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getAllTargeting()); +}; + +function emitAdRenderFail(_ref2) { + var reason = _ref2.reason, + message = _ref2.message, + bid = _ref2.bid, + id = _ref2.id; + var data = { + reason: reason, + message: message + }; + if (bid) data.bid = bid; + if (id) data.adId = id; + 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 = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].findBidByAdId(id); + + if (bid) { + // 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 + + __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* 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 ".concat(bid.creativeId, " served by ").concat(bid.bidder, " Prebid.js Header Bidding")); + utils.insertElement(creativeComment, doc, 'body'); + + if (Object(__WEBPACK_IMPORTED_MODULE_11__Renderer_js__["c" /* isRendererRequired */])(renderer)) { + Object(__WEBPACK_IMPORTED_MODULE_11__Renderer_js__["b" /* executeRenderer */])(renderer, bid); + } else if (doc === document && !utils.inIframe() || mediaType === 'video') { + var message = "Error trying to write ad. Ad render call ad id ".concat(id, " was prevented from writing to the main document."); + emitAdRenderFail({ + reason: PREVENT_WRITING_ON_MAIN_DOCUMENT, + message: message, + bid: bid, + id: id + }); + } else if (ad) { + // will check if browser is firefox and below version 67, if so execute special doc.open() + // for details see: https://github.com/prebid/Prebid.js/pull/3524 + // TODO remove this browser specific code at later date (when Firefox < 67 usage is mostly gone) + if (navigator.userAgent && navigator.userAgent.toLowerCase().indexOf('firefox/') > -1) { + var firefoxVerRegx = /firefox\/([\d\.]+)/; + var firefoxVer = navigator.userAgent.toLowerCase().match(firefoxVerRegx)[1]; // grabs the text in the 1st matching group + + if (firefoxVer && parseInt(firefoxVer, 10) < 67) { + doc.open('text/html', 'replace'); + } + } + + 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: ".concat(id); + + emitAdRenderFail({ + reason: NO_AD, + message: _message, + bid: bid, + id: id + }); + } + } else { + var _message2 = "Error trying to write ad. Cannot find ad by given id : ".concat(id); + + emitAdRenderFail({ + reason: CANNOT_FIND_AD, + message: _message2, + id: id + }); + } + } catch (e) { + var _message3 = "Error trying to write ad Id :".concat(id, " to the page:").concat(e.message); + + emitAdRenderFail({ + reason: EXCEPTION, + message: _message3, + id: id + }); + } + } else { + var _message4 = "Error trying to write ad Id :".concat(id, " to the page. Missing document or adId"); + + emitAdRenderFail({ + reason: MISSING_DOC_OR_ADID, + message: _message4, + id: id + }); + } +}; +/** + * Remove adUnit from the $$PREBID_GLOBAL$$ configuration, if there are no addUnitCode(s) it will remove all + * @param {string| Array} adUnitCode the adUnitCode(s) to remove + * @alias module:pbjs.removeAdUnit + */ + + +pbjs.removeAdUnit = function (adUnitCode) { + utils.logInfo("Invoking pbjs.removeAdUnit", arguments); + + if (!adUnitCode) { + pbjs.adUnits = []; + return; + } + + var adUnitCodes; + + if (utils.isArray(adUnitCode)) { + adUnitCodes = adUnitCode; + } else { + adUnitCodes = [adUnitCode]; + } + + adUnitCodes.forEach(function (adUnitCode) { + for (var i = pbjs.adUnits.length - 1; i >= 0; 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 + * @param {String} requestOptions.auctionId + * @alias module:pbjs.requestBids + */ + + +pbjs.requestBids = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function () { + var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + bidsBackHandler = _ref3.bidsBackHandler, + timeout = _ref3.timeout, + adUnits = _ref3.adUnits, + adUnitCodes = _ref3.adUnitCodes, + labels = _ref3.labels, + auctionId = _ref3.auctionId; + + events.emit(REQUEST_BIDS); + var cbTimeout = timeout || __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].getConfig('bidderTimeout'); + adUnits = adUnits || pbjs.adUnits; + utils.logInfo("Invoking pbjs.requestBids", arguments); + adUnits = checkAdUnitSetup(adUnits); + + if (adUnitCodes && adUnitCodes.length) { + // if specific adUnitCodes supplied filter adUnits for those codes + adUnits = adUnits.filter(function (unit) { + return __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___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 allBidders = adUnit.bids.map(function (bid) { + return bid.bidder; + }); + var bidderRegistry = adapterManager.bidderRegistry; + var s2sConfig = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].getConfig('s2sConfig'); + var s2sBidders = s2sConfig && s2sConfig.bidders; + var bidders = s2sBidders ? allBidders.filter(function (bidder) { + return !__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default()(s2sBidders, bidder); + }) : allBidders; + adUnit.transactionId = utils.generateUUID(); + 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 __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___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; + }); + } else { + __WEBPACK_IMPORTED_MODULE_10__adUnits_js__["a" /* adunitCounter */].incrementBidderRequestsCounter(adUnit.code, bidder); + } + }); + __WEBPACK_IMPORTED_MODULE_10__adUnits_js__["a" /* adunitCounter */].incrementRequestsCounter(adUnit.code); + }); + + 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 = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].createAuction({ + adUnits: adUnits, + adUnitCodes: adUnitCodes, + callback: bidsBackHandler, + cbTimeout: cbTimeout, + labels: labels, + auctionId: auctionId + }); + var adUnitsLen = adUnits.length; + + if (adUnitsLen > 15) { + utils.logInfo("Current auction ".concat(auction.getAuctionId(), " contains ").concat(adUnitsLen, " adUnits."), adUnits); + } + + adUnitCodes.forEach(function (code) { + return __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].setLatestAuctionForAdUnit(code, auction.getAuctionId()); + }); + auction.callBids(); +}); +function executeStorageCallbacks(fn, reqBidsConfigObj) { + runAll(__WEBPACK_IMPORTED_MODULE_13__storageManager_js__["c" /* storageCallbacks */]); + fn.call(this, reqBidsConfigObj); + + function runAll(queue) { + var queued; + + while (queued = queue.shift()) { + queued(); + } + } +} // This hook will execute all storage callbacks which were registered before gdpr enforcement hook was added. Some bidders, user id modules use storage functions when module is parsed but gdpr enforcement hook is not added at that stage as setConfig callbacks are yet to be called. Hence for such calls we execute all the stored callbacks just before requestBids. At this hook point we will know for sure that gdprEnforcement module is added or not + +pbjs.requestBids.before(executeStorageCallbacks, 49); +/** + * + * 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)) { + pbjs.adUnits.push.apply(pbjs.adUnits, adUnitArr); + } else if (_typeof(adUnitArr) === 'object') { + 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 `$$PREBID_GLOBAL$$.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 Object(__WEBPACK_IMPORTED_MODULE_12__bidfactory_js__["a" /* createBid */])(statusCode); +}; +/** + * 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, options) { + utils.logInfo("Invoking pbjs.aliasBidder", arguments); + + if (bidderCode && alias) { + adapterManager.aliasBidAdapter(bidderCode, alias, options); + } 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: `"",`. + * @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 been rendered. Useful for [troubleshooting your integration](http://prebid.org/dev-docs/prebid-troubleshooting-guide.html). + * @return {Array} A list of bids that have been rendered. +*/ + + +pbjs.getAllWinningBids = function () { + return __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getAllWinningBids(); +}; +/** + * Get all of the bids that have won their respective auctions. + * @return {Array} A list of bids that have won their respective auctions. + */ + + +pbjs.getAllPrebidWinningBids = function () { + return __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.status === CONSTANTS.BID_STATUS.BID_TARGETING_SET; + }); +}; +/** + * 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 __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getWinningBids(adUnitCode); +}; +/** + * Mark the winning bid as used, should only be used in conjunction with video + * @typedef {Object} MarkBidRequest + * @property {string} adUnitCode The ad unit code + * @property {string} adId The id representing the ad we want to mark + * + * @alias module:pbjs.markWinningBidAsUsed +*/ + + +pbjs.markWinningBidAsUsed = function (markBidRequest) { + var bids = []; + + if (markBidRequest.adUnitCode && markBidRequest.adId) { + bids = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.adId === markBidRequest.adId && bid.adUnitCode === markBidRequest.adUnitCode; + }); + } else if (markBidRequest.adUnitCode) { + bids = __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getWinningBids(markBidRequest.adUnitCode); + } else if (markBidRequest.adId) { + bids = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.adId === markBidRequest.adId; + }); + } else { + utils.logWarn('Inproper usage of markWinningBidAsUsed. It\'ll need an adUnitCode and/or adId to function.'); + } + + if (bids.length > 0) { + bids[0].status = CONSTANTS.BID_STATUS.RENDERED; + } +}; +/** + * Get Prebid config options + * @param {Object} options + * @alias module:pbjs.getConfig + */ + + +pbjs.getConfig = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* 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 {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 = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].setConfig; +pbjs.setBidderConfig = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].setBidderConfig; +pbjs.que.push(function () { + return Object(__WEBPACK_IMPORTED_MODULE_2__secureCreatives_js__["a" /* 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: + * + * + * + * + * 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 () { + __WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */].ready(); + processQueue(pbjs.que); + processQueue(pbjs.cmd); +}; + +/* harmony default export */ __webpack_exports__["default"] = (pbjs); + +/***/ }), + +/***/ 69: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = registerVideoSupport; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); + + +var prebid = Object(__WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__["a" /* 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 + * $$PREBID_GLOBAL$$.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] || {}; + Object.keys(videoSupport).forEach(function (key) { + if (prebid.adServers[name][key]) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])("Attempting to add an already registered function property ".concat(key, " for AdServer ").concat(name, ".")); + return; + } + + prebid.adServers[name][key] = videoSupport[key]; + }); +} + +/***/ }), + +/***/ 7: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gdprDataHandler", function() { return gdprDataHandler; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uspDataHandler", function() { return uspDataHandler; }); +/* harmony export (immutable) */ __webpack_exports__["setS2STestingModule"] = setS2STestingModule; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__ = __webpack_require__(91); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__adUnits_js__ = __webpack_require__(67); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__refererDetection_js__ = __webpack_require__(30); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** @module adaptermanger */ + + + + + + + + + + + + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var events = __webpack_require__(8); + +var s2sTestingModule; // store s2sTesting module if it's loaded + +var adapterManager = {}; + +var _bidderRegistry = adapterManager.bidderRegistry = {}; + +var _aliasRegistry = adapterManager.aliasRegistry = {}; + +var _s2sConfig = {}; +__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* 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} labels the labels listed on the bidder or adUnit + * @property {Array} activeLabels the labels specified as being active by requestBids + */ + +function getBids(_ref) { + var bidderCode = _ref.bidderCode, + auctionId = _ref.auctionId, + bidderRequestId = _ref.bidderRequestId, + adUnits = _ref.adUnits, + labels = _ref.labels, + src = _ref.src; + return adUnits.reduce(function (result, adUnit) { + var _resolveStatus = Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["b" /* resolveStatus */])(Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["a" /* getLabels */])(adUnit, labels), adUnit.mediaTypes, adUnit.sizes), + active = _resolveStatus.active, + filteredMediaTypes = _resolveStatus.mediaTypes, + filterResults = _resolveStatus.filterResults; + + if (!active) { + utils.logInfo("Size mapping disabled adUnit \"".concat(adUnit.code, "\"")); + } else if (filterResults) { + utils.logInfo("Size mapping filtered adUnit \"".concat(adUnit.code, "\" banner sizes from "), filterResults.before, 'to ', filterResults.after); + } + + if (active) { + result.push(adUnit.bids.filter(function (bid) { + return bid.bidder === bidderCode; + }).reduce(function (bids, bid) { + var nativeParams = adUnit.nativeParams || utils.deepAccess(adUnit, 'mediaTypes.native'); + + if (nativeParams) { + bid = _extends({}, bid, { + nativeParams: Object(__WEBPACK_IMPORTED_MODULE_2__native_js__["g" /* processNativeAdUnitParams */])(nativeParams) + }); + } + + bid = _extends({}, bid, Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getDefinedParams"])(adUnit, ['fpd', 'mediaType', 'renderer', 'storedAuctionResponse'])); + + var _resolveStatus2 = Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["b" /* resolveStatus */])(Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["a" /* getLabels */])(bid, labels), filteredMediaTypes), + active = _resolveStatus2.active, + mediaTypes = _resolveStatus2.mediaTypes, + filterResults = _resolveStatus2.filterResults; + + if (!active) { + utils.logInfo("Size mapping deactivated adUnit \"".concat(adUnit.code, "\" bidder \"").concat(bid.bidder, "\"")); + } else if (filterResults) { + utils.logInfo("Size mapping filtered adUnit \"".concat(adUnit.code, "\" bidder \"").concat(bid.bidder, "\" banner sizes from "), filterResults.before, 'to ', filterResults.after); + } + + if (utils.isValidMediaTypes(mediaTypes)) { + bid = _extends({}, bid, { + mediaTypes: mediaTypes + }); + } else { + utils.logError("mediaTypes is not correctly configured for adunit ".concat(adUnit.code)); + } + + if (active) { + bids.push(_extends({}, bid, { + adUnitCode: adUnit.code, + transactionId: adUnit.transactionId, + sizes: utils.deepAccess(mediaTypes, 'banner.sizes') || utils.deepAccess(mediaTypes, 'video.playerSize') || [], + bidId: bid.bid_id || utils.getUniqueIdentifierStr(), + bidderRequestId: bidderRequestId, + auctionId: auctionId, + src: src, + bidRequestsCount: __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].getRequestsCounter(adUnit.code), + bidderRequestsCount: __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].getBidderRequestsCounter(adUnit.code, bid.bidder), + bidderWinsCount: __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].getBidderWinsCounter(adUnit.code, bid.bidder) + })); + } + + return bids; + }, [])); + } + + return result; + }, []).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).filter(function (val) { + return val !== ''; + }); +} + +var hookedGetBids = Object(__WEBPACK_IMPORTED_MODULE_6__hook_js__["b" /* hook */])('sync', getBids, 'getBids'); + +function getAdUnitCopyForPrebidServer(adUnits) { + var adaptersServerSide = _s2sConfig.bidders; + var adUnitsCopy = utils.deepClone(adUnits); + adUnitsCopy.forEach(function (adUnit) { + // filter out client side bids + adUnit.bids = adUnit.bids.filter(function (bid) { + return __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___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; +} + +var gdprDataHandler = { + consentData: null, + setConsentData: function setConsentData(consentInfo) { + gdprDataHandler.consentData = consentInfo; + }, + getConsentData: function getConsentData() { + return gdprDataHandler.consentData; + } +}; +var uspDataHandler = { + consentData: null, + setConsentData: function setConsentData(consentInfo) { + uspDataHandler.consentData = consentInfo; + }, + getConsentData: function getConsentData() { + return uspDataHandler.consentData; + } +}; +adapterManager.makeBidRequests = Object(__WEBPACK_IMPORTED_MODULE_6__hook_js__["b" /* hook */])('sync', function (adUnits, auctionStart, auctionId, cbTimeout, labels) { + /** + * emit and pass adunits for external modification + * @see {@link https://github.com/prebid/Prebid.js/issues/4149|Issue} + */ + events.emit(CONSTANTS.EVENTS.BEFORE_REQUEST_BIDS, adUnits); + var bidRequests = []; + var bidderCodes = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidderCodes"])(adUnits); + + if (__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('bidderSequence') === __WEBPACK_IMPORTED_MODULE_5__config_js__["a" /* RANDOM */]) { + bidderCodes = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["shuffle"])(bidderCodes); + } + + var refererInfo = Object(__WEBPACK_IMPORTED_MODULE_10__refererDetection_js__["a" /* getRefererInfo */])(); + var clientBidderCodes = bidderCodes; + var clientTestAdapters = []; + + if (_s2sConfig.enabled) { + // if s2sConfig.bidderControl testing is turned on + if (doingS2STesting()) { + // get all adapters doing client testing + var bidderMap = s2sTestingModule.getSourceBidderMap(adUnits); + clientTestAdapters = bidderMap[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 !__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(adaptersServerSide, elm) || __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(clientTestAdapters, elm); + }); + + var adUnitsContainServerRequests = function adUnitsContainServerRequests(adUnits) { + return Boolean(__WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adUnits, function (adUnit) { + return __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adUnit.bids, function (bid) { + return (bid.bidSource || _s2sConfig.bidderControl && _s2sConfig.bidderControl[bid.bidder]) && bid.finalSource === s2sTestingModule.SERVER; + }); + })); + }; + + if (isTestingServerOnly() && adUnitsContainServerRequests(adUnits)) { + clientBidderCodes.length = 0; + } + + 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, + bids: hookedGetBids({ + bidderCode: bidderCode, + auctionId: auctionId, + bidderRequestId: bidderRequestId, + 'adUnits': utils.deepClone(adUnitsS2SCopy), + labels: labels, + src: CONSTANTS.S2S.SRC + }), + auctionStart: auctionStart, + timeout: _s2sConfig.timeout, + src: CONSTANTS.S2S.SRC, + refererInfo: refererInfo + }; + + if (bidderRequest.bids.length !== 0) { + bidRequests.push(bidderRequest); + } + }); // update the s2sAdUnits object and remove all bids that didn't pass sizeConfig/label checks from getBids() + // this is to keep consistency and only allow bids/adunits that passed the checks to go to pbs + + adUnitsS2SCopy.forEach(function (adUnitCopy) { + var validBids = adUnitCopy.bids.filter(function (adUnitBid) { + return __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidRequests, function (request) { + return __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(request.bids, function (reqBid) { + return reqBid.bidId === adUnitBid.bid_id; + }); + }); + }); + adUnitCopy.bids = validBids; + }); + bidRequests.forEach(function (request) { + request.adUnitsS2SCopy = adUnitsS2SCopy.filter(function (adUnitCopy) { + return adUnitCopy.bids.length > 0; + }); + }); + } // client adapters + + + var adUnitsClientCopy = getAdUnitCopyForClientAdapters(adUnits); + clientBidderCodes.forEach(function (bidderCode) { + var bidderRequestId = utils.getUniqueIdentifierStr(); + var bidderRequest = { + bidderCode: bidderCode, + auctionId: auctionId, + bidderRequestId: bidderRequestId, + bids: hookedGetBids({ + bidderCode: bidderCode, + auctionId: auctionId, + bidderRequestId: bidderRequestId, + 'adUnits': utils.deepClone(adUnitsClientCopy), + labels: labels, + src: 'client' + }), + auctionStart: auctionStart, + timeout: cbTimeout, + refererInfo: refererInfo + }; + var adapter = _bidderRegistry[bidderCode]; + + if (!adapter) { + utils.logError("Trying to make a request for bidder that does not exist: ".concat(bidderCode)); + } + + if (adapter && bidderRequest.bids && bidderRequest.bids.length !== 0) { + bidRequests.push(bidderRequest); + } + }); + + if (gdprDataHandler.getConsentData()) { + bidRequests.forEach(function (bidRequest) { + bidRequest['gdprConsent'] = gdprDataHandler.getConsentData(); + }); + } + + if (uspDataHandler.getConsentData()) { + bidRequests.forEach(function (bidRequest) { + bidRequest['uspConsent'] = uspDataHandler.getConsentData(); + }); + } + + return bidRequests; +}, 'makeBidRequests'); + +adapterManager.callBids = function (adUnits, bidRequests, addBidResponse, doneCb, requestCallbacks, requestBidsTimeout, onTimelyResponse) { + if (!bidRequests.length) { + utils.logWarn('callBids executed with no bidRequests. Were they filtered by labels or sizing?'); + return; + } + + 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) { + // s2s should get the same client side timeout as other client side requests. + var s2sAjax = Object(__WEBPACK_IMPORTED_MODULE_4__ajax_js__["b" /* ajaxBuilder */])(requestBidsTimeout, requestCallbacks ? { + request: requestCallbacks.request.bind(null, 's2s'), + done: requestCallbacks.done + } : undefined); + 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 = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["timestamp"])(); + return doneCb.bind(bidRequest); + }); // 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 ==== ".concat(adaptersServerSide.filter(function (adapter) { + return __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___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, function (adUnitCode, bid) { + var bidderRequest = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidderRequest"])(serverBidRequests, bid.bidderCode, adUnitCode); + + if (bidderRequest) { + addBidResponse.call(bidderRequest, adUnitCode, bid); + } + }, function () { + return doneCbs.forEach(function (done) { + return done(); + }); + }, s2sAjax); + } + } else { + utils.logError('missing ' + _s2sConfig.adapter); + } + } // handle client adapter requests + + + clientBidRequests.forEach(function (bidRequest) { + bidRequest.start = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["timestamp"])(); // TODO : Do we check for bid in pool from here and skip calling adapter again ? + + var adapter = _bidderRegistry[bidRequest.bidderCode]; + utils.logMessage("CALLING BIDDER ======= ".concat(bidRequest.bidderCode)); + events.emit(CONSTANTS.EVENTS.BID_REQUESTED, bidRequest); + var ajax = Object(__WEBPACK_IMPORTED_MODULE_4__ajax_js__["b" /* ajaxBuilder */])(requestBidsTimeout, requestCallbacks ? { + request: requestCallbacks.request.bind(null, bidRequest.bidderCode), + done: requestCallbacks.done + } : undefined); + var adapterDone = doneCb.bind(bidRequest); + + try { + __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].runWithBidder(bidRequest.bidderCode, __WEBPACK_IMPORTED_MODULE_0__utils_js__["bind"].call(adapter.callBids, adapter, bidRequest, addBidResponse.bind(bidRequest), adapterDone, ajax, onTimelyResponse, __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].callbackWithBidder(bidRequest.bidderCode))); + } catch (e) { + utils.logError("".concat(bidRequest.bidderCode, " Bid Adapter emitted an uncaught error when parsing their bidRequest"), { + e: e, + bidRequest: bidRequest + }); + adapterDone(); + } + }); +}; + +function doingS2STesting() { + return _s2sConfig && _s2sConfig.enabled && _s2sConfig.testing && s2sTestingModule; +} + +function isTestingServerOnly() { + return Boolean(doingS2STesting() && _s2sConfig.testServerOnly); +} + +; + +function getSupportedMediaTypes(bidderCode) { + var result = []; + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(adapterManager.videoAdapters, bidderCode)) result.push('video'); + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(__WEBPACK_IMPORTED_MODULE_2__native_js__["e" /* nativeAdapters */], bidderCode)) result.push('native'); + return result; +} + +adapterManager.videoAdapters = []; // added by adapterLoader for now + +adapterManager.registerBidAdapter = function (bidAdaptor, bidderCode) { + var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref2$supportedMediaT = _ref2.supportedMediaTypes, + supportedMediaTypes = _ref2$supportedMediaT === void 0 ? [] : _ref2$supportedMediaT; + + if (bidAdaptor && bidderCode) { + if (typeof bidAdaptor.callBids === 'function') { + _bidderRegistry[bidderCode] = bidAdaptor; + + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(supportedMediaTypes, 'video')) { + adapterManager.videoAdapters.push(bidderCode); + } + + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(supportedMediaTypes, 'native')) { + __WEBPACK_IMPORTED_MODULE_2__native_js__["e" /* 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'); + } +}; + +adapterManager.aliasBidAdapter = function (bidderCode, alias, options) { + var existingAlias = _bidderRegistry[alias]; + + if (typeof existingAlias === 'undefined') { + var bidAdaptor = _bidderRegistry[bidderCode]; + + if (typeof bidAdaptor === 'undefined') { + // check if alias is part of s2sConfig and allow them to register if so (as base bidder may be s2s-only) + var s2sConfig = __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('s2sConfig'); + var s2sBidders = s2sConfig && s2sConfig.bidders; + + if (!(s2sBidders && __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(s2sBidders, alias))) { + utils.logError('bidderCode "' + bidderCode + '" is not an existing bidder.', 'adapterManager.aliasBidAdapter'); + } else { + _aliasRegistry[alias] = bidderCode; + } + } else { + try { + var newAdapter; + 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(); + var gvlid = options && options.gvlid; + newAdapter = Object(__WEBPACK_IMPORTED_MODULE_3__adapters_bidderFactory_js__["newBidder"])(_extends({}, spec, { + code: alias, + gvlid: gvlid + })); + _aliasRegistry[alias] = bidderCode; + } + + adapterManager.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.'); + } +}; + +adapterManager.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 \"".concat(code, "\"\n analytics adapter must implement an enableAnalytics() function")); + } + } else { + utils.logError('Prebid Error: analyticsAdapter or analyticsCode not specified'); + } +}; + +adapterManager.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 ".concat(adapterConfig.provider, ".")); + } + }); +}; + +adapterManager.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 + + +function setS2STestingModule(module) { + s2sTestingModule = module; +} + +function tryCallBidderMethod(bidder, method, param) { + try { + var adapter = _bidderRegistry[bidder]; + var spec = adapter.getSpec(); + + if (spec && spec[method] && typeof spec[method] === 'function') { + utils.logInfo("Invoking ".concat(bidder, ".").concat(method)); + __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].runWithBidder(bidder, __WEBPACK_IMPORTED_MODULE_0__utils_js__["bind"].call(spec[method], spec, param)); + } + } catch (e) { + utils.logWarn("Error calling ".concat(method, " of ").concat(bidder)); + } +} + +adapterManager.callTimedOutBidders = function (adUnits, timedOutBidders, cbTimeout) { + timedOutBidders = timedOutBidders.map(function (timedOutBidder) { + // Adding user configured params & timeout to timeout event data + timedOutBidder.params = utils.getUserConfiguredParams(adUnits, timedOutBidder.adUnitCode, timedOutBidder.bidder); + timedOutBidder.timeout = cbTimeout; + return timedOutBidder; + }); + timedOutBidders = utils.groupBy(timedOutBidders, 'bidder'); + Object.keys(timedOutBidders).forEach(function (bidder) { + tryCallBidderMethod(bidder, 'onTimeout', timedOutBidders[bidder]); + }); +}; + +adapterManager.callBidWonBidder = function (bidder, bid, adUnits) { + // Adding user configured params to bidWon event data + bid.params = utils.getUserConfiguredParams(adUnits, bid.adUnitCode, bid.bidder); + __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].incrementBidderWinsCounter(bid.adUnitCode, bid.bidder); + tryCallBidderMethod(bidder, 'onBidWon', bid); +}; + +adapterManager.callSetTargetingBidder = function (bidder, bid) { + tryCallBidderMethod(bidder, 'onSetTargeting', bid); +}; + +/* harmony default export */ __webpack_exports__["default"] = (adapterManager); + +/***/ }), + +/***/ 70: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); +var classof = __webpack_require__(48); + +var split = ''.split; + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) == 'String' ? split.call(it, '') : Object(it); +} : Object; + + +/***/ }), + +/***/ 71: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var fails = __webpack_require__(28); +var createElement = __webpack_require__(72); + +// Thank's IE8 for his funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; +}); + + +/***/ }), + +/***/ 72: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var isObject = __webpack_require__(23); + +var document = global.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), + +/***/ 73: +/***/ (function(module, exports, __webpack_require__) { + +var IS_PURE = __webpack_require__(16); +var store = __webpack_require__(74); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.6.4', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2020 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), + +/***/ 74: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var setGlobal = __webpack_require__(103); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; + + +/***/ }), + +/***/ 75: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); +}); + + +/***/ }), + +/***/ 76: +/***/ (function(module, exports, __webpack_require__) { + +var toIndexedObject = __webpack_require__(47); +var toLength = __webpack_require__(50); +var toAbsoluteIndex = __webpack_require__(107); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($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) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), + +/***/ 77: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(108); +__webpack_require__(131); +__webpack_require__(133); +__webpack_require__(135); +__webpack_require__(137); +__webpack_require__(139); +__webpack_require__(140); +__webpack_require__(141); +__webpack_require__(142); +__webpack_require__(143); +__webpack_require__(144); +__webpack_require__(145); +__webpack_require__(146); +__webpack_require__(147); +__webpack_require__(148); +__webpack_require__(149); +__webpack_require__(150); +__webpack_require__(151); +__webpack_require__(152); + +module.exports = parent; + + +/***/ }), + +/***/ 78: +/***/ (function(module, exports, __webpack_require__) { + +var hiddenKeys = __webpack_require__(53); +var isObject = __webpack_require__(23); +var has = __webpack_require__(24); +var defineProperty = __webpack_require__(31).f; +var uid = __webpack_require__(59); +var FREEZING = __webpack_require__(111); + +var METADATA = uid('meta'); +var id = 0; + +var isExtensible = Object.isExtensible || function () { + return true; +}; + +var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + ++id, // object ID + weakData: {} // weak collections IDs + } }); +}; + +var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; +}; + +var getWeakData = function (it, create) { + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; +}; + +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); + return it; +}; + +var meta = module.exports = { + REQUIRED: false, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze +}; + +hiddenKeys[METADATA] = true; + + +/***/ }), + +/***/ 79: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); +var Iterators = __webpack_require__(37); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), + +/***/ 8: +/***/ (function(module, exports, __webpack_require__) { + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * events.js + */ +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +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(que.indexOf(_handler), 1); + } + }); + } else { + utils._each(event.que, function (_handler) { + var que = event.que; + + if (_handler === handler) { + que.splice(que.indexOf(_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; +}(); + +/***/ }), + +/***/ 80: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator['return']; + if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); + throw error; + } +}; + + +/***/ }), + +/***/ 81: +/***/ (function(module, exports) { + +module.exports = function (it, Constructor, name) { + if (!(it instanceof Constructor)) { + throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); + } return it; +}; + + +/***/ }), + +/***/ 82: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var defineProperties = __webpack_require__(116); +var enumBugKeys = __webpack_require__(83); +var hiddenKeys = __webpack_require__(53); +var html = __webpack_require__(119); +var documentCreateElement = __webpack_require__(72); +var sharedKey = __webpack_require__(65); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.github.io/ecma262/#sec-object.create +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : defineProperties(result, Properties); +}; + + +/***/ }), + +/***/ 828: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(68); + + +/***/ }), + +/***/ 83: +/***/ (function(module, exports) { + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), + +/***/ 84: +/***/ (function(module, exports, __webpack_require__) { + +var createNonEnumerableProperty = __webpack_require__(29); + +module.exports = function (target, key, value, options) { + if (options && options.enumerable) target[key] = value; + else createNonEnumerableProperty(target, key, value); +}; + + +/***/ }), + +/***/ 85: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var getPrototypeOf = __webpack_require__(86); +var createNonEnumerableProperty = __webpack_require__(29); +var has = __webpack_require__(24); +var wellKnownSymbol = __webpack_require__(19); +var IS_PURE = __webpack_require__(16); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +var returnThis = function () { return this; }; + +// `%IteratorPrototype%` object +// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +if (IteratorPrototype == undefined) IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + + +/***/ }), + +/***/ 86: +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(24); +var toObject = __webpack_require__(57); +var sharedKey = __webpack_require__(65); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(122); + +var IE_PROTO = sharedKey('IE_PROTO'); +var ObjectPrototype = Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.github.io/ecma262/#sec-object.getprototypeof +module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectPrototype : null; +}; + + +/***/ }), + +/***/ 87: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var charAt = __webpack_require__(127).charAt; +var InternalStateModule = __webpack_require__(54); +var defineIterator = __webpack_require__(66); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: String(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; +}); + + +/***/ }), + +/***/ 88: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var getIteratorMethod = __webpack_require__(61); + +module.exports = function (it) { + var iteratorMethod = getIteratorMethod(it); + if (typeof iteratorMethod != 'function') { + throw TypeError(String(it) + ' is not iterable'); + } return anObject(iteratorMethod.call(it)); +}; + + +/***/ }), + +/***/ 89: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(153); + +module.exports = parent; + + +/***/ }), + +/***/ 9: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return storageCallbacks; }); +/* unused harmony export newStorageManager */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return validateStorageEnforcement; }); +/* harmony export (immutable) */ __webpack_exports__["a"] = getCoreStorageManager; +/* harmony export (immutable) */ __webpack_exports__["b"] = getStorageManager; +/* unused harmony export resetData */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); + + + +var moduleTypeWhiteList = ['core', 'prebid-module']; +var storageCallbacks = []; +/** + * Storage options + * @typedef {Object} storageOptions + * @property {Number=} gvlid - Vendor id + * @property {string} moduleName - Module name + * @property {string=} moduleType - Module type, value can be anyone of core or prebid-module + */ + +/** + * Returns list of storage related functions with gvlid, module name and module type in its scope. + * All three argument are optional here. Below shows the usage of of these + * - GVL Id: Pass GVL id if you are a vendor + * - Module name: All modules need to pass module name + * - Module type: Some modules may need these functions but are not vendor. e.g prebid core files in src and modules like currency. + * @param {storageOptions} options + */ + +function newStorageManager() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + gvlid = _ref.gvlid, + moduleName = _ref.moduleName, + moduleType = _ref.moduleType; + + function isValid(cb) { + if (__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(moduleTypeWhiteList, moduleType)) { + var result = { + valid: true + }; + return cb(result); + } else { + var value; + var hookDetails = { + hasEnforcementHook: false + }; + validateStorageEnforcement(gvlid, moduleName, hookDetails, function (result) { + if (result && result.hasEnforcementHook) { + value = cb(result); + } else { + var _result = { + hasEnforcementHook: false, + valid: __WEBPACK_IMPORTED_MODULE_1__utils_js__["hasDeviceAccess"]() + }; + value = cb(_result); + } + }); + return value; + } + } + /** + * @param {string} key + * @param {string} value + * @param {string} [expires=''] + * @param {string} [sameSite='/'] + * @param {string} [domain] domain (e.g., 'example.com' or 'subdomain.example.com'). + * If not specified, defaults to the host portion of the current document location. + * If a domain is specified, subdomains are always included. + * Domain must match the domain of the JavaScript origin. Setting cookies to foreign domains will be silently ignored. + */ + + + var setCookie = function setCookie(key, value, expires, sameSite, domain, done) { + var cb = function cb(result) { + if (result && result.valid) { + var domainPortion = domain && domain !== '' ? " ;domain=".concat(encodeURIComponent(domain)) : ''; + var expiresPortion = expires && expires !== '' ? " ;expires=".concat(expires) : ''; + var isNone = sameSite != null && sameSite.toLowerCase() == 'none'; + var secure = isNone ? '; Secure' : ''; + document.cookie = "".concat(key, "=").concat(encodeURIComponent(value)).concat(expiresPortion, "; path=/").concat(domainPortion).concat(sameSite ? "; SameSite=".concat(sameSite) : '').concat(secure); + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} name + * @returns {(string|null)} + */ + + + var getCookie = function getCookie(name, done) { + var cb = function cb(result) { + if (result && result.valid) { + var m = window.document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]*)\\s*(;|$)'); + return m ? decodeURIComponent(m[2]) : null; + } + + return null; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @returns {boolean} + */ + + + var localStorageIsEnabled = function localStorageIsEnabled(done) { + var cb = function cb(result) { + if (result && result.valid) { + try { + localStorage.setItem('prebid.cookieTest', '1'); + return localStorage.getItem('prebid.cookieTest') === '1'; + } catch (error) {} + } + + return false; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @returns {boolean} + */ + + + var cookiesAreEnabled = function cookiesAreEnabled(done) { + var cb = function cb(result) { + if (result && result.valid) { + if (__WEBPACK_IMPORTED_MODULE_1__utils_js__["checkCookieSupport"]()) { + return true; + } + + window.document.cookie = 'prebid.cookieTest'; + return window.document.cookie.indexOf('prebid.cookieTest') !== -1; + } + + return false; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} key + * @param {string} value + */ + + + var setDataInLocalStorage = function setDataInLocalStorage(key, value, done) { + var cb = function cb(result) { + if (result && result.valid) { + window.localStorage.setItem(key, value); + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} key + * @returns {(string|null)} + */ + + + var getDataFromLocalStorage = function getDataFromLocalStorage(key, done) { + var cb = function cb(result) { + if (result && result.valid) { + return window.localStorage.getItem(key); + } + + return null; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} key + */ + + + var removeDataFromLocalStorage = function removeDataFromLocalStorage(key, done) { + var cb = function cb(result) { + if (result && result.valid) { + window.localStorage.removeItem(key); + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @returns {boolean} + */ + + + var hasLocalStorage = function hasLocalStorage(done) { + var cb = function cb(result) { + if (result && result.valid) { + try { + return !!window.localStorage; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('Local storage api disabled'); + } + } + + return false; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * Returns all cookie values from the jar whose names contain the `keyLike` + * Needs to exist in `utils.js` as it follows the StorageHandler interface defined in live-connect-js. If that module were to be removed, this function can go as well. + * @param {string} keyLike + * @return {[]} + */ + + + var findSimilarCookies = function findSimilarCookies(keyLike, done) { + var cb = function cb(result) { + if (result && result.valid) { + var all = []; + + if (__WEBPACK_IMPORTED_MODULE_1__utils_js__["hasDeviceAccess"]()) { + var cookies = document.cookie.split(';'); + + while (cookies.length) { + var cookie = cookies.pop(); + var separatorIndex = cookie.indexOf('='); + separatorIndex = separatorIndex < 0 ? cookie.length : separatorIndex; + var cookieName = decodeURIComponent(cookie.slice(0, separatorIndex).replace(/^\s+/, '')); + + if (cookieName.indexOf(keyLike) >= 0) { + all.push(decodeURIComponent(cookie.slice(separatorIndex + 1))); + } + } + } + + return all; + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + + return { + setCookie: setCookie, + getCookie: getCookie, + localStorageIsEnabled: localStorageIsEnabled, + cookiesAreEnabled: cookiesAreEnabled, + setDataInLocalStorage: setDataInLocalStorage, + getDataFromLocalStorage: getDataFromLocalStorage, + removeDataFromLocalStorage: removeDataFromLocalStorage, + hasLocalStorage: hasLocalStorage, + findSimilarCookies: findSimilarCookies + }; +} +/** + * This hook validates the storage enforcement if gdprEnforcement module is included + */ + +var validateStorageEnforcement = Object(__WEBPACK_IMPORTED_MODULE_0__hook_js__["b" /* hook */])('async', function (gvlid, moduleName, hookDetails, callback) { + callback(hookDetails); +}, 'validateStorageEnforcement'); +/** + * This function returns storage functions to access cookies and localstorage. This function will bypass the gdpr enforcement requirement. Prebid as a software needs to use storage in some scenarios and is not a vendor so GDPR enforcement rules does not apply on Prebid. + * @param {string} moduleName Module name + */ + +function getCoreStorageManager(moduleName) { + return newStorageManager({ + moduleName: moduleName, + moduleType: 'core' + }); +} +/** + * Note: Core modules or Prebid modules like Currency, SizeMapping should use getCoreStorageManager + * This function returns storage functions to access cookies and localstorage. Bidders and User id modules should import this and use it in their module if needed. GVL ID and Module name are optional param but gvl id is needed for when gdpr enforcement module is used. + * @param {Number=} gvlid Vendor id + * @param {string=} moduleName BidderCode or module name + */ + +function getStorageManager(gvlid, moduleName) { + return newStorageManager({ + gvlid: gvlid, + moduleName: moduleName + }); +} +function resetData() { + storageCallbacks = []; +} + +/***/ }), + +/***/ 90: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = 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 + }; +} + +/***/ }), + +/***/ 91: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export setSizeConfig */ +/* harmony export (immutable) */ __webpack_exports__["a"] = getLabels; +/* harmony export (immutable) */ __webpack_exports__["c"] = sizeSupported; +/* harmony export (immutable) */ __webpack_exports__["b"] = resolveStatus; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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} sizesSupported The sizes to be accepted if this SizeConfig is enabled. + * @property {Array} labels The active labels to match this SizeConfig to an adUnits and/or bidders. + */ + +/** + * + * @param {Array} config + */ + +function setSizeConfig(config) { + sizeConfig = config; +} +__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('sizeConfig', function (config) { + return setSizeConfig(config.sizeConfig); +}); +/** + * 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 + }; +} +/** + * Determines whether a single size is valid given configured sizes + * @param {Array} size [width, height] + * @param {Array} configs + * @returns {boolean} + */ + +function sizeSupported(size) { + var configs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : sizeConfig; + var maps = evaluateSizeConfig(configs); + + if (!maps.shouldFilter) { + return true; + } + + return !!maps.sizesSupported[size]; +} +/** + * Resolves the unique set of the union of all sizes and labels that are active from a SizeConfig.mediaQuery match + * @param {Array} labels Labels specified on adUnit or bidder + * @param {boolean} labelAll if true, all labels must match to be enabled + * @param {Array} activeLabels Labels passed in through requestBids + * @param {object} mediaTypes A mediaTypes object describing the various media types (banner, video, native) + * @param {Array>} sizes Sizes specified on adUnit (deprecated) + * @param {Array} configs + * @returns {{labels: Array, sizes: Array>}} + */ + +function resolveStatus() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$labels = _ref.labels, + labels = _ref$labels === void 0 ? [] : _ref$labels, + _ref$labelAll = _ref.labelAll, + labelAll = _ref$labelAll === void 0 ? false : _ref$labelAll, + _ref$activeLabels = _ref.activeLabels, + activeLabels = _ref$activeLabels === void 0 ? [] : _ref$activeLabels; + + var mediaTypes = arguments.length > 1 ? arguments[1] : undefined; + var sizes = arguments.length > 2 ? arguments[2] : undefined; + var configs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : sizeConfig; + var maps = evaluateSizeConfig(configs); + + if (!Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isPlainObject"])(mediaTypes)) { + // add support for deprecated adUnit.sizes by creating correct banner mediaTypes if they don't already exist + if (sizes) { + mediaTypes = { + banner: { + sizes: sizes + } + }; + } else { + mediaTypes = {}; + } + } else { + mediaTypes = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepClone"])(mediaTypes); + } + + var oldSizes = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(mediaTypes, 'banner.sizes'); + + if (maps.shouldFilter && oldSizes) { + mediaTypes.banner.sizes = oldSizes.filter(function (size) { + return maps.sizesSupported[size]; + }); + } + + var allMediaTypes = Object.keys(mediaTypes); + var results = { + active: allMediaTypes.every(function (type) { + return type !== 'banner'; + }) || allMediaTypes.some(function (type) { + return type === 'banner'; + }) && Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(mediaTypes, 'banner.sizes.length') > 0 && (labels.length === 0 || !labelAll && (labels.some(function (label) { + return maps.labels[label]; + }) || labels.some(function (label) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(activeLabels, label); + })) || labelAll && labels.reduce(function (result, label) { + return !result ? result : maps.labels[label] || __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(activeLabels, label); + }, true)), + mediaTypes: mediaTypes + }; + + if (oldSizes && oldSizes.length !== mediaTypes.banner.sizes.length) { + results.filterResults = { + before: oldSizes, + after: mediaTypes.banner.sizes + }; + } + + return results; +} + +function evaluateSizeConfig(configs) { + return configs.reduce(function (results, config) { + if (_typeof(config) === 'object' && typeof config.mediaQuery === 'string') { + var ruleMatch = false; // TODO: (Prebid - 4.0) Remove empty mediaQuery string check. Disallow empty mediaQuery in sizeConfig. + // Refer: https://github.com/prebid/Prebid.js/pull/4691, https://github.com/prebid/Prebid.js/issues/4810 for more details. + + if (config.mediaQuery === '') { + ruleMatch = true; + } else { + try { + ruleMatch = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["getWindowTop"])().matchMedia(config.mediaQuery).matches; + } catch (e) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])('Unfriendly iFrame blocks sizeConfig from being correctly evaluated'); + ruleMatch = matchMedia(config.mediaQuery).matches; + } + } + + if (ruleMatch) { + 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 { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])('sizeConfig rule missing required property "mediaQuery"'); + } + + return results; + }, { + labels: {}, + sizesSupported: {}, + shouldFilter: false + }); +} + +/***/ }), + +/***/ 92: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(215); + +module.exports = parent; + + +/***/ }), + +/***/ 93: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["b"] = store; +/* harmony export (immutable) */ __webpack_exports__["a"] = getCacheUrl; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_js__ = __webpack_require__(0); +/** + * 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. + */ + + + +/** + * @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. + * @param {string} impUrl An impression tracker URL for the delivery of the video ad + * @return A VAST URL which loads XML from the given URI. + */ + +function wrapURI(uri, impUrl) { + // 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. + var vastImp = impUrl ? "") : ""; + return "\n \n \n prebid.org wrapper\n \n ").concat(vastImp, "\n \n \n \n "); +} +/** + * 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, bid.vastImpUrl); + var payload = { + type: 'xml', + value: vastValue, + ttlseconds: Number(bid.ttl) + }; + + if (__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('cache.vasttrack')) { + payload.bidder = bid.bidder; + payload.bidid = bid.requestId; // function has a thisArg set to bidderRequest for accessing the auctionStart + + if (__WEBPACK_IMPORTED_MODULE_2__utils_js__["isPlainObject"](this) && this.hasOwnProperty('auctionStart')) { + payload.timestamp = this.auctionStart; + } + } + + if (typeof bid.customCacheKey === 'string' && bid.customCacheKey !== '') { + payload.key = bid.customCacheKey; + } + + return payload; +} +/** + * 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; + + 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: ".concat(statusText, ": ").concat(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 + * @param {BidderRequest} [bidderRequest] + * the data has been stored in the cache. + */ + + +function store(bids, done, bidderRequest) { + var requestData = { + puts: bids.map(toStorageRequest, bidderRequest) + }; + Object(__WEBPACK_IMPORTED_MODULE_0__ajax_js__["a" /* ajax */])(__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('cache.url'), shimStorageCallback(done), JSON.stringify(requestData), { + contentType: 'text/plain', + withCredentials: true + }); +} +function getCacheUrl(id) { + return "".concat(__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('cache.url'), "?uuid=").concat(id); +} + +/***/ }), + +/***/ 96: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(97); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('Array', 'find'); + + +/***/ }), + +/***/ 97: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var $find = __webpack_require__(56).find; +var addToUnscopables = __webpack_require__(51); +var arrayMethodUsesToLength = __webpack_require__(60); + +var FIND = 'find'; +var SKIPS_HOLES = true; + +var USES_TO_LENGTH = arrayMethodUsesToLength(FIND); + +// Shouldn't skip holes +if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.find` method +// https://tc39.github.io/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND); + + +/***/ }), + +/***/ 98: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var propertyIsEnumerableModule = __webpack_require__(99); +var createPropertyDescriptor = __webpack_require__(46); +var toIndexedObject = __webpack_require__(47); +var toPrimitive = __webpack_require__(55); +var has = __webpack_require__(24); +var IE8_DOM_DEFINE = __webpack_require__(71); + +var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); +}; + + +/***/ }), + +/***/ 99: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var nativePropertyIsEnumerable = {}.propertyIsEnumerable; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : nativePropertyIsEnumerable; + + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/build/dist/prebid.js b/build/dist/prebid.js new file mode 100644 index 00000000000..6355e8dda0c --- /dev/null +++ b/build/dist/prebid.js @@ -0,0 +1,18154 @@ +/* prebid.js v4.2.0 +Updated : 2020-08-13 */ +/******/ (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 = { +/******/ 323: 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 = 828); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 0: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "internal", function() { return internal; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bind", function() { return bind; }); +/* harmony export (immutable) */ __webpack_exports__["getUniqueIdentifierStr"] = getUniqueIdentifierStr; +/* harmony export (immutable) */ __webpack_exports__["generateUUID"] = generateUUID; +/* harmony export (immutable) */ __webpack_exports__["getBidIdParameter"] = getBidIdParameter; +/* harmony export (immutable) */ __webpack_exports__["tryAppendQueryString"] = tryAppendQueryString; +/* harmony export (immutable) */ __webpack_exports__["parseQueryStringParameters"] = parseQueryStringParameters; +/* harmony export (immutable) */ __webpack_exports__["transformAdServerTargetingObj"] = transformAdServerTargetingObj; +/* harmony export (immutable) */ __webpack_exports__["getAdUnitSizes"] = getAdUnitSizes; +/* harmony export (immutable) */ __webpack_exports__["parseSizesInput"] = parseSizesInput; +/* harmony export (immutable) */ __webpack_exports__["parseGPTSingleSizeArray"] = parseGPTSingleSizeArray; +/* harmony export (immutable) */ __webpack_exports__["parseGPTSingleSizeArrayToRtbSize"] = parseGPTSingleSizeArrayToRtbSize; +/* harmony export (immutable) */ __webpack_exports__["getWindowTop"] = getWindowTop; +/* harmony export (immutable) */ __webpack_exports__["getWindowSelf"] = getWindowSelf; +/* harmony export (immutable) */ __webpack_exports__["getWindowLocation"] = getWindowLocation; +/* harmony export (immutable) */ __webpack_exports__["logMessage"] = logMessage; +/* harmony export (immutable) */ __webpack_exports__["logInfo"] = logInfo; +/* harmony export (immutable) */ __webpack_exports__["logWarn"] = logWarn; +/* harmony export (immutable) */ __webpack_exports__["logError"] = logError; +/* harmony export (immutable) */ __webpack_exports__["hasConsoleLogger"] = hasConsoleLogger; +/* harmony export (immutable) */ __webpack_exports__["debugTurnedOn"] = debugTurnedOn; +/* harmony export (immutable) */ __webpack_exports__["createInvisibleIframe"] = createInvisibleIframe; +/* harmony export (immutable) */ __webpack_exports__["getParameterByName"] = getParameterByName; +/* harmony export (immutable) */ __webpack_exports__["isA"] = isA; +/* harmony export (immutable) */ __webpack_exports__["isFn"] = isFn; +/* harmony export (immutable) */ __webpack_exports__["isStr"] = isStr; +/* harmony export (immutable) */ __webpack_exports__["isArray"] = isArray; +/* harmony export (immutable) */ __webpack_exports__["isNumber"] = isNumber; +/* harmony export (immutable) */ __webpack_exports__["isPlainObject"] = isPlainObject; +/* harmony export (immutable) */ __webpack_exports__["isBoolean"] = isBoolean; +/* harmony export (immutable) */ __webpack_exports__["isEmpty"] = isEmpty; +/* harmony export (immutable) */ __webpack_exports__["isEmptyStr"] = isEmptyStr; +/* harmony export (immutable) */ __webpack_exports__["_each"] = _each; +/* harmony export (immutable) */ __webpack_exports__["contains"] = contains; +/* harmony export (immutable) */ __webpack_exports__["_map"] = _map; +/* harmony export (immutable) */ __webpack_exports__["hasOwn"] = hasOwn; +/* harmony export (immutable) */ __webpack_exports__["insertElement"] = insertElement; +/* harmony export (immutable) */ __webpack_exports__["triggerPixel"] = triggerPixel; +/* harmony export (immutable) */ __webpack_exports__["callBurl"] = callBurl; +/* harmony export (immutable) */ __webpack_exports__["insertHtmlIntoIframe"] = insertHtmlIntoIframe; +/* harmony export (immutable) */ __webpack_exports__["insertUserSyncIframe"] = insertUserSyncIframe; +/* harmony export (immutable) */ __webpack_exports__["createTrackPixelHtml"] = createTrackPixelHtml; +/* harmony export (immutable) */ __webpack_exports__["createTrackPixelIframeHtml"] = createTrackPixelIframeHtml; +/* harmony export (immutable) */ __webpack_exports__["getValueString"] = getValueString; +/* harmony export (immutable) */ __webpack_exports__["uniques"] = uniques; +/* harmony export (immutable) */ __webpack_exports__["flatten"] = flatten; +/* harmony export (immutable) */ __webpack_exports__["getBidRequest"] = getBidRequest; +/* harmony export (immutable) */ __webpack_exports__["getKeys"] = getKeys; +/* harmony export (immutable) */ __webpack_exports__["getValue"] = getValue; +/* harmony export (immutable) */ __webpack_exports__["getKeyByValue"] = getKeyByValue; +/* harmony export (immutable) */ __webpack_exports__["getBidderCodes"] = getBidderCodes; +/* harmony export (immutable) */ __webpack_exports__["isGptPubadsDefined"] = isGptPubadsDefined; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getHighestCpm", function() { return getHighestCpm; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOldestHighestCpmBid", function() { return getOldestHighestCpmBid; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLatestHighestCpmBid", function() { return getLatestHighestCpmBid; }); +/* harmony export (immutable) */ __webpack_exports__["shuffle"] = shuffle; +/* harmony export (immutable) */ __webpack_exports__["adUnitsFilter"] = adUnitsFilter; +/* harmony export (immutable) */ __webpack_exports__["deepClone"] = deepClone; +/* harmony export (immutable) */ __webpack_exports__["inIframe"] = inIframe; +/* harmony export (immutable) */ __webpack_exports__["isSafariBrowser"] = isSafariBrowser; +/* harmony export (immutable) */ __webpack_exports__["replaceAuctionPrice"] = replaceAuctionPrice; +/* harmony export (immutable) */ __webpack_exports__["timestamp"] = timestamp; +/* harmony export (immutable) */ __webpack_exports__["hasDeviceAccess"] = hasDeviceAccess; +/* harmony export (immutable) */ __webpack_exports__["checkCookieSupport"] = checkCookieSupport; +/* harmony export (immutable) */ __webpack_exports__["delayExecution"] = delayExecution; +/* harmony export (immutable) */ __webpack_exports__["groupBy"] = groupBy; +/* harmony export (immutable) */ __webpack_exports__["getDefinedParams"] = getDefinedParams; +/* harmony export (immutable) */ __webpack_exports__["isValidMediaTypes"] = isValidMediaTypes; +/* harmony export (immutable) */ __webpack_exports__["getBidderRequest"] = getBidderRequest; +/* harmony export (immutable) */ __webpack_exports__["getUserConfiguredParams"] = getUserConfiguredParams; +/* harmony export (immutable) */ __webpack_exports__["getOrigin"] = getOrigin; +/* harmony export (immutable) */ __webpack_exports__["getDNT"] = getDNT; +/* harmony export (immutable) */ __webpack_exports__["isAdUnitCodeMatchingSlot"] = isAdUnitCodeMatchingSlot; +/* harmony export (immutable) */ __webpack_exports__["isSlotMatchingAdUnitCode"] = isSlotMatchingAdUnitCode; +/* harmony export (immutable) */ __webpack_exports__["getGptSlotInfoForAdUnitCode"] = getGptSlotInfoForAdUnitCode; +/* harmony export (immutable) */ __webpack_exports__["unsupportedBidderMessage"] = unsupportedBidderMessage; +/* harmony export (immutable) */ __webpack_exports__["isInteger"] = isInteger; +/* harmony export (immutable) */ __webpack_exports__["convertCamelToUnderscore"] = convertCamelToUnderscore; +/* harmony export (immutable) */ __webpack_exports__["cleanObj"] = cleanObj; +/* harmony export (immutable) */ __webpack_exports__["pick"] = pick; +/* harmony export (immutable) */ __webpack_exports__["transformBidderParamKeywords"] = transformBidderParamKeywords; +/* harmony export (immutable) */ __webpack_exports__["convertTypes"] = convertTypes; +/* harmony export (immutable) */ __webpack_exports__["isArrayOfNums"] = isArrayOfNums; +/* harmony export (immutable) */ __webpack_exports__["fill"] = fill; +/* harmony export (immutable) */ __webpack_exports__["chunk"] = chunk; +/* harmony export (immutable) */ __webpack_exports__["getMinValueFromArray"] = getMinValueFromArray; +/* harmony export (immutable) */ __webpack_exports__["getMaxValueFromArray"] = getMaxValueFromArray; +/* harmony export (immutable) */ __webpack_exports__["compareOn"] = compareOn; +/* harmony export (immutable) */ __webpack_exports__["parseQS"] = parseQS; +/* harmony export (immutable) */ __webpack_exports__["formatQS"] = formatQS; +/* harmony export (immutable) */ __webpack_exports__["parseUrl"] = parseUrl; +/* harmony export (immutable) */ __webpack_exports__["buildUrl"] = buildUrl; +/* harmony export (immutable) */ __webpack_exports__["deepEqual"] = deepEqual; +/* harmony export (immutable) */ __webpack_exports__["mergeDeep"] = mergeDeep; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_just_clone__ = __webpack_require__(158); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_just_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_just_clone__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_dlv_index_js__ = __webpack_require__(159); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deepAccess", function() { return __WEBPACK_IMPORTED_MODULE_4_dlv_index_js__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_dset__ = __webpack_require__(160); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deepSetValue", function() { return __WEBPACK_IMPORTED_MODULE_5_dset__["a"]; }); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/* eslint-disable no-console */ + + + + + +var CONSTANTS = __webpack_require__(5); + + + +var tArr = 'Array'; +var tStr = 'String'; +var tFn = 'Function'; +var tNumb = 'Number'; +var tObject = 'Object'; +var tBoolean = 'Boolean'; +var toString = Object.prototype.toString; +var consoleExists = Boolean(window.console); +var consoleLogExists = Boolean(consoleExists && window.console.log); +var consoleInfoExists = Boolean(consoleExists && window.console.info); +var consoleWarnExists = Boolean(consoleExists && window.console.warn); +var consoleErrorExists = Boolean(consoleExists && window.console.error); // this allows stubbing of utility functions that are used internally by other utility functions + +var internal = { + checkCookieSupport: checkCookieSupport, + createTrackPixelIframeHtml: createTrackPixelIframeHtml, + getWindowSelf: getWindowSelf, + getWindowTop: getWindowTop, + getWindowLocation: getWindowLocation, + insertUserSyncIframe: insertUserSyncIframe, + insertElement: insertElement, + isFn: isFn, + triggerPixel: triggerPixel, + logError: logError, + logWarn: logWarn, + logMessage: logMessage, + logInfo: logInfo, + parseQS: parseQS, + formatQS: formatQS, + deepEqual: deepEqual +}; +var uniqueRef = {}; +var bind = function (a, b) { + return b; +}.bind(null, 1, uniqueRef)() === uniqueRef ? Function.prototype.bind : function (bind) { + var self = this; + var args = Array.prototype.slice.call(arguments, 1); + return function () { + return self.apply(bind, args.concat(Array.prototype.slice.call(arguments))); + }; +}; +/* utility method to get incremental integer starting from 1 */ + +var getIncrementalInteger = function () { + var count = 0; + return function () { + count++; + return count; + }; +}(); // generate a random string (to be used as a dynamic JSONP callback) + + +function getUniqueIdentifierStr() { + return getIncrementalInteger() + Math.random().toString(16).substr(2); +} +/** + * 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 + */ + +function generateUUID(placeholder) { + return placeholder ? (placeholder ^ _getRandomData() >> placeholder / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, generateUUID); +} +/** + * Returns random data using the Crypto API if available and Math.random if not + * Method is from https://gist.github.com/jed/982883 like generateUUID, direct link https://gist.github.com/jed/982883#gistcomment-45104 + */ + +function _getRandomData() { + if (window && window.crypto && window.crypto.getRandomValues) { + return crypto.getRandomValues(new Uint8Array(1))[0] % 16; + } else { + return Math.random() * 16; + } +} + +function getBidIdParameter(key, paramsObj) { + if (paramsObj && paramsObj[key]) { + return paramsObj[key]; + } + + return ''; +} +function tryAppendQueryString(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"} +// aliases to formatQS + +function parseQueryStringParameters(queryObj) { + var result = ''; + + for (var k in queryObj) { + if (queryObj.hasOwnProperty(k)) { + result += k + '=' + encodeURIComponent(queryObj[k]) + '&'; + } + } + + result = result.replace(/&$/, ''); + return result; +} // transform an AdServer targeting bids into a query string to send to the adserver + +function transformAdServerTargetingObj(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 "".concat(key, "=").concat(encodeURIComponent(getValue(targeting, key))); + }).join('&'); + } else { + return ''; + } +} +/** + * Read an adUnit object and return the sizes used in an [[728, 90]] format (even if they had [728, 90] defined) + * Preference is given to the `adUnit.mediaTypes.banner.sizes` object over the `adUnit.sizes` + * @param {object} adUnit one adUnit object from the normal list of adUnits + * @returns {Array.} array of arrays containing numeric sizes + */ + +function getAdUnitSizes(adUnit) { + if (!adUnit) { + return; + } + + var sizes = []; + + if (adUnit.mediaTypes && adUnit.mediaTypes.banner && Array.isArray(adUnit.mediaTypes.banner.sizes)) { + var bannerSizes = adUnit.mediaTypes.banner.sizes; + + if (Array.isArray(bannerSizes[0])) { + sizes = bannerSizes; + } else { + sizes.push(bannerSizes); + } // TODO - remove this else block when we're ready to deprecate adUnit.sizes for bidders + + } else if (Array.isArray(adUnit.sizes)) { + if (Array.isArray(adUnit.sizes[0])) { + sizes = adUnit.sizes; + } else { + sizes.push(adUnit.sizes); + } + } + + return sizes; +} +/** + * 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.)} sizeObj Input array or double array [300,250] or [[300,250], [728,90]] + * @return {Array.} 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) === '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 single size array, (i.e [300, 250]) +// into an AppNexus style string, (i.e. 300x250) + +function parseGPTSingleSizeArray(singleSize) { + if (isValidGPTSingleSize(singleSize)) { + return singleSize[0] + 'x' + singleSize[1]; + } +} // Parse a GPT style single size array, (i.e [300, 250]) +// into OpenRTB-compatible (imp.banner.w/h, imp.banner.format.w/h, imp.video.w/h) object(i.e. {w:300, h:250}) + +function parseGPTSingleSizeArrayToRtbSize(singleSize) { + if (isValidGPTSingleSize(singleSize)) { + return { + w: singleSize[0], + h: singleSize[1] + }; + } +} + +function isValidGPTSingleSize(singleSize) { + // if we aren't exactly 2 items in this array, it is invalid + return isArray(singleSize) && singleSize.length === 2 && !isNaN(singleSize[0]) && !isNaN(singleSize[1]); +} + +function getWindowTop() { + return window.top; +} +function getWindowSelf() { + return window.self; +} +function getWindowLocation() { + return window.location; +} +/** + * Wrappers to console.(log | info | warn | error). Takes N arguments, the same as the native methods + */ + +function logMessage() { + if (debugTurnedOn() && consoleLogExists) { + console.log.apply(console, decorateLog(arguments, 'MESSAGE:')); + } +} +function logInfo() { + if (debugTurnedOn() && consoleInfoExists) { + console.info.apply(console, decorateLog(arguments, 'INFO:')); + } +} +function logWarn() { + if (debugTurnedOn() && consoleWarnExists) { + console.warn.apply(console, decorateLog(arguments, 'WARNING:')); + } +} +function logError() { + if (debugTurnedOn() && consoleErrorExists) { + console.error.apply(console, decorateLog(arguments, 'ERROR:')); + } +} + +function decorateLog(args, prefix) { + args = [].slice.call(args); + prefix && args.unshift(prefix); + args.unshift('display: inline-block; color: #fff; background: #3b88c3; padding: 1px 4px; border-radius: 3px;'); + args.unshift('%cPrebid'); + return args; +} + +function hasConsoleLogger() { + return consoleLogExists; +} +function debugTurnedOn() { + return !!__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('debug'); +} +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 + */ + +function getParameterByName(name) { + return parseQS(getWindowLocation().search)[name] || ''; +} +/** + * 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 + */ + +function isA(object, _t) { + return toString.call(object) === '[object ' + _t + ']'; +} +function isFn(object) { + return isA(object, tFn); +} +function isStr(object) { + return isA(object, tStr); +} +function isArray(object) { + return isA(object, tArr); +} +function isNumber(object) { + return isA(object, tNumb); +} +function isPlainObject(object) { + return isA(object, tObject); +} +function isBoolean(object) { + return isA(object, tBoolean); +} +/** + * 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 + */ + +function isEmpty(object) { + if (!object) return true; + + if (isArray(object) || 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 + */ + +function isEmptyStr(str) { + return 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 + */ + +function _each(object, fn) { + if (isEmpty(object)) return; + if (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); + } + } +} +function contains(a, obj) { + if (isEmpty(a)) { + return false; + } + + if (isFn(a.indexOf)) { + return a.indexOf(obj) !== -1; + } + + var i = a.length; + + while (i--) { + if (a[i] === obj) { + return true; + } + } + + return false; +} +/** + * Map an array or object into another array + * given a function + * @param {Array|Object} object + * @param {Function(value, key, object)} callback + * @return {Array} + */ + +function _map(object, callback) { + if (isEmpty(object)) return []; + if (isFn(object.map)) return object.map(callback); + var output = []; + + _each(object, function (value, key) { + output.push(callback(value, key, object)); + }); + + return output; +} +function hasOwn(objectToCheck, propertyToCheckFor) { + if (objectToCheck.hasOwnProperty) { + return objectToCheck.hasOwnProperty(propertyToCheckFor); + } else { + return typeof objectToCheck[propertyToCheckFor] !== 'undefined' && objectToCheck.constructor.prototype[propertyToCheckFor] !== objectToCheck[propertyToCheckFor]; + } +} +; +/* +* Inserts an element(elm) as targets child, by default as first child +* @param {HTMLElement} elm +* @param {HTMLElement} [doc] +* @param {HTMLElement} [target] +* @param {Boolean} [asLastChildChild] +* @return {HTMLElement} +*/ + +function insertElement(elm, doc, target, asLastChildChild) { + doc = doc || document; + var parentEl; + + if (target) { + parentEl = doc.getElementsByTagName(target); + } else { + parentEl = doc.getElementsByTagName('head'); + } + + try { + parentEl = parentEl.length ? parentEl : doc.getElementsByTagName('body'); + + if (parentEl.length) { + parentEl = parentEl[0]; + var insertBeforeEl = asLastChildChild ? null : parentEl.firstChild; + return parentEl.insertBefore(elm, insertBeforeEl); + } + } catch (e) {} +} +/** + * Inserts an image pixel with the specified `url` for cookie sync + * @param {string} url URL string of the image pixel to load + * @param {function} [done] an optional exit callback, used when this usersync pixel is added during an async process + */ + +function triggerPixel(url, done) { + var img = new Image(); + + if (done && internal.isFn(done)) { + img.addEventListener('load', done); + img.addEventListener('error', done); + } + + img.src = url; +} +function callBurl(_ref) { + var source = _ref.source, + burl = _ref.burl; + + if (source === CONSTANTS.S2S.SRC && burl) { + internal.triggerPixel(burl); + } +} +/** + * Inserts an empty iframe with the specified `html`, primarily used for tracking purposes + * (though could be for other purposes) + * @param {string} htmlCode snippet of HTML code used for tracking purposes + */ + +function insertHtmlIntoIframe(htmlCode) { + if (!htmlCode) { + return; + } + + var iframe = document.createElement('iframe'); + iframe.id = getUniqueIdentifierStr(); + iframe.width = 0; + iframe.height = 0; + iframe.hspace = '0'; + iframe.vspace = '0'; + iframe.marginWidth = '0'; + iframe.marginHeight = '0'; + iframe.style.display = 'none'; + iframe.style.height = '0px'; + iframe.style.width = '0px'; + iframe.scrolling = 'no'; + iframe.frameBorder = '0'; + iframe.allowtransparency = 'true'; + internal.insertElement(iframe, document, 'body'); + iframe.contentWindow.document.open(); + iframe.contentWindow.document.write(htmlCode); + iframe.contentWindow.document.close(); +} +/** + * 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 + * @param {function} [done] an optional exit callback, used when this usersync pixel is added during an async process + */ + +function insertUserSyncIframe(url, done) { + var iframeHtml = internal.createTrackPixelIframeHtml(url, false, 'allow-scripts allow-same-origin'); + var div = document.createElement('div'); + div.innerHTML = iframeHtml; + var iframe = div.firstChild; + + if (done && internal.isFn(done)) { + iframe.addEventListener('load', done); + iframe.addEventListener('error', done); + } + + internal.insertElement(iframe, document, 'html', true); +} +; +/** + * 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` + */ + +function createTrackPixelHtml(url) { + if (!url) { + return ''; + } + + var escapedUrl = encodeURI(url); + var img = '
'; + img += '
'; + 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` + */ + +function createTrackPixelIframeHtml(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=\"".concat(sandbox, "\""); + } + + return ""); +} +function getValueString(param, val, defaultValue) { + if (val === undefined || val === null) { + return defaultValue; + } + + if (isStr(val)) { + return val; + } + + if (isNumber(val)) { + return val.toString(); + } + + internal.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, bidderRequests) { + if (!id) { + return; + } + + var bidRequest; + bidderRequests.some(function (bidderRequest) { + var result = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(bidderRequest.bids, function (bid) { + return ['bidId', 'adId', 'bid_id'].some(function (type) { + return bid[type] === id; + }); + }); + + if (result) { + bidRequest = result; + } + + return result; + }); + return bidRequest; +} +function getKeys(obj) { + return Object.keys(obj); +} +function getValue(obj, key) { + return obj[key]; +} +/** + * Get the key of an object for a given value + */ + +function getKeyByValue(obj, value) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + if (obj[prop] === value) { + return prop; + } + } + } +} +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 && isFn(window.googletag.pubads) && isFn(window.googletag.pubads().getSlots)) { + return true; + } +} // This function will get highest cpm value bid, in case of tie it will return the bid with lowest timeToRespond + +var getHighestCpm = getHighestCpmCallback('timeToRespond', function (previous, current) { + return previous > current; +}); // This function will get the oldest hightest cpm value bid, in case of tie it will return the bid which came in first +// Use case for tie: https://github.com/prebid/Prebid.js/issues/2448 + +var getOldestHighestCpmBid = getHighestCpmCallback('responseTimestamp', function (previous, current) { + return previous > current; +}); // This function will get the latest hightest cpm value bid, in case of tie it will return the bid which came in last +// Use case for tie: https://github.com/prebid/Prebid.js/issues/2539 + +var getLatestHighestCpmBid = getHighestCpmCallback('responseTimestamp', function (previous, current) { + return previous < current; +}); + +function getHighestCpmCallback(useTieBreakerProperty, tieBreakerCallback) { + return function (previous, current) { + if (previous.cpm === current.cpm) { + return tieBreakerCallback(previous[useTieBreakerProperty], current[useTieBreakerProperty]) ? 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 __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(filter, bid && bid.adUnitCode); +} +function deepClone(obj) { + return __WEBPACK_IMPORTED_MODULE_1_just_clone___default()(obj); +} +function inIframe() { + try { + return internal.getWindowSelf() !== internal.getWindowTop(); + } catch (e) { + return true; + } +} +function isSafariBrowser() { + return /^((?!chrome|android|crios|fxios).)*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(); +} +/** + * When the deviceAccess flag config option is false, no cookies should be read or set + * @returns {boolean} + */ + +function hasDeviceAccess() { + return __WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('deviceAccess') !== false; +} +/** + * @returns {(boolean|undefined)} + */ + +function checkCookieSupport() { + if (window.navigator.cookieEnabled || !!document.cookie.length) { + return true; + } +} +/** + * 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 ".concat(numRequiredCalls)); + } + + var numCalls = 0; + return function () { + numCalls++; + + if (numCalls === numRequiredCalls) { + func.apply(this, arguments); + } + }; +} +/** + * https://stackoverflow.com/a/34890276/428704 + * @export + * @param {array} xs + * @param {string} key + * @returns {Object} {${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; + }, {}); +} +/** + * 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', 'adpod']; + var types = Object.keys(mediaTypes); + + if (!types.every(function (type) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(SUPPORTED_MEDIA_TYPES, type); + })) { + return false; + } + + if (mediaTypes.video && mediaTypes.video.context) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(SUPPORTED_STREAM_TYPES, mediaTypes.video.context); + } + + return true; +} +function getBidderRequest(bidRequests, bidder, adUnitCode) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(bidRequests, function (request) { + return request.bids.filter(function (bid) { + return bid.bidder === bidder && bid.adUnitCode === adUnitCode; + }).length > 0; + }) || { + start: null, + auctionId: null + }; +} +/** + * Returns user configured bidder params from adunit + * @param {Object} adUnits + * @param {string} adUnitCode code + * @param {string} bidder code + * @return {Array} user configured param for the given bidder adunit configuration + */ + +function getUserConfiguredParams(adUnits, adUnitCode, bidder) { + return adUnits.filter(function (adUnit) { + return adUnit.code === adUnitCode; + }).map(function (adUnit) { + return adUnit.bids; + }).reduce(flatten, []).filter(function (bidderData) { + return bidderData.bidder === bidder; + }).map(function (bidderData) { + return bidderData.params || {}; + }); +} +/** + * 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); + }; +} +/** + * @summary Uses the adUnit's code in order to find a matching gptSlot on the page + */ + +function getGptSlotInfoForAdUnitCode(adUnitCode) { + var matchingSlot; + + if (isGptPubadsDefined()) { + // find the first matching gpt slot on the page + matchingSlot = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(window.googletag.pubads().getSlots(), isSlotMatchingAdUnitCode(adUnitCode)); + } + + if (matchingSlot) { + return { + gptSlot: matchingSlot.getAdUnitPath(), + divId: matchingSlot.getSlotElementId() + }; + } + + return {}; +} +; +/** + * 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 ".concat(adUnit.code, " is a ").concat(mediaType, " ad unit\n containing bidders that don't support ").concat(mediaType, ": ").concat(bidder, ".\n This bidder won't fetch demand.\n "); +} +/** + * 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; + } +} +/** + * Converts a string value in camel-case to underscore eg 'placementId' becomes 'placement_id' + * @param {string} value string value to convert + */ + +function convertCamelToUnderscore(value) { + return value.replace(/(?:^|\.?)([A-Z])/g, function (x, y) { + return '_' + y.toLowerCase(); + }).replace(/^_/, ''); +} +/** + * Returns a new object with undefined properties removed from given object + * @param obj the object to clean + */ + +function cleanObj(obj) { + return Object.keys(obj).reduce(function (newObj, key) { + if (typeof obj[key] !== 'undefined') { + newObj[key] = obj[key]; + } + + return newObj; + }, {}); +} +/** + * Create a new object with selected properties. Also allows property renaming and transform functions. + * @param obj the original object + * @param properties An array of desired properties + */ + +function pick(obj, properties) { + if (_typeof(obj) !== 'object') { + return {}; + } + + return properties.reduce(function (newObj, prop, i) { + if (typeof prop === 'function') { + return newObj; + } + + var newProp = prop; + var match = prop.match(/^(.+?)\sas\s(.+?)$/i); + + if (match) { + prop = match[1]; + newProp = match[2]; + } + + var value = obj[prop]; + + if (typeof properties[i + 1] === 'function') { + value = properties[i + 1](value, newObj); + } + + if (typeof value !== 'undefined') { + newObj[newProp] = value; + } + + return newObj; + }, {}); +} +/** + * Converts an object of arrays (either strings or numbers) into an array of objects containing key and value properties + * normally read from bidder params + * eg { foo: ['bar', 'baz'], fizz: ['buzz'] } + * becomes [{ key: 'foo', value: ['bar', 'baz']}, {key: 'fizz', value: ['buzz']}] + * @param {Object} keywords object of arrays representing keyvalue pairs + * @param {string} paramName name of parent object (eg 'keywords') containing keyword data, used in error handling + */ + +function transformBidderParamKeywords(keywords) { + var paramName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'keywords'; + var arrs = []; + + _each(keywords, function (v, k) { + if (isArray(v)) { + var values = []; + + _each(v, function (val) { + val = getValueString(paramName + '.' + k, val); + + if (val || val === '') { + values.push(val); + } + }); + + v = values; + } else { + v = getValueString(paramName + '.' + k, v); + + if (isStr(v)) { + v = [v]; + } else { + return; + } // unsuported types - don't send a key + + } + + arrs.push({ + key: k, + value: v + }); + }); + + return arrs; +} +/** + * 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; + } +} + +function convertTypes(types, params) { + Object.keys(types).forEach(function (key) { + if (params[key]) { + if (isFn(types[key])) { + params[key] = types[key](params[key]); + } else { + params[key] = tryConvertType(types[key], params[key]); + } // don't send invalid values + + + if (isNaN(params[key])) { + delete params.key; + } + } + }); + return params; +} +function isArrayOfNums(val, size) { + return isArray(val) && (size ? val.length === size : true) && val.every(function (v) { + return isInteger(v); + }); +} +/** + * Creates an array of n length and fills each item with the given value + */ + +function fill(value, length) { + var newArray = []; + + for (var i = 0; i < length; i++) { + var valueToPush = isPlainObject(value) ? deepClone(value) : value; + newArray.push(valueToPush); + } + + return newArray; +} +/** + * http://npm.im/chunk + * Returns an array with *size* chunks from given array + * + * Example: + * ['a', 'b', 'c', 'd', 'e'] chunked by 2 => + * [['a', 'b'], ['c', 'd'], ['e']] + */ + +function chunk(array, size) { + var newArray = []; + + for (var i = 0; i < Math.ceil(array.length / size); i++) { + var start = i * size; + var end = start + size; + newArray.push(array.slice(start, end)); + } + + return newArray; +} +function getMinValueFromArray(array) { + return Math.min.apply(Math, _toConsumableArray(array)); +} +function getMaxValueFromArray(array) { + return Math.max.apply(Math, _toConsumableArray(array)); +} +/** + * This function will create compare function to sort on object property + * @param {string} property + * @returns {function} compare function to be used in sorting + */ + +function compareOn(property) { + return function compare(a, b) { + if (a[property] < b[property]) { + return 1; + } + + if (a[property] > b[property]) { + return -1; + } + + return 0; + }; +} +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 "".concat(k, "[]=").concat(v); + }).join('&') : "".concat(k, "=").concat(query[k]); + }).join('&'); +} +function parseUrl(url, options) { + var parsed = document.createElement('a'); + + if (options && 'noDecodeWholeURL' in options && options.noDecodeWholeURL) { + parsed.href = url; + } else { + parsed.href = decodeURIComponent(url); + } // in window.location 'search' is string, not object + + + var qsAsString = options && 'decodeSearchAsString' in options && options.decodeSearchAsString; + return { + href: parsed.href, + protocol: (parsed.protocol || '').replace(/:$/, ''), + hostname: parsed.hostname, + port: +parsed.port, + pathname: parsed.pathname.replace(/^(?!\/)/, '/'), + search: qsAsString ? parsed.search : internal.parseQS(parsed.search || ''), + hash: (parsed.hash || '').replace(/^#/, ''), + host: parsed.host || window.location.host + }; +} +function buildUrl(obj) { + return (obj.protocol || 'http') + '://' + (obj.host || obj.hostname + (obj.port ? ":".concat(obj.port) : '')) + (obj.pathname || '') + (obj.search ? "?".concat(internal.formatQS(obj.search || '')) : '') + (obj.hash ? "#".concat(obj.hash) : ''); +} +/** + * This function deeply compares two objects checking for their equivalence. + * @param {Object} obj1 + * @param {Object} obj2 + * @returns {boolean} + */ + +function deepEqual(obj1, obj2) { + if (obj1 === obj2) return true;else if (_typeof(obj1) === 'object' && obj1 !== null && _typeof(obj2) === 'object' && obj2 !== null) { + if (Object.keys(obj1).length !== Object.keys(obj2).length) return false; + + for (var prop in obj1) { + if (obj2.hasOwnProperty(prop)) { + if (!deepEqual(obj1[prop], obj2[prop])) { + return false; + } + } else { + return false; + } + } + + return true; + } else { + return false; + } +} +function mergeDeep(target) { + for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + if (!sources.length) return target; + var source = sources.shift(); + + if (isPlainObject(target) && isPlainObject(source)) { + for (var key in source) { + if (isPlainObject(source[key])) { + if (!target[key]) _extends(target, _defineProperty({}, key, {})); + mergeDeep(target[key], source[key]); + } else if (isArray(source[key])) { + if (!target[key]) { + _extends(target, _defineProperty({}, key, source[key])); + } else if (isArray(target[key])) { + target[key] = target[key].concat(source[key]); + } + } else { + _extends(target, _defineProperty({}, key, source[key])); + } + } + } + + return mergeDeep.apply(void 0, [target].concat(sources)); +} + +/***/ }), + +/***/ 1: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (immutable) */ __webpack_exports__["registerBidder"] = registerBidder; +/* harmony export (immutable) */ __webpack_exports__["newBidder"] = newBidder; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerSyncInner", function() { return registerSyncInner; }); +/* harmony export (immutable) */ __webpack_exports__["preloadBidderMappingFile"] = preloadBidderMappingFile; +/* harmony export (immutable) */ __webpack_exports__["getIabSubCategory"] = getIabSubCategory; +/* harmony export (immutable) */ __webpack_exports__["isValid"] = isValid; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adapter_js__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__userSync_js__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__video_js__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__storageManager_js__ = __webpack_require__(9); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + + + + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_14__storageManager_js__["a" /* getCoreStorageManager */])('bidderFactory'); +/** + * 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. + * @property {function(object): object} transformBidParams Updates bid params before creating bid request + }} + */ + +/** + * @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 {object} [native] Object for storing native creative assets + * @property {object} [video] Object for storing video response data + * @property {object} [meta] Object for storing bid meta data + * @property {string} [meta.primaryCatId] The IAB primary category ID + * @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']; +var DEFAULT_REFRESHIN_DAYS = 1; +/** + * 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); + __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].registerBidAdapter(bidder, spec.code, mediaTypes); + } + + putBidder(spec); + + if (Array.isArray(spec.aliases)) { + spec.aliases.forEach(function (alias) { + var aliasCode = alias; + var gvlid; + + if (Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["isPlainObject"])(alias)) { + aliasCode = alias.code; + gvlid = alias.gvlid; + } + + __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].aliasRegistry[aliasCode] = spec.code; + putBidder(_extends({}, spec, { + code: aliasCode, + gvlid: gvlid + })); + }); + } +} +/** + * 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 __WEBPACK_IMPORTED_MODULE_0__adapter_js__["a" /* default */](spec.code), { + getSpec: function getSpec() { + return Object.freeze(spec); + }, + registerSyncs: registerSyncs, + callBids: function callBids(bidderRequest, addBidResponse, done, ajax, onTimelyResponse, configEnabledCallback) { + 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() { + done(); + __WEBPACK_IMPORTED_MODULE_8__events_js___default.a.emit(__WEBPACK_IMPORTED_MODULE_7__constants_json___default.a.EVENTS.BIDDER_DONE, bidderRequest); + registerSyncs(responses, bidderRequest.gdprConsent, bidderRequest.uspConsent); + } + + 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 = Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["delayExecution"])(configEnabledCallback(afterAllResponses), requests.length); + requests.forEach(processRequest); + + function formatGetParameters(data) { + if (data) { + return "?".concat(_typeof(data) === 'object' ? Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["parseQueryStringParameters"])(data) : data); + } + + return ''; + } + + function processRequest(request) { + switch (request.method) { + case 'GET': + ajax("".concat(request.url).concat(formatGetParameters(request.data)), { + success: configEnabledCallback(onSuccess), + error: onFailure + }, undefined, _extends({ + method: 'GET', + withCredentials: true + }, request.options)); + break; + + case 'POST': + ajax(request.url, { + success: configEnabledCallback(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: + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Skipping invalid request from ".concat(spec.code, ". Request type ").concat(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) { + onTimelyResponse(spec.code); + + 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; + + try { + bids = spec.interpretResponse(response, request); + } catch (err) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Bidder ".concat(spec.code, " failed to interpret the server's response. Continuing without bids"), null, err); + onResponse(); + return; + } + + if (bids) { + if (Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["isArray"])(bids)) { + bids.forEach(addBidUsingRequestMap); + } else { + addBidUsingRequestMap(bids); + } + } + + onResponse(bids); + + function addBidUsingRequestMap(bid) { + var bidRequest = bidRequestMap[bid.requestId]; + + if (bidRequest) { + // creating a copy of original values as cpm and currency are modified later + bid.originalCpm = bid.cpm; + bid.originalCurrency = bid.currency; + bid.meta = bid.meta || _extends({}, bid[bidRequest.bidder]); + + var prebidBid = _extends(Object(__WEBPACK_IMPORTED_MODULE_3__bidfactory_js__["a" /* createBid */])(__WEBPACK_IMPORTED_MODULE_7__constants_json___default.a.STATUS.GOOD, bidRequest), bid); + + addBidWithCode(bidRequest.adUnitCode, prebidBid); + } else { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Bidder ".concat(spec.code, " made bid for unknown request ID: ").concat(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) { + onTimelyResponse(spec.code); + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Server call for ".concat(spec.code, " failed: ").concat(err, ". Continuing without bids.")); + onResponse(); + } + } + } + }); + + function registerSyncs(responses, gdprConsent, uspConsent) { + registerSyncInner(spec, responses, gdprConsent, uspConsent); + } + + function filterAndWarn(bid) { + if (!spec.isBidRequestValid(bid)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Invalid bid sent to bidder ".concat(spec.code, ": ").concat(JSON.stringify(bid))); + return false; + } + + return true; + } +} +var registerSyncInner = Object(__WEBPACK_IMPORTED_MODULE_13__hook_js__["b" /* hook */])('async', function (spec, responses, gdprConsent, uspConsent) { + var aliasSyncEnabled = __WEBPACK_IMPORTED_MODULE_2__config_js__["b" /* config */].getConfig('userSync.aliasSyncEnabled'); + + if (spec.getUserSyncs && (aliasSyncEnabled || !__WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].aliasRegistry[spec.code])) { + var filterConfig = __WEBPACK_IMPORTED_MODULE_2__config_js__["b" /* config */].getConfig('userSync.filterSettings'); + var syncs = spec.getUserSyncs({ + iframeEnabled: !!(filterConfig && (filterConfig.iframe || filterConfig.all)), + pixelEnabled: !!(filterConfig && (filterConfig.image || filterConfig.all)) + }, responses, gdprConsent, uspConsent); + + if (syncs) { + if (!Array.isArray(syncs)) { + syncs = [syncs]; + } + + syncs.forEach(function (sync) { + __WEBPACK_IMPORTED_MODULE_4__userSync_js__["a" /* userSync */].registerSync(sync.type, spec.code, sync.url); + }); + } + } +}, 'registerSyncs'); +function preloadBidderMappingFile(fn, adUnits) { + if (!__WEBPACK_IMPORTED_MODULE_2__config_js__["b" /* config */].getConfig('adpod.brandCategoryExclusion')) { + return fn.call(this, adUnits); + } + + var adPodBidders = adUnits.filter(function (adUnit) { + return Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["deepAccess"])(adUnit, 'mediaTypes.video.context') === __WEBPACK_IMPORTED_MODULE_12__mediaTypes_js__["a" /* ADPOD */]; + }).map(function (adUnit) { + return adUnit.bids.map(function (bid) { + return bid.bidder; + }); + }).reduce(__WEBPACK_IMPORTED_MODULE_11__utils_js__["flatten"], []).filter(__WEBPACK_IMPORTED_MODULE_11__utils_js__["uniques"]); + adPodBidders.forEach(function (bidder) { + var bidderSpec = __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].getBidAdapter(bidder); + + if (bidderSpec.getSpec().getMappingFileInfo) { + var info = bidderSpec.getSpec().getMappingFileInfo(); + var refreshInDays = info.refreshInDays ? info.refreshInDays : DEFAULT_REFRESHIN_DAYS; + var key = info.localStorageKey ? info.localStorageKey : bidderSpec.getSpec().code; + var mappingData = storage.getDataFromLocalStorage(key); + + try { + mappingData = mappingData ? JSON.parse(mappingData) : undefined; + + if (!mappingData || Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["timestamp"])() > mappingData.lastUpdated + refreshInDays * 24 * 60 * 60 * 1000) { + Object(__WEBPACK_IMPORTED_MODULE_10__ajax_js__["a" /* ajax */])(info.url, { + success: function success(response) { + try { + response = JSON.parse(response); + var mapping = { + lastUpdated: Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["timestamp"])(), + mapping: response.mapping + }; + storage.setDataInLocalStorage(key, JSON.stringify(mapping)); + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to parse ".concat(bidder, " bidder translation mapping file")); + } + }, + error: function error() { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to load ".concat(bidder, " bidder translation file")); + } + }); + } + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to parse ".concat(bidder, " bidder translation mapping file")); + } + } + }); + fn.call(this, adUnits); +} +Object(__WEBPACK_IMPORTED_MODULE_13__hook_js__["a" /* getHook */])('checkAdUnitSetup').before(preloadBidderMappingFile); +/** + * Reads the data stored in localstorage and returns iab subcategory + * @param {string} bidderCode bidderCode + * @param {string} category bidders category + */ + +function getIabSubCategory(bidderCode, category) { + var bidderSpec = __WEBPACK_IMPORTED_MODULE_1__adapterManager_js__["default"].getBidAdapter(bidderCode); + + if (bidderSpec.getSpec().getMappingFileInfo) { + var info = bidderSpec.getSpec().getMappingFileInfo(); + var key = info.localStorageKey ? info.localStorageKey : bidderSpec.getBidderCode(); + var data = storage.getDataFromLocalStorage(key); + + if (data) { + try { + data = JSON.parse(data); + } catch (error) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])("Failed to parse ".concat(bidderCode, " mapping data stored in local storage")); + } + + return data.mapping[category] ? data.mapping[category] : null; + } + } +} // check that the bid has a width and height set + +function validBidSize(adUnitCode, bid, bidRequests) { + if ((bid.width || parseInt(bid.width, 10) === 0) && (bid.height || parseInt(bid.height, 10) === 0)) { + bid.width = parseInt(bid.width, 10); + bid.height = parseInt(bid.height, 10); + return true; + } + + var adUnit = Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["getBidderRequest"])(bidRequests, bid.bidderCode, adUnitCode); + var sizes = adUnit && adUnit.bids && adUnit.bids[0] && adUnit.bids[0].sizes; + var parsedSizes = Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["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 = parseInt(width, 10); + bid.height = parseInt(height, 10); + 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 __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default()(bidKeys, key) && !__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default()([undefined, null], bid[key]); + }); + } + + function errorMessage(msg) { + return "Invalid bid from ".concat(bid.bidderCode, ". Ignoring bid: ").concat(msg); + } + + if (!adUnitCode) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])('No adUnitCode was supplied to addBidResponse.'); + return false; + } + + if (!bid) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logWarn"])("Some adapter tried to add an undefined bid for ".concat(adUnitCode, ".")); + return false; + } + + if (!hasValidKeys()) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage("Bidder ".concat(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' && !Object(__WEBPACK_IMPORTED_MODULE_5__native_js__["f" /* nativeBidIsValid */])(bid, bidRequests)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage('Native bid missing some required properties.')); + return false; + } + + if (bid.mediaType === 'video' && !Object(__WEBPACK_IMPORTED_MODULE_6__video_js__["d" /* isValidVideoBid */])(bid, bidRequests)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage("Video bid does not have required vastUrl or renderer property")); + return false; + } + + if (bid.mediaType === 'banner' && !validBidSize(adUnitCode, bid, bidRequests)) { + Object(__WEBPACK_IMPORTED_MODULE_11__utils_js__["logError"])(errorMessage("Banner bids require a width and height")); + return false; + } + + return true; +} + +/***/ }), + +/***/ 10: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(96); + +module.exports = parent; + + +/***/ }), + +/***/ 100: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : typeof detection == 'function' ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), + +/***/ 101: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); +var isArray = __webpack_require__(102); +var wellKnownSymbol = __webpack_require__(19); + +var SPECIES = wellKnownSymbol('species'); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.github.io/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); +}; + + +/***/ }), + +/***/ 102: +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(48); + +// `IsArray` abstract operation +// https://tc39.github.io/ecma262/#sec-isarray +module.exports = Array.isArray || function isArray(arg) { + return classof(arg) == 'Array'; +}; + + +/***/ }), + +/***/ 103: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var createNonEnumerableProperty = __webpack_require__(29); + +module.exports = function (key, value) { + try { + createNonEnumerableProperty(global, key, value); + } catch (error) { + global[key] = value; + } return value; +}; + + +/***/ }), + +/***/ 104: +/***/ (function(module, exports, __webpack_require__) { + +var NATIVE_SYMBOL = __webpack_require__(75); + +module.exports = NATIVE_SYMBOL + // eslint-disable-next-line no-undef + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), + +/***/ 105: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(106); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('Array', 'includes'); + + +/***/ }), + +/***/ 106: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var $includes = __webpack_require__(76).includes; +var addToUnscopables = __webpack_require__(51); +var arrayMethodUsesToLength = __webpack_require__(60); + +var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + +// `Array.prototype.includes` method +// https://tc39.github.io/ecma262/#sec-array.prototype.includes +$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('includes'); + + +/***/ }), + +/***/ 107: +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(58); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toInteger(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), + +/***/ 108: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(109); +__webpack_require__(126); +__webpack_require__(87); +__webpack_require__(128); +var path = __webpack_require__(42); + +module.exports = path.Set; + + +/***/ }), + +/***/ 109: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var collection = __webpack_require__(110); +var collectionStrong = __webpack_require__(115); + +// `Set` constructor +// https://tc39.github.io/ecma262/#sec-set-objects +module.exports = collection('Set', function (init) { + return function Set() { return init(this, arguments.length ? arguments[0] : undefined); }; +}, collectionStrong); + + +/***/ }), + +/***/ 11: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = Renderer; +/* harmony export (immutable) */ __webpack_exports__["c"] = isRendererRequired; +/* harmony export (immutable) */ __webpack_exports__["b"] = executeRenderer; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adloader_js__ = __webpack_require__(39); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); + + + +var moduleCode = 'outstream'; +/** + * @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, + adUnitCode = options.adUnitCode; + 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 loadExternalScript, at which point the the command + // queue will be processed + + this.loaded = loaded; + this.cmd = []; + + this.push = function (func) { + if (typeof func !== 'function') { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["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(); + }; // use a function, not an arrow, in order to be able to pass "arguments" through + + + this.render = function () { + if (!isRendererDefinedOnAdUnit(adUnitCode)) { + // we expect to load a renderer url once only so cache the request to load script + Object(__WEBPACK_IMPORTED_MODULE_0__adloader_js__["a" /* loadExternalScript */])(url, moduleCode, this.callback); + } else { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"]("External Js not loaded by Renderer since renderer url and callback is already defined on adUnit ".concat(adUnitCode)); + } + + if (this._render) { + this._render.apply(this, arguments); // _render is expected to use push as appropriate + + } else { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"]("No render function was provided, please use .setRender on the renderer"); + } + }.bind(this); // bind the function to this object to avoid 'this' errors + +} + +Renderer.install = function (_ref) { + var url = _ref.url, + config = _ref.config, + id = _ref.id, + callback = _ref.callback, + loaded = _ref.loaded, + adUnitCode = _ref.adUnitCode; + return new Renderer({ + url: url, + config: config, + id: id, + callback: callback, + loaded: loaded, + adUnitCode: adUnitCode + }); +}; + +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](); + } + + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logMessage"]("Prebid Renderer event for id ".concat(id, " type ").concat(eventName)); +}; +/* + * Calls functions that were pushed to the command queue before the + * renderer was loaded by `loadExternalScript` + */ + + +Renderer.prototype.process = function () { + while (this.cmd.length > 0) { + try { + this.cmd.shift().call(); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('Error processing Renderer command: ', error); + } + } +}; +/** + * Checks whether creative rendering should be done by Renderer or not. + * @param {Object} renderer Renderer object installed by adapter + * @returns {Boolean} + */ + + +function isRendererRequired(renderer) { + return !!(renderer && renderer.url); +} +/** + * Render the bid returned by the adapter + * @param {Object} renderer Renderer object installed by adapter + * @param {Object} bid Bid response + */ + +function executeRenderer(renderer, bid) { + renderer.render(bid); +} + +function isRendererDefinedOnAdUnit(adUnitCode) { + var adUnits = pbjs.adUnits; + var adUnit = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(adUnits, function (adUnit) { + return adUnit.code === adUnitCode; + }); + return !!(adUnit && adUnit.renderer && adUnit.renderer.url && adUnit.renderer.render); +} + +/***/ }), + +/***/ 110: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var global = __webpack_require__(22); +var InternalMetadataModule = __webpack_require__(78); +var fails = __webpack_require__(28); +var createNonEnumerableProperty = __webpack_require__(29); +var iterate = __webpack_require__(17); +var anInstance = __webpack_require__(81); +var isObject = __webpack_require__(23); +var setToStringTag = __webpack_require__(64); +var defineProperty = __webpack_require__(31).f; +var forEach = __webpack_require__(56).forEach; +var DESCRIPTORS = __webpack_require__(27); +var InternalStateModule = __webpack_require__(54); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var exported = {}; + var Constructor; + + if (!DESCRIPTORS || typeof NativeConstructor != 'function' + || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); })) + ) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.REQUIRED = true; + } else { + Constructor = wrapper(function (target, iterable) { + setInternalState(anInstance(target, Constructor, CONSTRUCTOR_NAME), { + type: CONSTRUCTOR_NAME, + collection: new NativeConstructor() + }); + if (iterable != undefined) iterate(iterable, target[ADDER], target, IS_MAP); + }); + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) { + var IS_ADDER = KEY == 'add' || KEY == 'set'; + if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) { + createNonEnumerableProperty(Constructor.prototype, KEY, function (a, b) { + var collection = getInternalState(this).collection; + if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false; + var result = collection[KEY](a === 0 ? 0 : a, b); + return IS_ADDER ? this : result; + }); + } + }); + + IS_WEAK || defineProperty(Constructor.prototype, 'size', { + configurable: true, + get: function () { + return getInternalState(this).collection.size; + } + }); + } + + setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true); + + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, forced: true }, exported); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; +}; + + +/***/ }), + +/***/ 111: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +module.exports = !fails(function () { + return Object.isExtensible(Object.preventExtensions({})); +}); + + +/***/ }), + +/***/ 112: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(63); +var classof = __webpack_require__(62); + +// `Object.prototype.toString` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), + +/***/ 113: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var inspectSource = __webpack_require__(114); + +var WeakMap = global.WeakMap; + +module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); + + +/***/ }), + +/***/ 114: +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(74); + +var functionToString = Function.toString; + +// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper +if (typeof store.inspectSource != 'function') { + store.inspectSource = function (it) { + return functionToString.call(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), + +/***/ 115: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var defineProperty = __webpack_require__(31).f; +var create = __webpack_require__(82); +var redefineAll = __webpack_require__(120); +var bind = __webpack_require__(21); +var anInstance = __webpack_require__(81); +var iterate = __webpack_require__(17); +var defineIterator = __webpack_require__(66); +var setSpecies = __webpack_require__(125); +var DESCRIPTORS = __webpack_require__(27); +var fastKey = __webpack_require__(78).fastKey; +var InternalStateModule = __webpack_require__(54); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, CONSTRUCTOR_NAME); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS) that.size = 0; + if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP); + }); + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS) state.size++; + else that.size++; + // add to index + if (index !== 'F') state.index[index] = entry; + } return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + state.first = state.last = undefined; + if (DESCRIPTORS) state.size = 0; + else that.size = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (DESCRIPTORS) state.size--; + else that.size--; + } return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key) { + return !!getEntry(this, key); + } + }); + + redefineAll(C.prototype, IS_MAP ? { + // 23.1.3.6 Map.prototype.get(key) + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // 23.1.3.9 Map.prototype.set(key, value) + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) defineProperty(C.prototype, 'size', { + get: function () { + return getInternalState(this).size; + } + }); + return C; + }, + setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return { value: undefined, done: true }; + } + // return step by kind + if (kind == 'keys') return { value: entry.key, done: false }; + if (kind == 'values') return { value: entry.value, done: false }; + return { value: [entry.key, entry.value], done: false }; + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(CONSTRUCTOR_NAME); + } +}; + + +/***/ }), + +/***/ 116: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var definePropertyModule = __webpack_require__(31); +var anObject = __webpack_require__(15); +var objectKeys = __webpack_require__(117); + +// `Object.defineProperties` method +// https://tc39.github.io/ecma262/#sec-object.defineproperties +module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); + return O; +}; + + +/***/ }), + +/***/ 117: +/***/ (function(module, exports, __webpack_require__) { + +var internalObjectKeys = __webpack_require__(118); +var enumBugKeys = __webpack_require__(83); + +// `Object.keys` method +// https://tc39.github.io/ecma262/#sec-object.keys +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + + +/***/ }), + +/***/ 118: +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(24); +var toIndexedObject = __webpack_require__(47); +var indexOf = __webpack_require__(76).indexOf; +var hiddenKeys = __webpack_require__(53); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + return result; +}; + + +/***/ }), + +/***/ 119: +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(25); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), + +/***/ 12: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(105); + +module.exports = parent; + + +/***/ }), + +/***/ 120: +/***/ (function(module, exports, __webpack_require__) { + +var redefine = __webpack_require__(84); + +module.exports = function (target, src, options) { + for (var key in src) { + if (options && options.unsafe && target[key]) target[key] = src[key]; + else redefine(target, key, src[key], options); + } return target; +}; + + +/***/ }), + +/***/ 121: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var IteratorPrototype = __webpack_require__(85).IteratorPrototype; +var create = __webpack_require__(82); +var createPropertyDescriptor = __webpack_require__(46); +var setToStringTag = __webpack_require__(64); +var Iterators = __webpack_require__(37); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + + +/***/ }), + +/***/ 122: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + + +/***/ }), + +/***/ 123: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var aPossiblePrototype = __webpack_require__(124); + +// `Object.setPrototypeOf` method +// https://tc39.github.io/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +/* eslint-disable no-proto */ +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + + +/***/ }), + +/***/ 124: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +module.exports = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + ' as a prototype'); + } return it; +}; + + +/***/ }), + +/***/ 125: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var getBuiltIn = __webpack_require__(25); +var definePropertyModule = __webpack_require__(31); +var wellKnownSymbol = __webpack_require__(19); +var DESCRIPTORS = __webpack_require__(27); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule.f; + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineProperty(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), + +/***/ 126: +/***/ (function(module, exports) { + +// empty + + +/***/ }), + +/***/ 127: +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(58); +var requireObjectCoercible = __webpack_require__(49); + +// `String.prototype.{ codePointAt, at }` methods implementation +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING ? S.charAt(position) : first + : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), + +/***/ 128: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(129); +var DOMIterables = __webpack_require__(130); +var global = __webpack_require__(22); +var classof = __webpack_require__(62); +var createNonEnumerableProperty = __webpack_require__(29); +var Iterators = __webpack_require__(37); +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +for (var COLLECTION_NAME in DOMIterables) { + var Collection = global[COLLECTION_NAME]; + var CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + Iterators[COLLECTION_NAME] = Iterators.Array; +} + + +/***/ }), + +/***/ 129: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var toIndexedObject = __webpack_require__(47); +var addToUnscopables = __webpack_require__(51); +var Iterators = __webpack_require__(37); +var InternalStateModule = __webpack_require__(54); +var defineIterator = __webpack_require__(66); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.github.io/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.github.io/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.github.io/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.github.io/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject +// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject +Iterators.Arguments = Iterators.Array; + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + + +/***/ }), + +/***/ 13: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hook; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getHook; }); +/* harmony export (immutable) */ __webpack_exports__["d"] = setupBeforeHookFnOnce; +/* harmony export (immutable) */ __webpack_exports__["c"] = module; +/* harmony export (immutable) */ __webpack_exports__["e"] = submodule; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js__ = __webpack_require__(161); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js__); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + +var hook = __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default()({ + ready: __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default.a.SYNC | __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default.a.ASYNC | __WEBPACK_IMPORTED_MODULE_0_fun_hooks_no_eval_index_js___default.a.QUEUE +}); +var getHook = hook.get; +function setupBeforeHookFnOnce(baseFn, hookFn) { + var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 15; + var result = baseFn.getHooks({ + hook: hookFn + }); + + if (result.length === 0) { + baseFn.before(hookFn, priority); + } +} +function module(name, install) { + hook('async', function (submodules) { + submodules.forEach(function (args) { + return install.apply(void 0, _toConsumableArray(args)); + }); + }, name)([]); // will be queued until hook.ready() called in pbjs.processQueue(); +} +function submodule(name) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + getHook(name).before(function (next, modules) { + modules.push(args); + next(modules); + }); +} + +/***/ }), + +/***/ 130: +/***/ (function(module, exports) { + +// iterable DOM collections +// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods +module.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 +}; + + +/***/ }), + +/***/ 131: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var from = __webpack_require__(132); + +// `Set.from` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from +$({ target: 'Set', stat: true }, { + from: from +}); + + +/***/ }), + +/***/ 132: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://tc39.github.io/proposal-setmap-offrom/ +var aFunction = __webpack_require__(18); +var bind = __webpack_require__(21); +var iterate = __webpack_require__(17); + +module.exports = function from(source /* , mapFn, thisArg */) { + var length = arguments.length; + var mapFn = length > 1 ? arguments[1] : undefined; + var mapping, A, n, boundFunction; + aFunction(this); + mapping = mapFn !== undefined; + if (mapping) aFunction(mapFn); + if (source == undefined) return new this(); + A = []; + if (mapping) { + n = 0; + boundFunction = bind(mapFn, length > 2 ? arguments[2] : undefined, 2); + iterate(source, function (nextItem) { + A.push(boundFunction(nextItem, n++)); + }); + } else { + iterate(source, A.push, A); + } + return new this(A); +}; + + +/***/ }), + +/***/ 133: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var of = __webpack_require__(134); + +// `Set.of` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of +$({ target: 'Set', stat: true }, { + of: of +}); + + +/***/ }), + +/***/ 134: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://tc39.github.io/proposal-setmap-offrom/ +module.exports = function of() { + var length = arguments.length; + var A = new Array(length); + while (length--) A[length] = arguments[length]; + return new this(A); +}; + + +/***/ }), + +/***/ 135: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var collectionAddAll = __webpack_require__(136); + +// `Set.prototype.addAll` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + addAll: function addAll(/* ...elements */) { + return collectionAddAll.apply(this, arguments); + } +}); + + +/***/ }), + +/***/ 136: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); + +// https://github.com/tc39/collection-methods +module.exports = function (/* ...elements */) { + var set = anObject(this); + var adder = aFunction(set.add); + for (var k = 0, len = arguments.length; k < len; k++) { + adder.call(set, arguments[k]); + } + return set; +}; + + +/***/ }), + +/***/ 137: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var collectionDeleteAll = __webpack_require__(138); + +// `Set.prototype.deleteAll` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + deleteAll: function deleteAll(/* ...elements */) { + return collectionDeleteAll.apply(this, arguments); + } +}); + + +/***/ }), + +/***/ 138: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); + +// https://github.com/tc39/collection-methods +module.exports = function (/* ...elements */) { + var collection = anObject(this); + var remover = aFunction(collection['delete']); + var allDeleted = true; + var wasDeleted; + for (var k = 0, len = arguments.length; k < len; k++) { + wasDeleted = remover.call(collection, arguments[k]); + allDeleted = allDeleted && wasDeleted; + } + return !!allDeleted; +}; + + +/***/ }), + +/***/ 139: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var bind = __webpack_require__(21); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.every` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + every: function every(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return !iterate(iterator, function (value) { + if (!boundFunction(value, value, set)) return iterate.stop(); + }, undefined, false, true).stopped; + } +}); + + +/***/ }), + +/***/ 14: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var global = __webpack_require__(22); +var getOwnPropertyDescriptor = __webpack_require__(98).f; +var isForced = __webpack_require__(100); +var path = __webpack_require__(42); +var bind = __webpack_require__(21); +var createNonEnumerableProperty = __webpack_require__(29); +var has = __webpack_require__(24); + +var wrapConstructor = function (NativeConstructor) { + var Wrapper = function (a, b, c) { + if (this instanceof NativeConstructor) { + switch (arguments.length) { + case 0: return new NativeConstructor(); + case 1: return new NativeConstructor(a); + case 2: return new NativeConstructor(a, b); + } return new NativeConstructor(a, b, c); + } return NativeConstructor.apply(this, arguments); + }; + Wrapper.prototype = NativeConstructor.prototype; + return Wrapper; +}; + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var PROTO = options.proto; + + var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype; + + var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {}); + var targetPrototype = target.prototype; + + var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE; + var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor; + + for (key in source) { + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contains in native + USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key); + + targetProperty = target[key]; + + if (USE_NATIVE) if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(nativeSource, key); + nativeProperty = descriptor && descriptor.value; + } else nativeProperty = nativeSource[key]; + + // export native or implementation + sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key]; + + if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue; + + // bind timers to global for call from export context + if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global); + // wrap global constructors for prevent changs in this version + else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty); + // make static versions for prototype methods + else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty); + // default case + else resultProperty = sourceProperty; + + // add a flag to not completely full polyfills + if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(resultProperty, 'sham', true); + } + + target[key] = resultProperty; + + if (PROTO) { + VIRTUAL_PROTOTYPE = TARGET + 'Prototype'; + if (!has(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } + // export virtual prototype methods + path[VIRTUAL_PROTOTYPE][key] = sourceProperty; + // export real prototype methods + if (options.real && targetPrototype && !targetPrototype[key]) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } + } + } +}; + + +/***/ }), + +/***/ 140: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.difference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + difference: function difference(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set); + var remover = aFunction(newSet['delete']); + iterate(iterable, function (value) { + remover.call(newSet, value); + }); + return newSet; + } +}); + + +/***/ }), + +/***/ 141: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var bind = __webpack_require__(21); +var speciesConstructor = __webpack_require__(38); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.filter` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + filter: function filter(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(); + var adder = aFunction(newSet.add); + iterate(iterator, function (value) { + if (boundFunction(value, value, set)) adder.call(newSet, value); + }, undefined, false, true); + return newSet; + } +}); + + +/***/ }), + +/***/ 142: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var bind = __webpack_require__(21); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.find` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + find: function find(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate(iterator, function (value) { + if (boundFunction(value, value, set)) return iterate.stop(value); + }, undefined, false, true).result; + } +}); + + +/***/ }), + +/***/ 143: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.intersection` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + intersection: function intersection(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(); + var hasCheck = aFunction(set.has); + var adder = aFunction(newSet.add); + iterate(iterable, function (value) { + if (hasCheck.call(set, value)) adder.call(newSet, value); + }); + return newSet; + } +}); + + +/***/ }), + +/***/ 144: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var iterate = __webpack_require__(17); + +// `Set.prototype.isDisjointFrom` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + isDisjointFrom: function isDisjointFrom(iterable) { + var set = anObject(this); + var hasCheck = aFunction(set.has); + return !iterate(iterable, function (value) { + if (hasCheck.call(set, value) === true) return iterate.stop(); + }).stopped; + } +}); + + +/***/ }), + +/***/ 145: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var getIterator = __webpack_require__(88); +var iterate = __webpack_require__(17); + +// `Set.prototype.isSubsetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + isSubsetOf: function isSubsetOf(iterable) { + var iterator = getIterator(this); + var otherSet = anObject(iterable); + var hasCheck = otherSet.has; + if (typeof hasCheck != 'function') { + otherSet = new (getBuiltIn('Set'))(iterable); + hasCheck = aFunction(otherSet.has); + } + return !iterate(iterator, function (value) { + if (hasCheck.call(otherSet, value) === false) return iterate.stop(); + }, undefined, false, true).stopped; + } +}); + + +/***/ }), + +/***/ 146: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var iterate = __webpack_require__(17); + +// `Set.prototype.isSupersetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + isSupersetOf: function isSupersetOf(iterable) { + var set = anObject(this); + var hasCheck = aFunction(set.has); + return !iterate(iterable, function (value) { + if (hasCheck.call(set, value) === false) return iterate.stop(); + }).stopped; + } +}); + + +/***/ }), + +/***/ 147: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.join` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + join: function join(separator) { + var set = anObject(this); + var iterator = getSetIterator(set); + var sep = separator === undefined ? ',' : String(separator); + var result = []; + iterate(iterator, result.push, result, false, true); + return result.join(sep); + } +}); + + +/***/ }), + +/***/ 148: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var bind = __webpack_require__(21); +var speciesConstructor = __webpack_require__(38); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.map` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + map: function map(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(); + var adder = aFunction(newSet.add); + iterate(iterator, function (value) { + adder.call(newSet, boundFunction(value, value, set)); + }, undefined, false, true); + return newSet; + } +}); + + +/***/ }), + +/***/ 149: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.reduce` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + reduce: function reduce(callbackfn /* , initialValue */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aFunction(callbackfn); + iterate(iterator, function (value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = callbackfn(accumulator, value, value, set); + } + }, undefined, false, true); + if (noInitial) throw TypeError('Reduce of empty set with no initial value'); + return accumulator; + } +}); + + +/***/ }), + +/***/ 15: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +module.exports = function (it) { + if (!isObject(it)) { + throw TypeError(String(it) + ' is not an object'); + } return it; +}; + + +/***/ }), + +/***/ 150: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var anObject = __webpack_require__(15); +var bind = __webpack_require__(21); +var getSetIterator = __webpack_require__(34); +var iterate = __webpack_require__(17); + +// `Set.prototype.some` method +// https://github.com/tc39/proposal-collection-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + some: function some(callbackfn /* , thisArg */) { + var set = anObject(this); + var iterator = getSetIterator(set); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate(iterator, function (value) { + if (boundFunction(value, value, set)) return iterate.stop(); + }, undefined, false, true).stopped; + } +}); + + +/***/ }), + +/***/ 151: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.symmetricDifference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + symmetricDifference: function symmetricDifference(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set); + var remover = aFunction(newSet['delete']); + var adder = aFunction(newSet.add); + iterate(iterable, function (value) { + remover.call(newSet, value) || adder.call(newSet, value); + }); + return newSet; + } +}); + + +/***/ }), + +/***/ 152: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var IS_PURE = __webpack_require__(16); +var getBuiltIn = __webpack_require__(25); +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var speciesConstructor = __webpack_require__(38); +var iterate = __webpack_require__(17); + +// `Set.prototype.union` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: IS_PURE }, { + union: function union(iterable) { + var set = anObject(this); + var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set); + iterate(iterable, aFunction(newSet.add), newSet); + return newSet; + } +}); + + +/***/ }), + +/***/ 153: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(87); +__webpack_require__(154); +var path = __webpack_require__(42); + +module.exports = path.Array.from; + + +/***/ }), + +/***/ 154: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var from = __webpack_require__(155); +var checkCorrectnessOfIteration = __webpack_require__(157); + +var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + Array.from(iterable); +}); + +// `Array.from` method +// https://tc39.github.io/ecma262/#sec-array.from +$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: from +}); + + +/***/ }), + +/***/ 155: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var bind = __webpack_require__(21); +var toObject = __webpack_require__(57); +var callWithSafeIterationClosing = __webpack_require__(80); +var isArrayIteratorMethod = __webpack_require__(79); +var toLength = __webpack_require__(50); +var createProperty = __webpack_require__(156); +var getIteratorMethod = __webpack_require__(61); + +// `Array.from` method implementation +// https://tc39.github.io/ecma262/#sec-array.from +module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = iteratorMethod.call(O); + next = iterator.next; + result = new C(); + for (;!(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = toLength(O.length); + result = new C(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; +}; + + +/***/ }), + +/***/ 156: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var toPrimitive = __webpack_require__(55); +var definePropertyModule = __webpack_require__(31); +var createPropertyDescriptor = __webpack_require__(46); + +module.exports = function (object, key, value) { + var propertyKey = toPrimitive(key); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; +}; + + +/***/ }), + +/***/ 157: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line no-throw-literal + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), + +/***/ 158: +/***/ (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; +} + + +/***/ }), + +/***/ 159: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = dlv; +function dlv(obj, key, def, p, undef) { + key = key.split ? key.split('.') : key; + for (p = 0; p < key.length; p++) { + obj = obj ? obj[key[p]] : undef; + } + return obj === undef ? def : obj; +} + + +/***/ }), + +/***/ 16: +/***/ (function(module, exports) { + +module.exports = true; + + +/***/ }), + +/***/ 160: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony default export */ __webpack_exports__["a"] = (function (obj, keys, val) { + keys.split && (keys=keys.split('.')); + var i=0, l=keys.length, t=obj, x; + for (; i < l; ++i) { + x = t[keys[i]]; + t = t[keys[i]] = (i === l - 1 ? val : (x != null ? x : (!!~keys[i+1].indexOf('.') || !(+keys[i+1] > -1)) ? {} : [])); + } +}); + + +/***/ }), + +/***/ 161: +/***/ (function(module, exports) { + +/* +* @license MIT +* Fun Hooks v0.9.9 +* (c) @snapwich +*/ +create.SYNC = 1; +create.ASYNC = 2; +create.QUEUE = 4; + +var packageName = "fun-hooks"; + +function hasProxy() { + return !!(typeof Proxy === "function" && Proxy.revocable); +} + +var defaults = Object.freeze({ + useProxy: true, + ready: 0 +}); + +var hookableMap = new WeakMap(); + +// detect incorrectly implemented reduce and if found use polyfill +// https://github.com/prebid/Prebid.js/issues/3576 +// polyfill from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce +var reduce = + [1] + .reduce(function(a, b, c) { + return [a, b, c]; + }, 2) + .toString() === "2,1,0" + ? Array.prototype.reduce + : function(callback, initial) { + var o = Object(this); + var len = o.length >>> 0; + var k = 0; + var value; + if (initial) { + value = initial; + } else { + while (k < len && !(k in o)) { + k++; + } + value = o[k++]; + } + while (k < len) { + if (k in o) { + value = callback(value, o[k], k, o); + } + k++; + } + return value; + }; + +function rest(args, skip) { + return Array.prototype.slice.call(args, skip); +} + +var assign = + Object.assign || + function assign(target) { + return reduce.call( + rest(arguments, 1), + function(target, obj) { + if (obj) { + Object.keys(obj).forEach(function(prop) { + target[prop] = obj[prop]; + }); + } + return target; + }, + target + ); + }; + +function runAll(queue) { + var queued; + // eslint-disable-next-line no-cond-assign + while ((queued = queue.shift())) { + queued(); + } +} + +function create(config) { + var hooks = {}; + var postReady = []; + + config = assign({}, defaults, config); + + function dispatch(arg1, arg2) { + if (typeof arg1 === "function") { + return hookFn.call(null, "sync", arg1, arg2); + } else if (typeof arg1 === "string" && typeof arg2 === "function") { + return hookFn.apply(null, arguments); + } else if (typeof arg1 === "object") { + return hookObj.apply(null, arguments); + } + } + + var ready; + if (config.ready) { + dispatch.ready = function() { + ready = true; + runAll(postReady); + }; + } else { + ready = true; + } + + function hookObj(obj, props, objName) { + var walk = true; + if (typeof props === "undefined") { + props = Object.getOwnPropertyNames(obj); + walk = false; + } + var objHooks = {}; + var doNotHook = ["constructor"]; + do { + props = props.filter(function(prop) { + return ( + typeof obj[prop] === "function" && + !(doNotHook.indexOf(prop) !== -1) && + !prop.match(/^_/) + ); + }); + props.forEach(function(prop) { + var parts = prop.split(":"); + var name = parts[0]; + var type = parts[1] || "sync"; + if (!objHooks[name]) { + var fn = obj[name]; + objHooks[name] = obj[name] = hookFn( + type, + fn, + objName ? [objName, name] : undefined + ); + } + }); + obj = Object.getPrototypeOf(obj); + } while (walk && obj); + return objHooks; + } + + /** + * Navigates a string path to return a hookable function. If not found, creates a placeholder for hooks. + * @param {(Array | string)} path + */ + function get(path) { + var parts = Array.isArray(path) ? path : path.split("."); + return reduce.call( + parts, + function(memo, part, i) { + var item = memo[part]; + var installed = false; + if (item) { + return item; + } else if (i === parts.length - 1) { + if (!ready) { + postReady.push(function() { + if (!installed) { + // eslint-disable-next-line no-console + console.warn( + packageName + + ": referenced '" + + path + + "' but it was never created" + ); + } + }); + } + return (memo[part] = newHookable(function(fn) { + memo[part] = fn; + installed = true; + })); + } + return (memo[part] = {}); + }, + hooks + ); + } + + function newHookable(onInstall) { + var before = []; + var after = []; + var generateTrap = function() {}; + + var api = { + before: function(hook, priority) { + return add.call(this, before, "before", hook, priority); + }, + after: function(hook, priority) { + return add.call(this, after, "after", hook, priority); + }, + getHooks: function(match) { + var hooks = before.concat(after); + if (typeof match === "object") { + hooks = hooks.filter(function(entry) { + return Object.keys(match).every(function(prop) { + return entry[prop] === match[prop]; + }); + }); + } + try { + assign(hooks, { + remove: function() { + hooks.forEach(function(entry) { + entry.remove(); + }); + return this; + } + }); + } catch (e) { + console.error( + "error adding `remove` to array, did you modify Array.prototype?" + ); + } + return hooks; + }, + removeAll: function() { + return this.getHooks().remove(); + } + }; + + var meta = { + install: function(type, fn, generate) { + this.type = type; + generateTrap = generate; + generate(before, after); + onInstall && onInstall(fn); + } + }; + + // store meta data related to hookable. use `api.after` since `api` reference is not available on our proxy. + hookableMap.set(api.after, meta); + + return api; + + function add(store, type, hook, priority) { + var entry = { + hook: hook, + type: type, + priority: priority || 10, + remove: function() { + var index = store.indexOf(entry); + if (index !== -1) { + store.splice(index, 1); + generateTrap(before, after); + } + } + }; + store.push(entry); + store.sort(function(a, b) { + return b.priority - a.priority; + }); + generateTrap(before, after); + return this; + } + } + + function hookFn(type, fn, name) { + // check if function has already been wrapped + var meta = fn.after && hookableMap.get(fn.after); + if (meta) { + if (meta.type !== type) { + throw packageName + ": recreated hookable with different type"; + } else { + return fn; + } + } + + var hookable = name ? get(name) : newHookable(); + + var trap; + var hookedFn; + var handlers = { + get: function(target, prop) { + return hookable[prop] || Reflect.get.apply(Reflect, arguments); + } + }; + + if (!ready) { + postReady.push(setTrap); + } + + if (config.useProxy && hasProxy()) { + hookedFn = new Proxy(fn, handlers); + } else { + hookedFn = function() { + return handlers.apply + ? handlers.apply(fn, this, rest(arguments)) + : fn.apply(this, arguments); + }; + assign(hookedFn, hookable); + } + + hookableMap.get(hookedFn.after).install(type, hookedFn, generateTrap); + + return hookedFn; + + // eslint-disable-next-line no-redeclare + function generateTrap(before, after) { + var order = []; + var targetIndex; + if (before.length || after.length) { + before.forEach(addToOrder); + // placeholder for target function wrapper + targetIndex = order.push(undefined) - 1; + after.forEach(addToOrder); + trap = function(target, thisArg, args) { + var curr = 0; + var result; + var callback = + type === "async" && + typeof args[args.length - 1] === "function" && + args.pop(); + function bail(value) { + if (type === "sync") { + result = value; + } else if (callback) { + callback.apply(null, arguments); + } + } + function next(value) { + if (order[curr]) { + var args = rest(arguments); + next.bail = bail; + args.unshift(next); + return order[curr++].apply(thisArg, args); + } + if (type === "sync") { + result = value; + } else if (callback) { + callback.apply(null, arguments); + } + } + order[targetIndex] = function() { + var args = rest(arguments, 1); + if (type === "async" && callback) { + delete next.bail; + args.push(next); + } + var result = target.apply(thisArg, args); + if (type === "sync") { + next(result); + } + }; + next.apply(null, args); + return result; + }; + } else { + trap = undefined; + } + setTrap(); + + function addToOrder(entry) { + order.push(entry.hook); + } + } + + function setTrap() { + if ( + ready || + (type === "sync" && !(config.ready & create.SYNC)) || + (type === "async" && !(config.ready & create.ASYNC)) + ) { + handlers.apply = trap; + } else if (type === "sync" || !(config.ready & create.QUEUE)) { + handlers.apply = function() { + throw packageName + ": hooked function not ready"; + }; + } else { + handlers.apply = function() { + var args = arguments; + postReady.push(function() { + hookedFn.apply(args[1], args[2]); + }); + }; + } + } + } + + dispatch.get = get; + return dispatch; +} + +/* global module */ +module.exports = create; + + +/***/ }), + +/***/ 17: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var isArrayIteratorMethod = __webpack_require__(79); +var toLength = __webpack_require__(50); +var bind = __webpack_require__(21); +var getIteratorMethod = __webpack_require__(61); +var callWithSafeIterationClosing = __webpack_require__(80); + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { + var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); + var iterator, iterFn, index, length, result, next, step; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = toLength(iterable.length); length > index; index++) { + result = AS_ENTRIES + ? boundFunction(anObject(step = iterable[index])[0], step[1]) + : boundFunction(iterable[index]); + if (result && result instanceof Result) return result; + } return new Result(false); + } + iterator = iterFn.call(iterable); + } + + next = iterator.next; + while (!(step = next.call(iterator)).done) { + result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); + if (typeof result == 'object' && result && result instanceof Result) return result; + } return new Result(false); +}; + +iterate.stop = function (result) { + return new Result(true, result); +}; + + +/***/ }), + +/***/ 18: +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') { + throw TypeError(String(it) + ' is not a function'); + } return it; +}; + + +/***/ }), + +/***/ 19: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var shared = __webpack_require__(73); +var has = __webpack_require__(24); +var uid = __webpack_require__(59); +var NATIVE_SYMBOL = __webpack_require__(75); +var USE_SYMBOL_AS_UID = __webpack_require__(104); + +var WellKnownSymbolsStore = shared('wks'); +var Symbol = global.Symbol; +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!has(WellKnownSymbolsStore, name)) { + if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), + +/***/ 2: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return NATIVE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return VIDEO; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return BANNER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ADPOD; }); +/** + * 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 + * @typedef {('adpod')} VideoContext + */ + +/** @type MediaType */ +var NATIVE = 'native'; +/** @type MediaType */ + +var VIDEO = 'video'; +/** @type MediaType */ + +var BANNER = 'banner'; +/** @type VideoContext */ + +var ADPOD = 'adpod'; + +/***/ }), + +/***/ 20: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = getGlobal; +// if $$PREBID_GLOBAL$$ 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 || []; // create a pbjs global pointer + +window._pbjsGlobals = window._pbjsGlobals || []; + +window._pbjsGlobals.push("pbjs"); + +function getGlobal() { + return window.pbjs; +} + +/***/ }), + +/***/ 21: +/***/ (function(module, exports, __webpack_require__) { + +var aFunction = __webpack_require__(18); + +// optional / simple context binding +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 0: return function () { + return fn.call(that); + }; + 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); + }; +}; + + +/***/ }), + +/***/ 215: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(216); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('Array', 'findIndex'); + + +/***/ }), + +/***/ 216: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var $findIndex = __webpack_require__(56).findIndex; +var addToUnscopables = __webpack_require__(51); +var arrayMethodUsesToLength = __webpack_require__(60); + +var FIND_INDEX = 'findIndex'; +var SKIPS_HOLES = true; + +var USES_TO_LENGTH = arrayMethodUsesToLength(FIND_INDEX); + +// Shouldn't skip holes +if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.findIndex` method +// https://tc39.github.io/ecma262/#sec-array.prototype.findindex +$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, { + findIndex: function findIndex(callbackfn /* , that = undefined */) { + return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND_INDEX); + + +/***/ }), + +/***/ 22: +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line no-undef + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func + Function('return this')(); + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(33))) + +/***/ }), + +/***/ 223: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = listenMessagesFromCreative; +/* unused harmony export _sendAdToCreative */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__); +/* 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 = __WEBPACK_IMPORTED_MODULE_2__constants_json__["EVENTS"].BID_WON; +function listenMessagesFromCreative() { + window.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 && data.adId) { + var adObject = __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(__WEBPACK_IMPORTED_MODULE_4__auctionManager_js__["a" /* auctionManager */].getBidsReceived(), function (bid) { + return bid.adId === data.adId; + }); + + if (adObject && data.message === 'Prebid Request') { + _sendAdToCreative(adObject, ev); // save winning bids + + + __WEBPACK_IMPORTED_MODULE_4__auctionManager_js__["a" /* auctionManager */].addWinningBid(adObject); + __WEBPACK_IMPORTED_MODULE_0__events_js___default.a.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 (adObject && data.message === 'Prebid Native') { + if (data.action === 'assetRequest') { + var message = Object(__WEBPACK_IMPORTED_MODULE_1__native_js__["c" /* getAssetMessage */])(data, adObject); + ev.source.postMessage(JSON.stringify(message), ev.origin); + return; + } + + var trackerType = Object(__WEBPACK_IMPORTED_MODULE_1__native_js__["b" /* fireNativeTrackers */])(data, adObject); + + if (trackerType === 'click') { + return; + } + + __WEBPACK_IMPORTED_MODULE_4__auctionManager_js__["a" /* auctionManager */].addWinningBid(adObject); + __WEBPACK_IMPORTED_MODULE_0__events_js___default.a.emit(BID_WON, adObject); + } + } +} + +function _sendAdToCreative(adObject, ev) { + var adId = adObject.adId, + ad = adObject.ad, + adUrl = adObject.adUrl, + width = adObject.width, + height = adObject.height, + renderer = adObject.renderer, + cpm = adObject.cpm; // rendering for outstream safeframe + + if (Object(__WEBPACK_IMPORTED_MODULE_6__Renderer_js__["c" /* isRendererRequired */])(renderer)) { + Object(__WEBPACK_IMPORTED_MODULE_6__Renderer_js__["b" /* executeRenderer */])(renderer, adObject); + } else if (adId) { + resizeRemoteCreative(adObject); + ev.source.postMessage(JSON.stringify({ + message: 'Prebid Response', + ad: Object(__WEBPACK_IMPORTED_MODULE_3__utils_js__["replaceAuctionPrice"])(ad, cpm), + adUrl: Object(__WEBPACK_IMPORTED_MODULE_3__utils_js__["replaceAuctionPrice"])(adUrl, cpm), + adId: adId, + width: width, + height: height + }), ev.origin); + } +} + +function resizeRemoteCreative(_ref) { + var adId = _ref.adId, + adUnitCode = _ref.adUnitCode, + width = _ref.width, + height = _ref.height; + // resize both container div + iframe + ['div', 'iframe'].forEach(function (elmType) { + // not select element that gets removed after dfp render + var element = getElementByAdUnit(elmType + ':not([style*="display: none"])'); + + if (element) { + var elementStyle = element.style; + elementStyle.width = width + 'px'; + elementStyle.height = height + 'px'; + } else { + Object(__WEBPACK_IMPORTED_MODULE_3__utils_js__["logWarn"])("Unable to locate matching page element for adUnitCode ".concat(adUnitCode, ". Can't resize it to ad's dimensions. Please review setup.")); + } + }); + + function getElementByAdUnit(elmType) { + var id = getElementIdBasedOnAdServer(adId, adUnitCode); + var parentDivEle = document.getElementById(id); + return parentDivEle && parentDivEle.querySelector(elmType); + } + + function getElementIdBasedOnAdServer(adId, adUnitCode) { + if (window.googletag) { + return getDfpElementId(adId); + } else if (window.apntag) { + return getAstElementId(adUnitCode); + } else { + return adUnitCode; + } + } + + function getDfpElementId(adId) { + return __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(window.googletag.pubads().getSlots(), function (slot) { + return __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_find_js___default()(slot.getTargetingKeys(), function (key) { + return __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(slot.getTargeting(key), adId); + }); + }).getSlotElementId(); + } + + function getAstElementId(adUnitCode) { + var astTag = window.apntag.getTag(adUnitCode); + return astTag && astTag.targetId; + } +} + +/***/ }), + +/***/ 224: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export addBidResponseBound */ +/* unused harmony export addBidderRequestsBound */ +/* unused harmony export enableOverrides */ +/* unused harmony export disableOverrides */ +/* unused harmony export bidExcluded */ +/* unused harmony export bidderExcluded */ +/* unused harmony export applyBidOverrides */ +/* unused harmony export addBidResponseHook */ +/* unused harmony export addBidderRequestsHook */ +/* unused harmony export getConfig */ +/* harmony export (immutable) */ __webpack_exports__["a"] = sessionLoader; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__auction_js__ = __webpack_require__(40); + + + +var OVERRIDE_KEY = "pbjs:debugging"; +var addBidResponseBound; +var addBidderRequestsBound; + +function logMessage(msg) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logMessage"])('DEBUG: ' + msg); +} + +function logWarn(msg) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])('DEBUG: ' + msg); +} + +function addHooks(overrides) { + addBidResponseBound = addBidResponseHook.bind(overrides); + __WEBPACK_IMPORTED_MODULE_2__auction_js__["c" /* addBidResponse */].before(addBidResponseBound, 5); + addBidderRequestsBound = addBidderRequestsHook.bind(overrides); + __WEBPACK_IMPORTED_MODULE_2__auction_js__["e" /* addBidderRequests */].before(addBidderRequestsBound, 5); +} + +function removeHooks() { + __WEBPACK_IMPORTED_MODULE_2__auction_js__["c" /* addBidResponse */].getHooks({ + hook: addBidResponseBound + }).remove(); + __WEBPACK_IMPORTED_MODULE_2__auction_js__["e" /* addBidderRequests */].getHooks({ + hook: addBidderRequestsBound + }).remove(); +} + +function enableOverrides(overrides) { + var fromSession = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + __WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].setConfig({ + 'debug': true + }); + removeHooks(); + addHooks(overrides); + logMessage("bidder overrides enabled".concat(fromSession ? ' from session' : '')); +} +function disableOverrides() { + removeHooks(); + logMessage('bidder overrides disabled'); +} +/** + * @param {{bidder:string, adUnitCode:string}} overrideObj + * @param {string} bidderCode + * @param {string} adUnitCode + * @returns {boolean} + */ + +function bidExcluded(overrideObj, bidderCode, adUnitCode) { + if (overrideObj.bidder && overrideObj.bidder !== bidderCode) { + return true; + } + + if (overrideObj.adUnitCode && overrideObj.adUnitCode !== adUnitCode) { + return true; + } + + return false; +} +/** + * @param {string[]} bidders + * @param {string} bidderCode + * @returns {boolean} + */ + +function bidderExcluded(bidders, bidderCode) { + return Array.isArray(bidders) && bidders.indexOf(bidderCode) === -1; +} +/** + * @param {Object} overrideObj + * @param {Object} bidObj + * @param {Object} bidType + * @returns {Object} bidObj with overridden properties + */ + +function applyBidOverrides(overrideObj, bidObj, bidType) { + return Object.keys(overrideObj).filter(function (key) { + return ['adUnitCode', 'bidder'].indexOf(key) === -1; + }).reduce(function (result, key) { + logMessage("bidder overrides changed '".concat(result.adUnitCode, "/").concat(result.bidderCode, "' ").concat(bidType, ".").concat(key, " from '").concat(result[key], ".js' to '").concat(overrideObj[key], "'")); + result[key] = overrideObj[key]; + return result; + }, bidObj); +} +function addBidResponseHook(next, adUnitCode, bid) { + var overrides = this; + + if (bidderExcluded(overrides.bidders, bid.bidderCode)) { + logWarn("bidder '".concat(bid.bidderCode, "' excluded from auction by bidder overrides")); + return; + } + + if (Array.isArray(overrides.bids)) { + overrides.bids.forEach(function (overrideBid) { + if (!bidExcluded(overrideBid, bid.bidderCode, adUnitCode)) { + applyBidOverrides(overrideBid, bid, 'bidder'); + } + }); + } + + next(adUnitCode, bid); +} +function addBidderRequestsHook(next, bidderRequests) { + var overrides = this; + var includedBidderRequests = bidderRequests.filter(function (bidderRequest) { + if (bidderExcluded(overrides.bidders, bidderRequest.bidderCode)) { + logWarn("bidRequest '".concat(bidderRequest.bidderCode, "' excluded from auction by bidder overrides")); + return false; + } + + return true; + }); + + if (Array.isArray(overrides.bidRequests)) { + includedBidderRequests.forEach(function (bidderRequest) { + overrides.bidRequests.forEach(function (overrideBid) { + bidderRequest.bids.forEach(function (bid) { + if (!bidExcluded(overrideBid, bidderRequest.bidderCode, bid.adUnitCode)) { + applyBidOverrides(overrideBid, bid, 'bidRequest'); + } + }); + }); + }); + } + + next(includedBidderRequests); +} +function getConfig(debugging) { + if (!debugging.enabled) { + disableOverrides(); + + try { + window.sessionStorage.removeItem(OVERRIDE_KEY); + } catch (e) {} + } else { + try { + window.sessionStorage.setItem(OVERRIDE_KEY, JSON.stringify(debugging)); + } catch (e) {} + + enableOverrides(debugging); + } +} +__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('debugging', function (_ref) { + var debugging = _ref.debugging; + return getConfig(debugging); +}); +function sessionLoader(storage) { + var overrides; + + try { + storage = storage || window.sessionStorage; + overrides = JSON.parse(storage.getItem(OVERRIDE_KEY)); + } catch (e) {} + + if (overrides) { + enableOverrides(overrides, true); + } +} + +/***/ }), + +/***/ 23: +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), + +/***/ 24: +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; + +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), + +/***/ 25: +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(42); +var global = __webpack_require__(22); + +var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) + : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; +}; + + +/***/ }), + +/***/ 26: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export newAuctionManager */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return auctionManager; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__auction_js__ = __webpack_require__(40); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); +/** + * 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 consolidated bid requests + * @property {function(): Array} getBidsReceived - returns consolidated bid received + * @property {function(): Array} getAdUnits - returns consolidated adUnits + * @property {function(): Array} getAdUnitCodes - returns consolidated 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 $$PREBID_GLOBAL$$.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 + */ + + + + +var CONSTANTS = __webpack_require__(5); +/** + * 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 + */ + + +function newAuctionManager() { + var _auctions = []; + var auctionManager = {}; + + auctionManager.addWinningBid = function (bid) { + var auction = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(_auctions, function (auction) { + return auction.getAuctionId() === bid.auctionId; + }); + + if (auction) { + bid.status = CONSTANTS.BID_STATUS.RENDERED; + auction.addWinningBid(bid); + } else { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"])("Auction not found when adding winning bid"); + } + }; + + auctionManager.getAllWinningBids = function () { + return _auctions.map(function (auction) { + return auction.getWinningBids(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getBidsRequested = function () { + return _auctions.map(function (auction) { + return auction.getBidRequests(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getNoBids = function () { + return _auctions.map(function (auction) { + return auction.getNoBids(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getBidsReceived = function () { + return _auctions.map(function (auction) { + if (auction.getAuctionStatus() === __WEBPACK_IMPORTED_MODULE_1__auction_js__["a" /* AUCTION_COMPLETED */]) { + return auction.getBidsReceived(); + } + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).filter(function (bid) { + return bid; + }); + }; + + auctionManager.getAdUnits = function () { + return _auctions.map(function (auction) { + return auction.getAdUnits(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []); + }; + + auctionManager.getAdUnitCodes = function () { + return _auctions.map(function (auction) { + return auction.getAdUnitCodes(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).filter(__WEBPACK_IMPORTED_MODULE_0__utils_js__["uniques"]); + }; + + auctionManager.createAuction = function (_ref) { + var adUnits = _ref.adUnits, + adUnitCodes = _ref.adUnitCodes, + callback = _ref.callback, + cbTimeout = _ref.cbTimeout, + labels = _ref.labels, + auctionId = _ref.auctionId; + var auction = Object(__WEBPACK_IMPORTED_MODULE_1__auction_js__["k" /* newAuction */])({ + adUnits: adUnits, + adUnitCodes: adUnitCodes, + callback: callback, + cbTimeout: cbTimeout, + labels: labels, + auctionId: auctionId + }); + + _addAuction(auction); + + return auction; + }; + + auctionManager.findBidByAdId = function (adId) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(_auctions.map(function (auction) { + return auction.getBidsReceived(); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []), function (bid) { + return bid.adId === adId; + }); + }; + + auctionManager.getStandardBidderAdServerTargeting = function () { + return Object(__WEBPACK_IMPORTED_MODULE_1__auction_js__["j" /* getStandardBidderSettings */])()[CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]; + }; + + auctionManager.setStatusForBids = function (adId, status) { + var bid = auctionManager.findBidByAdId(adId); + if (bid) bid.status = status; + + if (bid && status === CONSTANTS.BID_STATUS.BID_TARGETING_SET) { + var auction = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(_auctions, function (auction) { + return auction.getAuctionId() === bid.auctionId; + }); + if (auction) auction.setBidTargeting(bid); + } + }; + + auctionManager.getLastAuctionId = function () { + return _auctions.length && _auctions[_auctions.length - 1].getAuctionId(); + }; + + function _addAuction(auction) { + _auctions.push(auction); + } + + return auctionManager; +} +var auctionManager = newAuctionManager(); + +/***/ }), + +/***/ 27: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +// Thank's IE8 for his funny defineProperty +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); + + +/***/ }), + +/***/ 28: +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), + +/***/ 29: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var definePropertyModule = __webpack_require__(31); +var createPropertyDescriptor = __webpack_require__(46); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), + +/***/ 3: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RANDOM; }); +/* unused harmony export newConfig */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return config; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cpmBucketManager_js__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set__ = __webpack_require__(77); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_js__ = __webpack_require__(0); +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 _extends() { _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; }; return _extends.apply(this, arguments); } + +/* + * Module for getting and setting Prebid configuration. + */ + +/** + * @typedef {Object} MediaTypePriceGranularity + * + * @property {(string|Object)} [banner] + * @property {(string|Object)} [native] + * @property {(string|Object)} [video] + * @property {(string|Object)} [video-instream] + * @property {(string|Object)} [video-outstream] + */ + + + + + + +var from = __webpack_require__(89); + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var DEFAULT_DEBUG = utils.getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; +var DEFAULT_BIDDER_TIMEOUT = 3000; +var DEFAULT_PUBLISHER_DOMAIN = window.location.origin; +var DEFAULT_ENABLE_SEND_ALL_BIDS = true; +var DEFAULT_DISABLE_AJAX_TIMEOUT = false; +var DEFAULT_BID_CACHE = false; +var DEFAULT_DEVICE_ACCESS = true; +var DEFAULT_TIMEOUTBUFFER = 400; +var 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; + var config; + var bidderConfig; + var currBidder = null; + + function resetConfig() { + defaults = {}; + var newConfig = { + // `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; + }, + + // 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 (utils.isPlainObject(val)) { + 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; + }, + + /** + * mediaTypePriceGranularity + * @type {MediaTypePriceGranularity} + */ + _mediaTypePriceGranularity: {}, + + get mediaTypePriceGranularity() { + return this._mediaTypePriceGranularity; + }, + + set mediaTypePriceGranularity(val) { + var _this = this; + + this._mediaTypePriceGranularity = Object.keys(val).reduce(function (aggregate, item) { + if (validatePriceGranularity(val[item])) { + if (typeof val === 'string') { + aggregate[item] = hasGranularity(val[item]) ? val[item] : _this._priceGranularity; + } else if (utils.isPlainObject(val)) { + aggregate[item] = val[item]; + utils.logMessage("Using custom price granularity for ".concat(item)); + } + } else { + utils.logWarn("Invalid price granularity for media type: ".concat(item)); + } + + return aggregate; + }, {}); + }, + + _sendAllBids: DEFAULT_ENABLE_SEND_ALL_BIDS, + + get enableSendAllBids() { + return this._sendAllBids; + }, + + set enableSendAllBids(val) { + this._sendAllBids = val; + }, + + _useBidCache: DEFAULT_BID_CACHE, + + get useBidCache() { + return this._useBidCache; + }, + + set useBidCache(val) { + this._useBidCache = val; + }, + + /** + * deviceAccess set to false will disable setCookie, getCookie, hasLocalStorage + * @type {boolean} + */ + _deviceAccess: DEFAULT_DEVICE_ACCESS, + + get deviceAccess() { + return this._deviceAccess; + }, + + set deviceAccess(val) { + this._deviceAccess = 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: ".concat(val, ". Bidder Sequence was not set.")); + } + }, + + // timeout buffer to adjust for bidder CDN latency + _timeoutBuffer: DEFAULT_TIMEOUTBUFFER, + + get timeoutBuffer() { + return this._timeoutBuffer; + }, + + set timeoutBuffer(val) { + this._timeoutBuffer = val; + }, + + _disableAjaxTimeout: DEFAULT_DISABLE_AJAX_TIMEOUT, + + get disableAjaxTimeout() { + return this._disableAjaxTimeout; + }, + + set disableAjaxTimeout(val) { + this._disableAjaxTimeout = val; + } + + }; + + if (config) { + callSubscribers(Object.keys(config).reduce(function (memo, topic) { + if (config[topic] !== newConfig[topic]) { + memo[topic] = newConfig[topic] || {}; + } + + return memo; + }, {})); + } + + config = newConfig; + bidderConfig = {}; + + function hasGranularity(val) { + return __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_find_js___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 (utils.isPlainObject(val)) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0__cpmBucketManager_js__["b" /* isValidPriceConfig */])(val)) { + utils.logError('Invalid custom price value passed to `setPriceGranularity()`'); + return false; + } + } + + return true; + } + } + /** + * Returns base config with bidder overrides (if there is currently a bidder) + * @private + */ + + + function _getConfig() { + if (currBidder && bidderConfig && utils.isPlainObject(bidderConfig[currBidder])) { + var currBidderConfig = bidderConfig[currBidder]; + var configTopicSet = new __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_set___default.a(Object.keys(config).concat(Object.keys(currBidderConfig))); + return from(configTopicSet).reduce(function (memo, topic) { + if (typeof currBidderConfig[topic] === 'undefined') { + memo[topic] = config[topic]; + } else if (typeof config[topic] === 'undefined') { + memo[topic] = currBidderConfig[topic]; + } else { + if (utils.isPlainObject(currBidderConfig[topic])) { + memo[topic] = Object(__WEBPACK_IMPORTED_MODULE_4__utils_js__["mergeDeep"])({}, config[topic], currBidderConfig[topic]); + } else { + memo[topic] = currBidderConfig[topic]; + } + } + + return memo; + }, {}); + } + + return _extends({}, config); + } + /* + * 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(_getConfig(), option) : _getConfig(); + } + + return subscribe.apply(void 0, arguments); + } + /** + * Internal API for modules (such as prebid-server) that might need access to all bidder config + */ + + + function getBidderConfig() { + return bidderConfig; + } + /* + * Sets configuration given an object containing key-value pairs and calls + * listeners that were added by the `subscribe` function + */ + + + function setConfig(options) { + if (!utils.isPlainObject(options)) { + 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 (utils.isPlainObject(defaults[topic]) && utils.isPlainObject(option)) { + 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 (!utils.isPlainObject(defaults)) { + 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; + } + + var nl = { + topic: topic, + callback: callback + }; + listeners.push(nl); // save and call this function to remove the listener + + return function unsubscribe() { + listeners.splice(listeners.indexOf(nl), 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 __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___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); + }); + } + + function setBidderConfig(config) { + try { + check(config); + config.bidders.forEach(function (bidder) { + if (!bidderConfig[bidder]) { + bidderConfig[bidder] = {}; + } + + Object.keys(config.config).forEach(function (topic) { + var option = config.config[topic]; + + if (utils.isPlainObject(option)) { + bidderConfig[bidder][topic] = _extends({}, bidderConfig[bidder][topic] || {}, option); + } else { + bidderConfig[bidder][topic] = option; + } + }); + }); + } catch (e) { + utils.logError(e); + } + + function check(obj) { + if (!utils.isPlainObject(obj)) { + throw 'setBidderConfig bidder options must be an object'; + } + + if (!(Array.isArray(obj.bidders) && obj.bidders.length)) { + throw 'setBidderConfig bidder options must contain a bidders list with at least 1 bidder'; + } + + if (!utils.isPlainObject(obj.config)) { + throw 'setBidderConfig bidder options must contain a config object'; + } + } + } + /** + * Internal functions for core to execute some synchronous code while having an active bidder set. + */ + + + function runWithBidder(bidder, fn) { + currBidder = bidder; + + try { + return fn(); + } finally { + currBidder = null; + } + } + + function callbackWithBidder(bidder) { + return function (cb) { + return function () { + if (typeof cb === 'function') { + var _utils$bind; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return runWithBidder(bidder, (_utils$bind = utils.bind).call.apply(_utils$bind, [cb, this].concat(args))); + } else { + utils.logWarn('config.callbackWithBidder callback is not a function'); + } + }; + }; + } + + function getCurrentBidder() { + return currBidder; + } + + resetConfig(); + return { + getCurrentBidder: getCurrentBidder, + getConfig: getConfig, + setConfig: setConfig, + setDefaults: setDefaults, + resetConfig: resetConfig, + runWithBidder: runWithBidder, + callbackWithBidder: callbackWithBidder, + setBidderConfig: setBidderConfig, + getBidderConfig: getBidderConfig + }; +} +var config = newConfig(); + +/***/ }), + +/***/ 30: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export detectReferer */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getRefererInfo; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * The referer detection module attempts to gather referer information from the current page that prebid.js resides in. + * The information that it tries to collect includes: + * The detected top url in the nav bar, + * Whether it was able to reach the top most window (if for example it was embedded in several iframes), + * The number of iframes it was embedded in if applicable, + * A list of the domains of each embedded window if applicable. + * Canonical URL which refers to an HTML link element, with the attribute of rel="canonical", found in the element of your webpage + */ + +function detectReferer(win) { + /** + * Returns number of frames to reach top from current frame where prebid.js sits + * @returns {Array} levels + */ + function getLevels() { + var levels = walkUpWindows(); + var ancestors = getAncestorOrigins(); + + if (ancestors) { + for (var i = 0, l = ancestors.length; i < l; i++) { + levels[i].ancestor = ancestors[i]; + } + } + + return levels; + } + /** + * This function would return a read-only array of hostnames for all the parent frames. + * win.location.ancestorOrigins is only supported in webkit browsers. For non-webkit browsers it will return undefined. + * @returns {(undefined|Array)} Ancestor origins or undefined + */ + + + function getAncestorOrigins() { + try { + if (!win.location.ancestorOrigins) { + return; + } + + return win.location.ancestorOrigins; + } catch (e) {// Ignore error + } + } + /** + * This function would try to get referer and urls for all parent frames in case of win.location.ancestorOrigins undefined. + * @param {Array} levels + * @returns {Object} urls for all parent frames and top most detected referer url + */ + + + function getPubUrlStack(levels) { + var stack = []; + var defUrl = null; + var frameLocation = null; + var prevFrame = null; + var prevRef = null; + var ancestor = null; + var detectedRefererUrl = null; + var i; + + for (i = levels.length - 1; i >= 0; i--) { + try { + frameLocation = levels[i].location; + } catch (e) {// Ignore error + } + + if (frameLocation) { + stack.push(frameLocation); + + if (!detectedRefererUrl) { + detectedRefererUrl = frameLocation; + } + } else if (i !== 0) { + prevFrame = levels[i - 1]; + + try { + prevRef = prevFrame.referrer; + ancestor = prevFrame.ancestor; + } catch (e) {// Ignore error + } + + if (prevRef) { + stack.push(prevRef); + + if (!detectedRefererUrl) { + detectedRefererUrl = prevRef; + } + } else if (ancestor) { + stack.push(ancestor); + + if (!detectedRefererUrl) { + detectedRefererUrl = ancestor; + } + } else { + stack.push(defUrl); + } + } else { + stack.push(defUrl); + } + } + + return { + stack: stack, + detectedRefererUrl: detectedRefererUrl + }; + } + /** + * This function returns canonical URL which refers to an HTML link element, with the attribute of rel="canonical", found in the element of your webpage + * @param {Object} doc document + */ + + + function getCanonicalUrl(doc) { + try { + var element = doc.querySelector("link[rel='canonical']"); + + if (element !== null) { + return element.href; + } + } catch (e) {} + + return null; + } + /** + * Walk up to the top of the window to detect origin, number of iframes, ancestor origins and canonical url + */ + + + function walkUpWindows() { + var acc = []; + var currentWindow; + + do { + try { + currentWindow = currentWindow ? currentWindow.parent : win; + + try { + var isTop = currentWindow == win.top; + var refData = { + referrer: currentWindow.document.referrer || null, + location: currentWindow.location.href || null, + isTop: isTop + }; + + if (isTop) { + refData = _extends(refData, { + canonicalUrl: getCanonicalUrl(currentWindow.document) + }); + } + + acc.push(refData); + } catch (e) { + acc.push({ + referrer: null, + location: null, + isTop: currentWindow == win.top + }); + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"])('Trying to access cross domain iframe. Continuing without referrer and location'); + } + } catch (e) { + acc.push({ + referrer: null, + location: null, + isTop: false + }); + return acc; + } + } while (currentWindow != win.top); + + return acc; + } + /** + * Referer info + * @typedef {Object} refererInfo + * @property {string} referer detected top url + * @property {boolean} reachedTop whether prebid was able to walk upto top window or not + * @property {number} numIframes number of iframes + * @property {string} stack comma separated urls of all origins + * @property {string} canonicalUrl canonical URL refers to an HTML link element, with the attribute of rel="canonical", found in the element of your webpage + */ + + /** + * Get referer info + * @returns {refererInfo} + */ + + + function refererInfo() { + try { + var levels = getLevels(); + var numIframes = levels.length - 1; + var reachedTop = levels[numIframes].location !== null || numIframes > 0 && levels[numIframes - 1].referrer !== null; + var stackInfo = getPubUrlStack(levels); + var canonicalUrl; + + if (levels[levels.length - 1].canonicalUrl) { + canonicalUrl = levels[levels.length - 1].canonicalUrl; + } + + return { + referer: stackInfo.detectedRefererUrl, + reachedTop: reachedTop, + numIframes: numIframes, + stack: stackInfo.stack, + canonicalUrl: canonicalUrl + }; + } catch (e) {// Ignore error + } + } + + return refererInfo; +} +var getRefererInfo = detectReferer(window); + +/***/ }), + +/***/ 31: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var IE8_DOM_DEFINE = __webpack_require__(71); +var anObject = __webpack_require__(15); +var toPrimitive = __webpack_require__(55); + +var nativeDefineProperty = Object.defineProperty; + +// `Object.defineProperty` method +// https://tc39.github.io/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return nativeDefineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), + +/***/ 32: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = createBid; +var utils = __webpack_require__(0); +/** + Required paramaters + bidderCode, + height, + width, + statusCode + Optional paramaters + adId, + cpm, + ad, + adUrl, + dealId, + priceKeyString; + */ + + +function Bid(statusCode, bidRequest) { + 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 = utils.getUniqueIdentifierStr(); + this.requestId = bidRequest && bidRequest.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. + + +function createBid(statusCode, bidRequest) { + return new Bid(statusCode, bidRequest); +} + +/***/ }), + +/***/ 33: +/***/ (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; + + +/***/ }), + +/***/ 339: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(340); + +module.exports = parent; + + +/***/ }), + +/***/ 34: +/***/ (function(module, exports, __webpack_require__) { + +var IS_PURE = __webpack_require__(16); +var getIterator = __webpack_require__(88); + +module.exports = IS_PURE ? getIterator : function (it) { + // eslint-disable-next-line no-undef + return Set.prototype.values.call(it); +}; + + +/***/ }), + +/***/ 340: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(341); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('String', 'includes'); + + +/***/ }), + +/***/ 341: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var notARegExp = __webpack_require__(342); +var requireObjectCoercible = __webpack_require__(49); +var correctIsRegExpLogic = __webpack_require__(344); + +// `String.prototype.includes` method +// https://tc39.github.io/ecma262/#sec-string.prototype.includes +$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~String(requireObjectCoercible(this)) + .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 342: +/***/ (function(module, exports, __webpack_require__) { + +var isRegExp = __webpack_require__(343); + +module.exports = function (it) { + if (isRegExp(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } return it; +}; + + +/***/ }), + +/***/ 343: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); +var classof = __webpack_require__(48); +var wellKnownSymbol = __webpack_require__(19); + +var MATCH = wellKnownSymbol('match'); + +// `IsRegExp` abstract operation +// https://tc39.github.io/ecma262/#sec-isregexp +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp'); +}; + + +/***/ }), + +/***/ 344: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); + +var MATCH = wellKnownSymbol('match'); + +module.exports = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (e) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (f) { /* empty */ } + } return false; +}; + + +/***/ }), + +/***/ 35: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return nativeAdapters; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NATIVE_TARGETING_KEYS; }); +/* harmony export (immutable) */ __webpack_exports__["g"] = processNativeAdUnitParams; +/* unused harmony export nativeAdUnit */ +/* unused harmony export nativeBidder */ +/* unused harmony export hasNonNativeBidder */ +/* harmony export (immutable) */ __webpack_exports__["f"] = nativeBidIsValid; +/* harmony export (immutable) */ __webpack_exports__["b"] = fireNativeTrackers; +/* harmony export (immutable) */ __webpack_exports__["d"] = getNativeTargeting; +/* harmony export (immutable) */ __webpack_exports__["c"] = getAssetMessage; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var CONSTANTS = __webpack_require__(5); + +var nativeAdapters = []; +var NATIVE_TARGETING_KEYS = Object.keys(CONSTANTS.NATIVE_KEYS).map(function (key) { + return CONSTANTS.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 && __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___default()(Object.keys(SUPPORTED_TYPES), type))) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logError"])("".concat(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 = function nativeAdUnit(adUnit) { + var mediaType = adUnit.mediaType === 'native'; + var mediaTypes = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnit, 'mediaTypes.native'); + return mediaType || mediaTypes; +}; +var nativeBidder = function nativeBidder(bid) { + return __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___default()(nativeAdapters, bid.bidder); +}; +var 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 = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidRequest"])(bid.requestId, bidRequests); + + if (!bidRequest) { + return false; + } // all native bid responses must define a landing page url + + + if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.clickUrl')) { + return false; + } + + if (Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.image')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.image.height') || !Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.image.width')) { + return false; + } + } + + if (Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.icon')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'native.icon.height') || !Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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 __WEBPACK_IMPORTED_MODULE_1_core_js_pure_features_array_includes_js___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 + * + * %%PATTERN:hb_native_title%% + * + * + * + */ + +function fireNativeTrackers(message, adObject) { + var trackers; + + if (message.action === 'click') { + trackers = adObject['native'] && adObject['native'].clickTrackers; + } else { + trackers = adObject['native'] && adObject['native'].impressionTrackers; + + if (adObject['native'] && adObject['native'].javascriptTrackers) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["insertHtmlIntoIframe"])(adObject['native'].javascriptTrackers); + } + } + + (trackers || []).forEach(__WEBPACK_IMPORTED_MODULE_0__utils_js__["triggerPixel"]); + return message.action; +} +/** + * Gets native targeting key-value pairs + * @param {Object} bid + * @return {Object} targeting + */ + +function getNativeTargeting(bid, bidReq) { + var keyValues = {}; + Object.keys(bid['native']).forEach(function (asset) { + var key = CONSTANTS.NATIVE_KEYS[asset]; + var value = getAssetValue(bid['native'][asset]); + var sendPlaceholder = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bidReq, "mediaTypes.native.".concat(asset, ".sendId")); + + if (sendPlaceholder) { + var placeholder = "".concat(key, ":").concat(bid.adId); + value = placeholder; + } + + if (key && value) { + keyValues[key] = value; + } + }); + return keyValues; +} +/** + * Constructs a message object containing asset values for each of the + * requested data keys. + */ + +function getAssetMessage(data, adObject) { + var message = { + message: 'assetResponse', + adId: data.adId, + assets: [] + }; + data.assets.forEach(function (asset) { + var key = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getKeyByValue"])(CONSTANTS.NATIVE_KEYS, asset); + var value = getAssetValue(adObject.native[key]); + message.assets.push({ + key: key, + value: value + }); + }); + return message; +} +/** + * Native assets can be a string or an object with a url prop. Returns the value + * appropriate for sending in adserver targeting or placeholder replacement. + */ + +function getAssetValue(value) { + if (_typeof(value) === 'object' && value.url) { + return value.url; + } + + return value; +} + +/***/ }), + +/***/ 36: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return OUTSTREAM; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return INSTREAM; }); +/* unused harmony export videoAdUnit */ +/* unused harmony export videoBidder */ +/* unused harmony export hasNonVideoBidder */ +/* harmony export (immutable) */ __webpack_exports__["d"] = isValidVideoBid; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return checkVideoBidSetup; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__hook_js__ = __webpack_require__(13); + + + + + +var VIDEO_MEDIA_TYPE = 'video'; +var OUTSTREAM = 'outstream'; +var INSTREAM = 'instream'; +/** + * Helper functions for working with video-enabled adUnits + */ + +var videoAdUnit = function videoAdUnit(adUnit) { + var mediaType = adUnit.mediaType === VIDEO_MEDIA_TYPE; + var mediaTypes = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(adUnit, 'mediaTypes.video'); + return mediaType || mediaTypes; +}; +var videoBidder = function videoBidder(bid) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(__WEBPACK_IMPORTED_MODULE_0__adapterManager_js__["default"].videoAdapters, bid.bidder); +}; +var 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 = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["getBidRequest"])(bid.requestId, bidRequests); + var videoMediaType = bidRequest && Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(bidRequest, 'mediaTypes.video'); + var context = videoMediaType && Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(videoMediaType, 'context'); // if context not defined assume default 'instream' for video bids + // instream bids require a vast url or vast xml content + + return checkVideoBidSetup(bid, bidRequest, videoMediaType, context); +} +var checkVideoBidSetup = Object(__WEBPACK_IMPORTED_MODULE_4__hook_js__["b" /* hook */])('sync', function (bid, bidRequest, videoMediaType, context) { + if (!bidRequest || videoMediaType && context !== OUTSTREAM) { + // xml-only video bids require a prebid cache url + if (!__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('cache.url') && bid.vastXml && !bid.vastUrl) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["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; +}, 'checkVideoBidSetup'); + +/***/ }), + +/***/ 37: +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), + +/***/ 38: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var aFunction = __webpack_require__(18); +var wellKnownSymbol = __webpack_require__(19); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.github.io/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); +}; + + +/***/ }), + +/***/ 39: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = loadExternalScript; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); + + +var _requestCache = {}; // The below list contains modules or vendors whom Prebid allows to load external JS. + +var _approvedLoadExternalJSList = ['criteo', 'outstream', 'adagio', 'browsi']; +/** + * Loads external javascript. Can only be used if external JS is approved by Prebid. See https://github.com/prebid/prebid-js-external-js-template#policy + * Each unique URL will be loaded at most 1 time. + * @param {string} url the url to load + * @param {string} moduleCode bidderCode or module code of the module requesting this resource + * @param {function} [callback] callback function to be called after the script is loaded. + */ + +function loadExternalScript(url, moduleCode, callback) { + if (!moduleCode || !url) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('cannot load external script without url and moduleCode'); + return; + } + + if (!__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___default()(_approvedLoadExternalJSList, moduleCode)) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]("".concat(moduleCode, " not whitelisted for loading external JavaScript")); + return; + } // only load each asset once + + + if (_requestCache[url]) { + if (callback && typeof callback === 'function') { + if (_requestCache[url].loaded) { + // invokeCallbacks immediately + callback(); + } else { + // queue the callback + _requestCache[url].callbacks.push(callback); + } + } + + return _requestCache[url].tag; + } + + _requestCache[url] = { + loaded: false, + tag: null, + callbacks: [] + }; + + if (callback && typeof callback === 'function') { + _requestCache[url].callbacks.push(callback); + } + + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"]("module ".concat(moduleCode, " is loading external JavaScript")); + return requestResource(url, function () { + _requestCache[url].loaded = true; + + try { + for (var i = 0; i < _requestCache[url].callbacks.length; i++) { + _requestCache[url].callbacks[i](); + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('Error executing callback', 'adloader.js:loadExternalScript', e); + } + }); + + function requestResource(tagSrc, callback) { + var jptScript = document.createElement('script'); + jptScript.type = 'text/javascript'; + jptScript.async = true; + _requestCache[url].tag = jptScript; + + 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 + + __WEBPACK_IMPORTED_MODULE_1__utils_js__["insertElement"](jptScript); + return jptScript; + } +} +; + +/***/ }), + +/***/ 4: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ajax; }); +/* harmony export (immutable) */ __webpack_exports__["b"] = ajaxBuilder; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +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 = ajaxBuilder(); +function ajaxBuilder() { + var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3000; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + request = _ref.request, + done = _ref.done; + + return function (url, callback, data) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + try { + var x; + var method = options.method || (data ? 'POST' : 'GET'); + var parser = document.createElement('a'); + parser.href = url; + var callbacks = _typeof(callback) === 'object' && callback !== null ? 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; + } + + x = new window.XMLHttpRequest(); + + x.onreadystatechange = function () { + if (x.readyState === XHR_DONE) { + if (typeof done === 'function') { + done(parser.origin); + } + + var status = x.status; + + if (status >= 200 && status < 300 || status === 304) { + callbacks.success(x.responseText, x); + } else { + callbacks.error(x.statusText, x); + } + } + }; // Disabled timeout temporarily to avoid xhr failed requests. https://github.com/prebid/Prebid.js/issues/2648 + + + if (!__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('disableAjaxTimeout')) { + x.ontimeout = function () { + utils.logError(' xhr timeout after ', x.timeout, 'ms'); + }; + } + + if (method === 'GET' && data) { + var urlInfo = utils.parseUrl(url, options); + + _extends(urlInfo.search, data); + + url = utils.buildUrl(urlInfo); + } + + x.open(method, url, true); // IE needs timoeut to be set after open - see #1410 + // Disabled timeout temporarily to avoid xhr failed requests. https://github.com/prebid/Prebid.js/issues/2648 + + if (!__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('disableAjaxTimeout')) { + x.timeout = timeout; + } + + 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 (typeof request === 'function') { + request(parser.origin); + } + + if (method === 'POST' && data) { + x.send(data); + } else { + x.send(); + } + } catch (error) { + utils.logError('xhr construction', error); + } + }; +} + +/***/ }), + +/***/ 40: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export AUCTION_STARTED */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AUCTION_IN_PROGRESS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AUCTION_COMPLETED; }); +/* harmony export (immutable) */ __webpack_exports__["k"] = newAuction; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return addBidResponse; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return addBidderRequests; }); +/* unused harmony export bidsBackCallback */ +/* unused harmony export auctionCallbacks */ +/* harmony export (immutable) */ __webpack_exports__["g"] = doCallbacksIfTimedout; +/* harmony export (immutable) */ __webpack_exports__["d"] = addBidToAuction; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return callPrebidCache; }); +/* unused harmony export getMediaTypeGranularity */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return getPriceGranularity; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return getPriceByGranularity; }); +/* harmony export (immutable) */ __webpack_exports__["j"] = getStandardBidderSettings; +/* unused harmony export getKeyValueTargetingPairs */ +/* unused harmony export adjustBids */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cpmBucketManager_js__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__videoCache_js__ = __webpack_require__(93); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__userSync_js__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__video_js__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * Module for auction instances. + * + * In Prebid 0.x, $$PREBID_GLOBAL$$ 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.} 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.} size + */ + +/** + * @typedef {Array.} AdUnitCode + */ + +/** + * @typedef {Object} BidderRequest + * + * @property {string} bidderCode - adUnit bidder + * @property {number} auctionId - random UUID + * @property {string} bidderRequestId - random string, unique key set on all bidRequest.bids[] + * @property {Array.} bids + * @property {number} auctionStart - Date.now() at auction start + * @property {number} timeout - callback timeout + * @property {refererInfo} refererInfo - referer info object + * @property {string} [tid] - random UUID (used for s2s) + * @property {string} [src] - s2s or client (used for s2s) + */ + +/** + * @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 + */ + + + + + + + + + + + +var syncUsers = __WEBPACK_IMPORTED_MODULE_6__userSync_js__["a" /* userSync */].syncUsers; + +var utils = __webpack_require__(0); + +var adapterManager = __webpack_require__(7).default; + +var events = __webpack_require__(8); + +var CONSTANTS = __webpack_require__(5); + +var AUCTION_STARTED = 'started'; +var AUCTION_IN_PROGRESS = 'inProgress'; +var AUCTION_COMPLETED = 'completed'; // register event for bid adjustment + +events.on(CONSTANTS.EVENTS.BID_ADJUSTMENT, function (bid) { + adjustBids(bid); +}); +var MAX_REQUESTS_PER_ORIGIN = 4; +var outstandingRequests = {}; +var sourceInfo = {}; +var queuedCalls = []; +/** + * Creates new auction instance + * + * @param {Object} requestConfig + * @param {AdUnit} requestConfig.adUnits + * @param {AdUnitCode} requestConfig.adUnitCodes + * @param {function():void} requestConfig.callback + * @param {number} requestConfig.cbTimeout + * @param {Array.} requestConfig.labels + * @param {string} requestConfig.auctionId + * + * @returns {Auction} auction instance + */ + +function newAuction(_ref) { + var adUnits = _ref.adUnits, + adUnitCodes = _ref.adUnitCodes, + callback = _ref.callback, + cbTimeout = _ref.cbTimeout, + labels = _ref.labels, + auctionId = _ref.auctionId; + var _adUnits = adUnits; + var _labels = labels; + var _adUnitCodes = adUnitCodes; + var _bidderRequests = []; + var _bidsReceived = []; + var _noBids = []; + + var _auctionStart; + + var _auctionEnd; + + var _auctionId = auctionId || utils.generateUUID(); + + var _auctionStatus; + + var _callback = callback; + + var _timer; + + var _timeout = cbTimeout; + var _winningBids = []; + + var _timelyBidders = new Set(); + + function addBidRequests(bidderRequests) { + _bidderRequests = _bidderRequests.concat(bidderRequests); + } + + function addBidReceived(bidsReceived) { + _bidsReceived = _bidsReceived.concat(bidsReceived); + } + + function addNoBid(noBid) { + _noBids = _noBids.concat(noBid); + } + + function getProperties() { + return { + auctionId: _auctionId, + timestamp: _auctionStart, + auctionEnd: _auctionEnd, + auctionStatus: _auctionStatus, + adUnits: _adUnits, + adUnitCodes: _adUnitCodes, + labels: _labels, + bidderRequests: _bidderRequests, + noBids: _noBids, + bidsReceived: _bidsReceived, + winningBids: _winningBids, + timeout: _timeout + }; + } + + 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 (_auctionEnd === undefined) { + var timedOutBidders = []; + + if (timedOut) { + utils.logMessage("Auction ".concat(_auctionId, " timedOut")); + timedOutBidders = getTimedOutBids(_bidderRequests, _timelyBidders); + + if (timedOutBidders.length) { + events.emit(CONSTANTS.EVENTS.BID_TIMEOUT, timedOutBidders); + } + } + + _auctionStatus = AUCTION_COMPLETED; + _auctionEnd = Date.now(); + events.emit(CONSTANTS.EVENTS.AUCTION_END, getProperties()); + bidsBackCallback(_adUnits, function () { + try { + if (_callback != null) { + var _adUnitCodes2 = _adUnitCodes; + + var bids = _bidsReceived.filter(utils.bind.call(__WEBPACK_IMPORTED_MODULE_0__utils_js__["adUnitsFilter"], this, _adUnitCodes2)).reduce(groupByPlacement, {}); + + _callback.apply(pbjs, [bids, timedOut, _auctionId]); + + _callback = null; + } + } catch (e) { + utils.logError('Error executing bidsBackHandler', null, e); + } finally { + // Calling timed out bidders + if (timedOutBidders.length) { + adapterManager.callTimedOutBidders(adUnits, timedOutBidders, _timeout); + } // Only automatically sync if the publisher has not chosen to "enableOverride" + + + var userSyncConfig = __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('userSync') || {}; + + if (!userSyncConfig.enableOverride) { + // Delay the auto sync by the config delay + syncUsers(userSyncConfig.syncDelay); + } + } + }); + } + } + + function auctionDone() { + // when all bidders have called done callback atleast once it means auction is complete + utils.logInfo("Bids Received for Auction with id: ".concat(_auctionId), _bidsReceived); + _auctionStatus = AUCTION_COMPLETED; + executeCallback(false, true); + } + + function onTimelyResponse(bidderCode) { + _timelyBidders.add(bidderCode); + } + + function callBids() { + _auctionStatus = AUCTION_STARTED; + _auctionStart = Date.now(); + var bidRequests = adapterManager.makeBidRequests(_adUnits, _auctionStart, _auctionId, _timeout, _labels); + utils.logInfo("Bids Requested for Auction with id: ".concat(_auctionId), bidRequests); + + if (bidRequests.length < 1) { + utils.logWarn('No valid bid requests returned for auction'); + auctionDone(); + } else { + addBidderRequests.call({ + dispatch: addBidderRequestsCallback, + context: this + }, bidRequests); + } + } + /** + * callback executed after addBidderRequests completes + * @param {BidRequest[]} bidRequests + */ + + + function addBidderRequestsCallback(bidRequests) { + var _this = this; + + bidRequests.forEach(function (bidRequest) { + addBidRequests(bidRequest); + }); + var requests = {}; + var call = { + bidRequests: bidRequests, + run: function run() { + startAuctionTimer(); + _auctionStatus = AUCTION_IN_PROGRESS; + events.emit(CONSTANTS.EVENTS.AUCTION_INIT, getProperties()); + var callbacks = auctionCallbacks(auctionDone, _this); + adapterManager.callBids(_adUnits, bidRequests, function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + addBidResponse.apply({ + dispatch: callbacks.addBidResponse, + bidderRequest: this + }, args); + }, callbacks.adapterDone, { + request: function request(source, origin) { + increment(outstandingRequests, origin); + increment(requests, source); + + if (!sourceInfo[source]) { + sourceInfo[source] = { + SRA: true, + origin: origin + }; + } + + if (requests[source] > 1) { + sourceInfo[source].SRA = false; + } + }, + done: function done(origin) { + outstandingRequests[origin]--; + + if (queuedCalls[0]) { + if (runIfOriginHasCapacity(queuedCalls[0])) { + queuedCalls.shift(); + } + } + } + }, _timeout, onTimelyResponse); + } + }; + + if (!runIfOriginHasCapacity(call)) { + utils.logWarn('queueing auction due to limited endpoint capacity'); + queuedCalls.push(call); + } + + function runIfOriginHasCapacity(call) { + var hasCapacity = true; + var maxRequests = __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('maxRequestsPerOrigin') || MAX_REQUESTS_PER_ORIGIN; + call.bidRequests.some(function (bidRequest) { + var requests = 1; + var source = typeof bidRequest.src !== 'undefined' && bidRequest.src === CONSTANTS.S2S.SRC ? 's2s' : bidRequest.bidderCode; // if we have no previous info on this source just let them through + + if (sourceInfo[source]) { + if (sourceInfo[source].SRA === false) { + // some bidders might use more than the MAX_REQUESTS_PER_ORIGIN in a single auction. In those cases + // set their request count to MAX_REQUESTS_PER_ORIGIN so the auction isn't permanently queued waiting + // for capacity for that bidder + requests = Math.min(bidRequest.bids.length, maxRequests); + } + + if (outstandingRequests[sourceInfo[source].origin] + requests > maxRequests) { + hasCapacity = false; + } + } // return only used for terminating this .some() iteration early if it is determined we don't have capacity + + + return !hasCapacity; + }); + + if (hasCapacity) { + call.run(); + } + + return hasCapacity; + } + + function increment(obj, prop) { + if (typeof obj[prop] === 'undefined') { + obj[prop] = 1; + } else { + obj[prop]++; + } + } + } + + function addWinningBid(winningBid) { + _winningBids = _winningBids.concat(winningBid); + adapterManager.callBidWonBidder(winningBid.bidder, winningBid, adUnits); + } + + function setBidTargeting(bid) { + adapterManager.callSetTargetingBidder(bid.bidder, bid); + } + + return { + addBidReceived: addBidReceived, + addNoBid: addNoBid, + executeCallback: executeCallback, + callBids: callBids, + addWinningBid: addWinningBid, + setBidTargeting: setBidTargeting, + getWinningBids: function getWinningBids() { + return _winningBids; + }, + 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; + }, + getNoBids: function getNoBids() { + return _noBids; + } + }; +} +var addBidResponse = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function (adUnitCode, bid) { + this.dispatch.call(this.bidderRequest, adUnitCode, bid); +}, 'addBidResponse'); +var addBidderRequests = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('sync', function (bidderRequests) { + this.dispatch.call(this.context, bidderRequests); +}, 'addBidderRequests'); +var bidsBackCallback = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function (adUnits, callback) { + if (callback) { + callback(); + } +}, 'bidsBackCallback'); +function auctionCallbacks(auctionDone, auctionInstance) { + var outstandingBidsAdded = 0; + var allAdapterCalledDone = false; + var bidderRequestsDone = new Set(); + var bidResponseMap = {}; + + function afterBidAdded() { + outstandingBidsAdded--; + + if (allAdapterCalledDone && outstandingBidsAdded === 0) { + auctionDone(); + } + } + + function addBidResponse(adUnitCode, bid) { + var bidderRequest = this; + bidResponseMap[bid.requestId] = true; + outstandingBidsAdded++; + var auctionId = auctionInstance.getAuctionId(); + var bidResponse = getPreparedBidForAuction({ + adUnitCode: adUnitCode, + bid: bid, + bidderRequest: bidderRequest, + auctionId: auctionId + }); + + if (bidResponse.mediaType === 'video') { + tryAddVideoBid(auctionInstance, bidResponse, bidderRequest, afterBidAdded); + } else { + addBidToAuction(auctionInstance, bidResponse); + afterBidAdded(); + } + } + + function adapterDone() { + var bidderRequest = this; + bidderRequestsDone.add(bidderRequest); + allAdapterCalledDone = auctionInstance.getBidRequests().every(function (bidderRequest) { + return bidderRequestsDone.has(bidderRequest); + }); + bidderRequest.bids.forEach(function (bid) { + if (!bidResponseMap[bid.bidId]) { + auctionInstance.addNoBid(bid); + events.emit(CONSTANTS.EVENTS.NO_BID, bid); + } + }); + + if (allAdapterCalledDone && outstandingBidsAdded === 0) { + auctionDone(); + } + } + + return { + addBidResponse: addBidResponse, + adapterDone: adapterDone + }; +} +function doCallbacksIfTimedout(auctionInstance, bidResponse) { + if (bidResponse.timeToRespond > auctionInstance.getTimeout() + __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('timeoutBuffer')) { + auctionInstance.executeCallback(true); + } +} // Add a bid to the auction. + +function addBidToAuction(auctionInstance, bidResponse) { + var bidderRequests = auctionInstance.getBidRequests(); + var bidderRequest = __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidderRequests, function (bidderRequest) { + return bidderRequest.bidderCode === bidResponse.bidderCode; + }); + setupBidTargeting(bidResponse, bidderRequest); + 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, bidRequests, afterBidAdded) { + var addBid = true; + var bidderRequest = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidRequest"])(bidResponse.requestId, [bidRequests]); + var videoMediaType = bidderRequest && Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bidderRequest, 'mediaTypes.video'); + var context = videoMediaType && Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(videoMediaType, 'context'); + + if (__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('cache.url') && context !== __WEBPACK_IMPORTED_MODULE_9__video_js__["b" /* OUTSTREAM */]) { + if (!bidResponse.videoCacheKey) { + addBid = false; + callPrebidCache(auctionInstance, bidResponse, afterBidAdded, bidderRequest); + } else if (!bidResponse.vastUrl) { + utils.logError('videoCacheKey specified but not required vastUrl for video bid'); + addBid = false; + } + } + + if (addBid) { + addBidToAuction(auctionInstance, bidResponse); + afterBidAdded(); + } +} + +var callPrebidCache = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function (auctionInstance, bidResponse, afterBidAdded, bidderRequest) { + Object(__WEBPACK_IMPORTED_MODULE_3__videoCache_js__["b" /* store */])([bidResponse], function (error, cacheIds) { + if (error) { + utils.logWarn("Failed to save to the video cache: ".concat(error, ". Video bid must be discarded.")); + doCallbacksIfTimedout(auctionInstance, bidResponse); + } else { + if (cacheIds[0].uuid === '') { + utils.logWarn("Supplied video cache key was already in use by Prebid Cache; caching attempt was rejected. Video bid must be discarded."); + doCallbacksIfTimedout(auctionInstance, bidResponse); + } else { + bidResponse.videoCacheKey = cacheIds[0].uuid; + + if (!bidResponse.vastUrl) { + bidResponse.vastUrl = Object(__WEBPACK_IMPORTED_MODULE_3__videoCache_js__["a" /* getCacheUrl */])(bidResponse.videoCacheKey); + } + + addBidToAuction(auctionInstance, bidResponse); + afterBidAdded(); + } + } + }, bidderRequest); +}, 'callPrebidCache'); // 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, + bidderRequest = _ref2.bidderRequest, + auctionId = _ref2.auctionId; + var start = bidderRequest.start; + + var bidObject = _extends({}, bid, { + auctionId: auctionId, + responseTimestamp: Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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 bidReq = bidderRequest.bids && __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidderRequest.bids, function (bid) { + return bid.adUnitCode == adUnitCode; + }); + var adUnitRenderer = bidReq && bidReq.renderer; + + if (adUnitRenderer && adUnitRenderer.url) { + bidObject.renderer = __WEBPACK_IMPORTED_MODULE_4__Renderer_js__["a" /* Renderer */].install({ + url: adUnitRenderer.url + }); + bidObject.renderer.setRender(adUnitRenderer.render); + } // Use the config value 'mediaTypeGranularity' if it has been defined for mediaType, else use 'customPriceBucket' + + + var mediaTypeGranularity = getMediaTypeGranularity(bid.mediaType, bidReq, __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('mediaTypePriceGranularity')); + var priceStringsObj = Object(__WEBPACK_IMPORTED_MODULE_1__cpmBucketManager_js__["a" /* getPriceBucketString */])(bidObject.cpm, _typeof(mediaTypeGranularity) === 'object' ? mediaTypeGranularity : __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('customPriceBucket'), __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* 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; + return bidObject; +} + +function setupBidTargeting(bidObject, bidderRequest) { + var keyValues; + + if (bidObject.bidderCode && (bidObject.cpm > 0 || bidObject.dealId)) { + var bidReq = __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidderRequest.bids, function (bid) { + return bid.adUnitCode === bidObject.adUnitCode; + }); + keyValues = getKeyValueTargetingPairs(bidObject.bidderCode, bidObject, bidReq); + } // use any targeting provided as defaults, otherwise just set from getKeyValueTargetingPairs + + + bidObject.adserverTargeting = _extends(bidObject.adserverTargeting || {}, keyValues); +} +/** + * @param {MediaType} mediaType + * @param {Bid} [bidReq] + * @param {MediaTypePriceGranularity} [mediaTypePriceGranularity] + * @returns {(Object|string|undefined)} + */ + + +function getMediaTypeGranularity(mediaType, bidReq, mediaTypePriceGranularity) { + if (mediaType && mediaTypePriceGranularity) { + if (mediaType === __WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */]) { + var context = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bidReq, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */], ".context"), 'instream'); + + if (mediaTypePriceGranularity["".concat(__WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */], "-").concat(context)]) { + return mediaTypePriceGranularity["".concat(__WEBPACK_IMPORTED_MODULE_10__mediaTypes_js__["d" /* VIDEO */], "-").concat(context)]; + } + } + + return mediaTypePriceGranularity[mediaType]; + } +} +/** + * This function returns the price granularity defined. It can be either publisher defined or default value + * @param {string} mediaType + * @param {BidRequest} bidReq + * @returns {string} granularity + */ + +var getPriceGranularity = function getPriceGranularity(mediaType, bidReq) { + // Use the config value 'mediaTypeGranularity' if it has been set for mediaType, else use 'priceGranularity' + var mediaTypeGranularity = getMediaTypeGranularity(mediaType, bidReq, __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('mediaTypePriceGranularity')); + var granularity = typeof mediaType === 'string' && mediaTypeGranularity ? typeof mediaTypeGranularity === 'string' ? mediaTypeGranularity : 'custom' : __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('priceGranularity'); + return granularity; +}; +/** + * This function returns a function to get bid price by price granularity + * @param {string} granularity + * @returns {function} + */ + +var getPriceByGranularity = function getPriceByGranularity(granularity) { + return function (bid) { + if (granularity === CONSTANTS.GRANULARITY_OPTIONS.AUTO) { + return bid.pbAg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.DENSE) { + return bid.pbDg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.LOW) { + return bid.pbLg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.MEDIUM) { + return bid.pbMg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.HIGH) { + return bid.pbHg; + } else if (granularity === CONSTANTS.GRANULARITY_OPTIONS.CUSTOM) { + return bid.pbCg; + } + }; +}; +/** + * @param {string} mediaType + * @param {string} bidderCode + * @param {BidRequest} bidReq + * @returns {*} + */ + +function getStandardBidderSettings(mediaType, bidderCode, bidReq) { + // factory for key value objs + function createKeyVal(key, value) { + return { + key: key, + val: typeof value === 'function' ? function (bidResponse) { + return value(bidResponse); + } : function (bidResponse) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getValue"])(bidResponse, value); + } + }; + } + + var TARGETING_KEYS = CONSTANTS.TARGETING_KEYS; + var granularity = getPriceGranularity(mediaType, bidReq); + var bidderSettings = pbjs.bidderSettings; + + if (!bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]) { + bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD] = {}; + } + + if (!bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { + bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING] = [createKeyVal(TARGETING_KEYS.BIDDER, 'bidderCode'), createKeyVal(TARGETING_KEYS.AD_ID, 'adId'), createKeyVal(TARGETING_KEYS.PRICE_BUCKET, getPriceByGranularity(granularity)), createKeyVal(TARGETING_KEYS.SIZE, 'size'), createKeyVal(TARGETING_KEYS.DEAL, 'dealId'), createKeyVal(TARGETING_KEYS.SOURCE, 'source'), createKeyVal(TARGETING_KEYS.FORMAT, 'mediaType')]; + } + + if (mediaType === 'video') { + var adserverTargeting = bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]; // Adding hb_uuid + hb_cache_id + + [TARGETING_KEYS.UUID, TARGETING_KEYS.CACHE_ID].forEach(function (targetingKeyVal) { + if (typeof __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adserverTargeting, function (kvPair) { + return kvPair.key === targetingKeyVal; + }) === 'undefined') { + adserverTargeting.push(createKeyVal(targetingKeyVal, 'videoCacheKey')); + } + }); // Adding hb_cache_host + + if (__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('cache.url') && (!bidderCode || utils.deepAccess(bidderSettings, "".concat(bidderCode, ".sendStandardTargeting")) !== false)) { + var urlInfo = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["parseUrl"])(__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('cache.url')); + + if (typeof __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adserverTargeting, function (targetingKeyVal) { + return targetingKeyVal.key === TARGETING_KEYS.CACHE_HOST; + }) === 'undefined') { + adserverTargeting.push(createKeyVal(TARGETING_KEYS.CACHE_HOST, function (bidResponse) { + return utils.deepAccess(bidResponse, "adserverTargeting.".concat(TARGETING_KEYS.CACHE_HOST)) ? bidResponse.adserverTargeting[TARGETING_KEYS.CACHE_HOST] : urlInfo.hostname; + })); + } + } + } + + return bidderSettings[CONSTANTS.JSON_MAPPING.BD_SETTING_STANDARD]; +} +function getKeyValueTargetingPairs(bidderCode, custBidObj, bidReq) { + if (!custBidObj) { + return {}; + } + + var keyValues = {}; + var bidderSettings = pbjs.bidderSettings; // 1) set the keys from "standard" setting or from prebid defaults + + if (bidderSettings) { + // initialize default if not set + var standardSettings = getStandardBidderSettings(custBidObj.mediaType, bidderCode, bidReq); + setKeys(keyValues, standardSettings, custBidObj); // 2) set keys from specific bidder setting override if they exist + + if (bidderCode && bidderSettings[bidderCode] && bidderSettings[bidderCode][CONSTANTS.JSON_MAPPING.ADSERVER_TARGETING]) { + setKeys(keyValues, bidderSettings[bidderCode], custBidObj); + custBidObj.sendStandardTargeting = bidderSettings[bidderCode].sendStandardTargeting; + } + } // set native key value targeting + + + if (custBidObj['native']) { + keyValues = _extends({}, keyValues, Object(__WEBPACK_IMPORTED_MODULE_2__native_js__["d" /* getNativeTargeting */])(custBidObj, bidReq)); + } + + 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 === CONSTANTS.TARGETING_KEYS.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; + + 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 {Set} timelyBidders Set of bidders which responded in time + * + * @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} List of bids that Prebid hasn't received a response for + */ + + +function getTimedOutBids(bidderRequests, timelyBidders) { + var timedOutBids = bidderRequests.map(function (bid) { + return (bid.bids || []).filter(function (bid) { + return !timelyBidders.has(bid.bidder); + }); + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).map(function (bid) { + return { + bidId: bid.bidId, + bidder: bid.bidder, + adUnitCode: bid.adUnitCode, + auctionId: bid.auctionId + }; + }); + return timedOutBids; +} + +/***/ }), + +/***/ 41: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export TARGETING_KEYS */ +/* unused harmony export filters */ +/* unused harmony export getHighestCpmBidsFromBidPool */ +/* unused harmony export sortByDealAndPriceBucketOrCpm */ +/* unused harmony export newTargeting */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return targeting; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__sizeMapping_js__ = __webpack_require__(91); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js__); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +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) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + + + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var pbTargetingKeys = []; +var MAX_DFP_KEYLENGTH = 20; +var TTL_BUFFER = 1000; +var TARGETING_KEYS = Object.keys(CONSTANTS.TARGETING_KEYS).map(function (key) { + return CONSTANTS.TARGETING_KEYS[key]; +}); // return unexpired bids + +var isBidNotExpired = function isBidNotExpired(bid) { + return bid.responseTimestamp + bid.ttl * 1000 + TTL_BUFFER > Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["timestamp"])(); +}; // return bids whose status is not set. Winning bids can only have a status of `rendered`. + + +var isUnusedBid = function isUnusedBid(bid) { + return bid && (bid.status && !__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()([CONSTANTS.BID_STATUS.RENDERED], bid.status) || !bid.status); +}; + +var filters = { + isBidNotExpired: isBidNotExpired, + isUnusedBid: isUnusedBid +}; // If two bids are found for same adUnitCode, we will use the highest one to take part in auction +// This can happen in case of concurrent auctions +// If adUnitBidLimit is set above 0 return top N number of bids + +function getHighestCpmBidsFromBidPool(bidsReceived, highestCpmCallback) { + var adUnitBidLimit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + var bids = []; + var dealPrioritization = __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('sendBidsControl.dealPrioritization'); // bucket by adUnitcode + + var buckets = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["groupBy"])(bidsReceived, 'adUnitCode'); // filter top bid for each bucket by bidder + + Object.keys(buckets).forEach(function (bucketKey) { + var bucketBids = []; + var bidsByBidder = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["groupBy"])(buckets[bucketKey], 'bidderCode'); + Object.keys(bidsByBidder).forEach(function (key) { + return bucketBids.push(bidsByBidder[key].reduce(highestCpmCallback)); + }); // if adUnitBidLimit is set, pass top N number bids + + if (adUnitBidLimit > 0) { + bucketBids = dealPrioritization ? bucketBids.sort(sortByDealAndPriceBucketOrCpm(true)) : bucketBids.sort(function (a, b) { + return b.cpm - a.cpm; + }); + bids.push.apply(bids, _toConsumableArray(bucketBids.slice(0, adUnitBidLimit))); + } else { + bids.push.apply(bids, _toConsumableArray(bucketBids)); + } + }); + return bids; +} +/** +* A descending sort function that will sort the list of objects based on the following two dimensions: +* - bids with a deal are sorted before bids w/o a deal +* - then sort bids in each grouping based on the hb_pb value +* eg: the following list of bids would be sorted like: +* [{ +* "hb_adid": "vwx", +* "hb_pb": "28", +* "hb_deal": "7747" +* }, { +* "hb_adid": "jkl", +* "hb_pb": "10", +* "hb_deal": "9234" +* }, { +* "hb_adid": "stu", +* "hb_pb": "50" +* }, { +* "hb_adid": "def", +* "hb_pb": "2" +* }] +*/ + +function sortByDealAndPriceBucketOrCpm() { + var useCpm = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + return function (a, b) { + if (a.adserverTargeting.hb_deal !== undefined && b.adserverTargeting.hb_deal === undefined) { + return -1; + } + + if (a.adserverTargeting.hb_deal === undefined && b.adserverTargeting.hb_deal !== undefined) { + return 1; + } // assuming both values either have a deal or don't have a deal - sort by the hb_pb param + + + if (useCpm) { + return b.cpm - a.cpm; + } + + return b.adserverTargeting.hb_pb - a.adserverTargeting.hb_pb; + }; +} +/** + * @typedef {Object.} targeting + * @property {string} targeting_key + */ + +/** + * @typedef {Object.[]>[]} targetingArray + */ + +function newTargeting(auctionManager) { + var targeting = {}; + var latestAuctionForAdUnit = {}; + + targeting.setLatestAuctionForAdUnit = function (adUnitCode, auctionId) { + latestAuctionForAdUnit[adUnitCode] = auctionId; + }; + + targeting.resetPresetTargeting = function (adUnitCode, customSlotMatching) { + if (Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["isGptPubadsDefined"])()) { + var adUnitCodes = getAdUnitCodes(adUnitCode); + var adUnits = auctionManager.getAdUnits().filter(function (adUnit) { + return __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(adUnitCodes, adUnit.code); + }); + window.googletag.pubads().getSlots().forEach(function (slot) { + var customSlotMatchingFunc = utils.isFn(customSlotMatching) && customSlotMatching(slot); + pbTargetingKeys.forEach(function (key) { + // reset only registered adunits + adUnits.forEach(function (unit) { + if (unit.code === slot.getAdUnitPath() || unit.code === slot.getSlotElementId() || utils.isFn(customSlotMatchingFunc) && customSlotMatchingFunc(unit.code)) { + slot.setTargeting(key, null); + } + }); + }); + }); + } + }; + + targeting.resetPresetTargetingAST = function (adUnitCode) { + var adUnitCodes = getAdUnitCodes(adUnitCode); + adUnitCodes.forEach(function (unit) { + var astTag = window.apntag.getTag(unit); + + if (astTag && astTag.keywords) { + var currentKeywords = Object.keys(astTag.keywords); + var newKeywords = {}; + currentKeywords.forEach(function (key) { + if (!__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(pbTargetingKeys, key.toLowerCase())) { + newKeywords[key] = astTag.keywords[key]; + } + }); + window.apntag.modifyTag(unit, { + keywords: newKeywords + }); + } + }); + }; + /** + * checks if bid has targeting set and belongs based on matching ad unit codes + * @return {boolean} true or false + */ + + + function bidShouldBeAddedToTargeting(bid, adUnitCodes) { + return bid.adserverTargeting && adUnitCodes && (utils.isArray(adUnitCodes) && __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(adUnitCodes, bid.adUnitCode) || typeof adUnitCodes === 'string' && bid.adUnitCode === adUnitCodes); + } + + ; + /** + * Returns targeting for any bids which have deals if alwaysIncludeDeals === true + */ + + function getDealBids(adUnitCodes, bidsReceived) { + if (__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('targetingControls.alwaysIncludeDeals') === true) { + var standardKeys = TARGETING_KEYS.concat(__WEBPACK_IMPORTED_MODULE_2__native_js__["a" /* NATIVE_TARGETING_KEYS */]); // we only want the top bid from bidders who have multiple entries per ad unit code + + var bids = getHighestCpmBidsFromBidPool(bidsReceived, __WEBPACK_IMPORTED_MODULE_0__utils_js__["getHighestCpm"]); // populate targeting keys for the remaining bids if they have a dealId + + return bids.map(function (bid) { + if (bid.dealId && bidShouldBeAddedToTargeting(bid, adUnitCodes)) { + 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 + } + + return []; + } + + ; + /** + * Returns all ad server targeting for all ad units. + * @param {string=} adUnitCode + * @return {Object.} 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(__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('enableSendAllBids') ? getBidLandscapeTargeting(adUnitCodes, bidsReceived) : getDealBids(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); + var auctionKeysThreshold = __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('targetingControls.auctionKeyMaxChars'); + + if (auctionKeysThreshold) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logInfo"])("Detected 'targetingControls.auctionKeyMaxChars' was active for this auction; set with a limit of ".concat(auctionKeysThreshold, " characters. Running checks on auction keys...")); + targeting = filterTargetingKeys(targeting, auctionKeysThreshold); + } // make sure at least there is a entry per adUnit code in the targetingSet so receivers of SET_TARGETING call's can know what ad units are being invoked + + + adUnitCodes.forEach(function (code) { + if (!targeting[code]) { + targeting[code] = {}; + } + }); + return targeting; + }; // create an encoded string variant based on the keypairs of the provided object + // - note this will encode the characters between the keys (ie = and &) + + + function convertKeysToQueryForm(keyMap) { + return Object.keys(keyMap).reduce(function (queryString, key) { + var encodedKeyPair = "".concat(key, "%3d").concat(encodeURIComponent(keyMap[key]), "%26"); + return queryString += encodedKeyPair; + }, ''); + } + + function filterTargetingKeys(targeting, auctionKeysThreshold) { + // read each targeting.adUnit object and sort the adUnits into a list of adUnitCodes based on priorization setting (eg CPM) + var targetingCopy = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepClone"])(targeting); + var targetingMap = Object.keys(targetingCopy).map(function (adUnitCode) { + return { + adUnitCode: adUnitCode, + adserverTargeting: targetingCopy[adUnitCode] + }; + }).sort(sortByDealAndPriceBucketOrCpm()); // iterate through the targeting based on above list and transform the keys into the query-equivalent and count characters + + return targetingMap.reduce(function (accMap, currMap, index, arr) { + var adUnitQueryString = convertKeysToQueryForm(currMap.adserverTargeting); // for the last adUnit - trim last encoded ampersand from the converted query string + + if (index + 1 === arr.length) { + adUnitQueryString = adUnitQueryString.slice(0, -3); + } // if under running threshold add to result + + + var code = currMap.adUnitCode; + var querySize = adUnitQueryString.length; + + if (querySize <= auctionKeysThreshold) { + auctionKeysThreshold -= querySize; + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logInfo"])("AdUnit '".concat(code, "' auction keys comprised of ").concat(querySize, " characters. Deducted from running threshold; new limit is ").concat(auctionKeysThreshold), targetingCopy[code]); + accMap[code] = targetingCopy[code]; + } else { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"])("The following keys for adUnitCode '".concat(code, "' exceeded the current limit of the 'auctionKeyMaxChars' setting.\nThe key-set size was ").concat(querySize, ", the current allotted amount was ").concat(auctionKeysThreshold, ".\n"), targetingCopy[code]); + } + + if (index + 1 === arr.length && Object.keys(accMap).length === 0) { + Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["logError"])('No auction targeting keys were permitted due to the setting in setConfig(targetingControls.auctionKeyMaxChars). Please review setup and consider adjusting.'); + } + + return accMap; + }, {}); + } + /** + * 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.} 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.>} targetingConfig + */ + + + targeting.setTargetingForGPT = function (targetingConfig, customSlotMatching) { + window.googletag.pubads().getSlots().forEach(function (slot) { + Object.keys(targetingConfig).filter(customSlotMatching ? customSlotMatching(slot) : Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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: ".concat(slot.getSlotElementId(), " key: ").concat(key, " value: ").concat(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() { + var bidsReceived = auctionManager.getBidsReceived(); + + if (!__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('useBidCache')) { + bidsReceived = bidsReceived.filter(function (bid) { + return latestAuctionForAdUnit[bid.adUnitCode] === bid.auctionId; + }); + } + + bidsReceived = bidsReceived.filter(function (bid) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(bid, 'video.context') !== __WEBPACK_IMPORTED_MODULE_5__mediaTypes_js__["a" /* ADPOD */]; + }).filter(function (bid) { + return bid.mediaType !== 'banner' || Object(__WEBPACK_IMPORTED_MODULE_4__sizeMapping_js__["c" /* sizeSupported */])([bid.width, bid.height]); + }).filter(filters.isUnusedBid).filter(filters.isBidNotExpired); + return getHighestCpmBidsFromBidPool(bidsReceived, __WEBPACK_IMPORTED_MODULE_0__utils_js__["getOldestHighestCpmBid"]); + } + /** + * 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 __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___default()(adUnitCodes, bid.adUnitCode); + }).filter(function (bid) { + return bid.cpm > 0; + }).map(function (bid) { + return bid.adUnitCode; + }).filter(__WEBPACK_IMPORTED_MODULE_0__utils_js__["uniques"]).map(function (adUnitCode) { + return bidsReceived.filter(function (bid) { + return bid.adUnitCode === adUnitCode ? bid : null; + }).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getHighestCpm"]); + }); + }; + /** + * @param {(string|string[])} adUnitCode adUnitCode or array of adUnitCodes + * Sets targeting for AST + */ + + + targeting.setTargetingForAst = function (adUnitCodes) { + var astTargeting = targeting.getAllTargeting(adUnitCodes); + + try { + targeting.resetPresetTargetingAST(adUnitCodes); + } catch (e) { + utils.logError('unable to reset targeting for AST' + e); + } + + Object.keys(astTargeting).forEach(function (targetId) { + return Object.keys(astTargeting[targetId]).forEach(function (key) { + utils.logMessage("Attempting to set targeting for targetId: ".concat(targetId, " key: ").concat(key, " value: ").concat(astTargeting[targetId][key])); // setKeywords supports string and array as value + + if (utils.isStr(astTargeting[targetId][key]) || utils.isArray(astTargeting[targetId][key])) { + var keywordsObj = {}; + var regex = /pt[0-9]/; + + if (key.search(regex) < 0) { + keywordsObj[key.toUpperCase()] = astTargeting[targetId][key]; + } else { + // pt${n} keys should not be uppercased + keywordsObj[key] = astTargeting[targetId][key]; + } + + window.apntag.setKeywords(targetId, keywordsObj, { + overrideKeyValue: true + }); + } + }); + }); + }; + /** + * 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); + 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; + }).reduce(function (acc, key) { + var targetingValue = [winner.adserverTargeting[key]]; + + var targeting = _defineProperty({}, key.substring(0, MAX_DFP_KEYLENGTH), targetingValue); + + if (key === CONSTANTS.TARGETING_KEYS.DEAL) { + var bidderCodeTargetingKey = "".concat(key, "_").concat(winner.bidderCode).substring(0, MAX_DFP_KEYLENGTH); + + var bidderCodeTargeting = _defineProperty({}, bidderCodeTargetingKey, targetingValue); + + return [].concat(_toConsumableArray(acc), [targeting, bidderCodeTargeting]); + } + + return [].concat(_toConsumableArray(acc), [targeting]); + }, [])); + }); + return winners; + } + + function getStandardKeys() { + return auctionManager.getStandardBidderAdServerTargeting() // in case using a custom standard key set + .map(function (targeting) { + return targeting.key; + }).concat(TARGETING_KEYS).filter(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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(__WEBPACK_IMPORTED_MODULE_0__utils_js__["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().concat(__WEBPACK_IMPORTED_MODULE_2__native_js__["a" /* NATIVE_TARGETING_KEYS */]); + 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 __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_includes_js___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 = TARGETING_KEYS.concat(__WEBPACK_IMPORTED_MODULE_2__native_js__["a" /* NATIVE_TARGETING_KEYS */]); + var adUnitBidLimit = __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('sendBidsControl.bidLimit'); + var bids = getHighestCpmBidsFromBidPool(bidsReceived, __WEBPACK_IMPORTED_MODULE_0__utils_js__["getHighestCpm"], adUnitBidLimit); // populate targeting keys for the remaining bids + + return bids.map(function (bid) { + if (bidShouldBeAddedToTargeting(bid, adUnitCodes)) { + 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({}, "".concat(key, "_").concat(bid.bidderCode).substring(0, MAX_DFP_KEYLENGTH), [bid.adserverTargeting[key]]); + }); + } + + targeting.isApntagDefined = function () { + if (window.apntag && utils.isFn(window.apntag.setKeywords)) { + return true; + } + }; + + return targeting; +} +var targeting = newTargeting(__WEBPACK_IMPORTED_MODULE_3__auctionManager_js__["a" /* auctionManager */]); + +/***/ }), + +/***/ 42: +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), + +/***/ 43: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export USERSYNC_DEFAULT_CONFIG */ +/* unused harmony export newUserSync */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return userSync; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__storageManager_js__ = __webpack_require__(9); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var USERSYNC_DEFAULT_CONFIG = { + syncEnabled: true, + filterSettings: { + image: { + bidders: '*', + filter: 'include' + } + }, + syncsPerBidder: 5, + syncDelay: 3000, + auctionDelay: 0 +}; // Set userSync default values + +__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].setDefaults({ + 'userSync': __WEBPACK_IMPORTED_MODULE_0__utils_js__["deepClone"](USERSYNC_DEFAULT_CONFIG) +}); +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__storageManager_js__["a" /* getCoreStorageManager */])('usersync'); +/** + * 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 for a specific bidder + + var hasFiredBidder = new Set(); // How many bids for each adapter + + var numAdapterBids = {}; // for now - default both to false in case filterSettings config is absent/misconfigured + + var permittedPixels = { + image: true, + iframe: false + }; // Use what is in config by default + + var usConfig = userSyncDependencies.config; // Update if it's (re)set + + __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('userSync', function (conf) { + // Added this logic for https://github.com/prebid/Prebid.js/issues/4864 + // if userSync.filterSettings does not contain image/all configs, merge in default image config to ensure image pixels are fired + if (conf.userSync) { + var fs = conf.userSync.filterSettings; + + if (__WEBPACK_IMPORTED_MODULE_0__utils_js__["isPlainObject"](fs)) { + if (!fs.image && !fs.all) { + conf.userSync.filterSettings.image = { + bidders: '*', + filter: 'include' + }; + } + } + } + + 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) { + return; + } + + try { + // Image pixels + fireImagePixels(); // Iframe syncs + + loadIframes(); + } catch (e) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logError"]('Error firing user syncs', e); + } // Reset the user sync queue + + + queue = getDefaultQueue(); + } + + function forEachFire(queue, fn) { + // 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 + __WEBPACK_IMPORTED_MODULE_0__utils_js__["shuffle"](queue).forEach(function (sync) { + fn(sync); + hasFiredBidder.add(sync[0]); + }); + } + /** + * @function fireImagePixels + * @summary Loops through user sync pixels and fires each one + * @private + */ + + + function fireImagePixels() { + if (!permittedPixels.image) { + return; + } + + forEachFire(queue.image, function (sync) { + var _sync = _slicedToArray(sync, 2), + bidderName = _sync[0], + trackingPixelUrl = _sync[1]; + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logMessage"]("Invoking image pixel user sync for bidder: ".concat(bidderName)); // Create image object and add the src url + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["triggerPixel"](trackingPixelUrl); + }); + } + /** + * @function loadIframes + * @summary Loops through iframe syncs and loads an iframe element into the page + * @private + */ + + + function loadIframes() { + if (!permittedPixels.iframe) { + return; + } + + forEachFire(queue.iframe, function (sync) { + var _sync2 = _slicedToArray(sync, 2), + bidderName = _sync2[0], + iframeUrl = _sync2[1]; + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logMessage"]("Invoking iframe user sync for bidder: ".concat(bidderName)); // Insert iframe into DOM + + __WEBPACK_IMPORTED_MODULE_0__utils_js__["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 Using Image Sync + * // registerSync(type, adapter, pixelUrl) + * userSync.registerSync('image', 'rubicon', 'http://example.com/pixel') + */ + + + publicApi.registerSync = function (type, bidder, url) { + if (hasFiredBidder.has(bidder)) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logMessage"]("already fired syncs for \"".concat(bidder, "\", ignoring registerSync call")); + } + + if (!usConfig.syncEnabled || !__WEBPACK_IMPORTED_MODULE_0__utils_js__["isArray"](queue[type])) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("User sync type \"".concat(type, "\" not supported")); + } + + if (!bidder) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Bidder is required for registering sync"); + } + + if (usConfig.syncsPerBidder !== 0 && Number(numAdapterBids[bidder]) >= usConfig.syncsPerBidder) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Number of user syncs exceeded for \"".concat(bidder, "\"")); + } + + var canBidderRegisterSync = publicApi.canBidderRegisterSync(type, bidder); + + if (!canBidderRegisterSync) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Bidder \"".concat(bidder, "\" not permitted to register their \"").concat(type, "\" userSync pixels.")); + } // the bidder's pixel has passed all checks and is allowed to register + + + queue[type].push([bidder, url]); + numAdapterBids = incrementAdapterBids(numAdapterBids, bidder); + }; + /** + * @function shouldBidderBeBlocked + * @summary Check filterSettings logic to determine if the bidder should be prevented from registering their userSync tracker + * @private + * @param {string} type The type of the sync; either image or iframe + * @param {string} bidder The name of the adapter. e.g. "rubicon" + * @returns {boolean} true => bidder is not allowed to register; false => bidder can register + */ + + + function shouldBidderBeBlocked(type, bidder) { + var filterConfig = usConfig.filterSettings; // apply the filter check if the config object is there (eg filterSettings.iframe exists) and if the config object is properly setup + + if (isFilterConfigValid(filterConfig, type)) { + permittedPixels[type] = true; + var activeConfig = filterConfig.all ? filterConfig.all : filterConfig[type]; + var biddersToFilter = activeConfig.bidders === '*' ? [bidder] : activeConfig.bidders; + var filterType = activeConfig.filter || 'include'; // set default if undefined + // return true if the bidder is either: not part of the include (ie outside the whitelist) or part of the exclude (ie inside the blacklist) + + var checkForFiltering = { + 'include': function include(bidders, bidder) { + return !__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(bidders, bidder); + }, + 'exclude': function exclude(bidders, bidder) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(bidders, bidder); + } + }; + return checkForFiltering[filterType](biddersToFilter, bidder); + } + + return false; + } + /** + * @function isFilterConfigValid + * @summary Check if the filterSettings object in the userSync config is setup properly + * @private + * @param {object} filterConfig sub-config object taken from filterSettings + * @param {string} type The type of the sync; either image or iframe + * @returns {boolean} true => config is setup correctly, false => setup incorrectly or filterConfig[type] is not present + */ + + + function isFilterConfigValid(filterConfig, type) { + if (filterConfig.all && filterConfig[type]) { + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Detected presence of the \"filterSettings.all\" and \"filterSettings.".concat(type, "\" in userSync config. You cannot mix \"all\" with \"iframe/image\" configs; they are mutually exclusive.")); + return false; + } + + var activeConfig = filterConfig.all ? filterConfig.all : filterConfig[type]; + var activeConfigName = filterConfig.all ? 'all' : type; // if current pixel type isn't part of the config's logic, skip rest of the config checks... + // we return false to skip subsequent filter checks in shouldBidderBeBlocked() function + + if (!activeConfig) { + return false; + } + + var filterField = activeConfig.filter; + var biddersField = activeConfig.bidders; + + if (filterField && filterField !== 'include' && filterField !== 'exclude') { + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("UserSync \"filterSettings.".concat(activeConfigName, ".filter\" setting '").concat(filterField, "' is not a valid option; use either 'include' or 'exclude'.")); + return false; + } + + if (biddersField !== '*' && !(Array.isArray(biddersField) && biddersField.length > 0 && biddersField.every(function (bidderInList) { + return __WEBPACK_IMPORTED_MODULE_0__utils_js__["isStr"](bidderInList) && bidderInList !== '*'; + }))) { + __WEBPACK_IMPORTED_MODULE_0__utils_js__["logWarn"]("Detected an invalid setup in userSync \"filterSettings.".concat(activeConfigName, ".bidders\"; use either '*' (to represent all bidders) or an array of bidders.")); + return false; + } + + return true; + } + /** + * @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(); + } + }; + + publicApi.canBidderRegisterSync = function (type, bidder) { + if (usConfig.filterSettings) { + if (shouldBidderBeBlocked(type, bidder)) { + return false; + } + } + + return true; + }; + + return publicApi; +} +var browserSupportsCookies = !__WEBPACK_IMPORTED_MODULE_0__utils_js__["isSafariBrowser"]() && storage.cookiesAreEnabled(); +var userSync = newUserSync({ + config: __WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* 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 {int} syncsPerBidder + * @property {string[]} enabledBidders + * @property {Object} filterSettings + */ + +/***/ }), + +/***/ 45: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getPriceBucketString; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return isValidPriceConfig; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__); + + +var utils = __webpack_require__(0); + +var _defaultPrecision = 2; +var _lgPriceConfig = { + 'buckets': [{ + 'max': 5, + 'increment': 0.5 + }] +}; +var _mgPriceConfig = { + 'buckets': [{ + 'max': 20, + 'increment': 0.1 + }] +}; +var _hgPriceConfig = { + 'buckets': [{ + 'max': 20, + 'increment': 0.01 + }] +}; +var _densePriceConfig = { + 'buckets': [{ + 'max': 3, + 'increment': 0.01 + }, { + 'max': 8, + 'increment': 0.05 + }, { + 'max': 20, + 'increment': 0.5 + }] +}; +var _autoPriceConfig = { + 'buckets': [{ + 'max': 5, + 'increment': 0.05 + }, { + 'max': 10, + 'increment': 0.1 + }, { + '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 bucketFloor = 0; + var bucket = __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___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 >= bucketFloor * granularityMultiplier) { + bucket.min = bucketFloor; + return bucket; + } else { + bucketFloor = bucket.max; + } + }); + + if (bucket) { + cpmStr = getCpmTarget(cpm, bucket, 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 (!bucket.max || !bucket.increment) { + isValid = false; + } + }); + return isValid; +} + +function getCpmTarget(cpm, bucket, granularityMultiplier) { + var precision = typeof bucket.precision !== 'undefined' ? bucket.precision : _defaultPrecision; + var increment = bucket.increment * granularityMultiplier; + var bucketMin = bucket.min * granularityMultiplier; // start increments at the bucket min and then add bucket min back to arrive at the correct rounding + // note - we're padding the values to avoid using decimals in the math prior to flooring + // this is done as JS can return values slightly below the expected mark which would skew the price bucket target + // (eg 4.01 / 0.01 = 400.99999999999994) + // min precison should be 2 to move decimal place over. + + var pow = Math.pow(10, precision + 2); + var cpmToFloor = (cpm * pow - bucketMin * pow) / (increment * pow); + var cpmTarget = Math.floor(cpmToFloor) * increment + bucketMin; // force to 10 decimal places to deal with imprecise decimal/binary conversions + // (for example 0.1 * 3 = 0.30000000000000004) + + cpmTarget = Number(cpmTarget.toFixed(10)); + return cpmTarget.toFixed(precision); +} + + + +/***/ }), + +/***/ 46: +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), + +/***/ 466: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(467); + +module.exports = parent; + + +/***/ }), + +/***/ 467: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(468); +var path = __webpack_require__(42); + +module.exports = path.Number.isInteger; + + +/***/ }), + +/***/ 468: +/***/ (function(module, exports, __webpack_require__) { + +var $ = __webpack_require__(14); +var isInteger = __webpack_require__(469); + +// `Number.isInteger` method +// https://tc39.github.io/ecma262/#sec-number.isinteger +$({ target: 'Number', stat: true }, { + isInteger: isInteger +}); + + +/***/ }), + +/***/ 469: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +var floor = Math.floor; + +// `Number.isInteger` method implementation +// https://tc39.github.io/ecma262/#sec-number.isinteger +module.exports = function isInteger(it) { + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + + +/***/ }), + +/***/ 47: +/***/ (function(module, exports, __webpack_require__) { + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(70); +var requireObjectCoercible = __webpack_require__(49); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), + +/***/ 48: +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), + +/***/ 49: +/***/ (function(module, exports) { + +// `RequireObjectCoercible` abstract operation +// https://tc39.github.io/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), + +/***/ 5: +/***/ (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"},"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","NO_BID":"noBid","BID_WON":"bidWon","BIDDER_DONE":"bidderDone","SET_TARGETING":"setTargeting","BEFORE_REQUEST_BIDS":"beforeRequestBids","REQUEST_BIDS":"requestBids","ADD_AD_UNITS":"addAdUnits","AD_RENDER_FAILED":"adRenderFailed","BIDDER_BLOCKED":"bidderBlocked"},"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":{"BIDDER":"hb_bidder","AD_ID":"hb_adid","PRICE_BUCKET":"hb_pb","SIZE":"hb_size","DEAL":"hb_deal","SOURCE":"hb_source","FORMAT":"hb_format","UUID":"hb_uuid","CACHE_ID":"hb_cache_id","CACHE_HOST":"hb_cache_host"},"NATIVE_KEYS":{"title":"hb_native_title","body":"hb_native_body","body2":"hb_native_body2","privacyLink":"hb_native_privacy","privacyIcon":"hb_native_privicon","sponsoredBy":"hb_native_brand","image":"hb_native_image","icon":"hb_native_icon","clickUrl":"hb_native_linkurl","displayUrl":"hb_native_displayurl","cta":"hb_native_cta","rating":"hb_native_rating","address":"hb_native_address","downloads":"hb_native_downloads","likes":"hb_native_likes","phone":"hb_native_phone","price":"hb_native_price","salePrice":"hb_native_saleprice"},"S2S":{"SRC":"s2s","DEFAULT_ENDPOINT":"https://prebid.adnxs.com/pbs/v1/openrtb2/auction","SYNCED_BIDDERS_KEY":"pbjsSyncs"},"BID_STATUS":{"BID_TARGETING_SET":"targetingSet","RENDERED":"rendered","BID_REJECTED":"bidRejected"}} + +/***/ }), + +/***/ 50: +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(58); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.github.io/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), + +/***/ 51: +/***/ (function(module, exports) { + +module.exports = function () { /* empty */ }; + + +/***/ }), + +/***/ 52: +/***/ (function(module, exports, __webpack_require__) { + +var getBuiltIn = __webpack_require__(25); + +module.exports = getBuiltIn; + + +/***/ }), + +/***/ 53: +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), + +/***/ 54: +/***/ (function(module, exports, __webpack_require__) { + +var NATIVE_WEAK_MAP = __webpack_require__(113); +var global = __webpack_require__(22); +var isObject = __webpack_require__(23); +var createNonEnumerableProperty = __webpack_require__(29); +var objectHas = __webpack_require__(24); +var sharedKey = __webpack_require__(65); +var hiddenKeys = __webpack_require__(53); + +var WeakMap = global.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP) { + var store = new WeakMap(); + var wmget = store.get; + var wmhas = store.has; + var wmset = store.set; + set = function (it, metadata) { + wmset.call(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget.call(store, it) || {}; + }; + has = function (it) { + return wmhas.call(store, it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return objectHas(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return objectHas(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), + +/***/ 55: +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(23); + +// `ToPrimitive` abstract operation +// https://tc39.github.io/ecma262/#sec-toprimitive +// 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 (input, PREFERRED_STRING) { + if (!isObject(input)) return input; + var fn, val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), + +/***/ 56: +/***/ (function(module, exports, __webpack_require__) { + +var bind = __webpack_require__(21); +var IndexedObject = __webpack_require__(70); +var toObject = __webpack_require__(57); +var toLength = __webpack_require__(50); +var arraySpeciesCreate = __webpack_require__(101); + +var push = [].push; + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation +var createMethod = function (TYPE) { + 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; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push.call(target, value); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6) +}; + + +/***/ }), + +/***/ 57: +/***/ (function(module, exports, __webpack_require__) { + +var requireObjectCoercible = __webpack_require__(49); + +// `ToObject` abstract operation +// https://tc39.github.io/ecma262/#sec-toobject +module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); +}; + + +/***/ }), + +/***/ 58: +/***/ (function(module, exports) { + +var ceil = Math.ceil; +var floor = Math.floor; + +// `ToInteger` abstract operation +// https://tc39.github.io/ecma262/#sec-tointeger +module.exports = function (argument) { + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); +}; + + +/***/ }), + +/***/ 59: +/***/ (function(module, exports) { + +var id = 0; +var postfix = Math.random(); + +module.exports = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); +}; + + +/***/ }), + +/***/ 60: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var fails = __webpack_require__(28); +var has = __webpack_require__(24); + +var defineProperty = Object.defineProperty; +var cache = {}; + +var thrower = function (it) { throw it; }; + +module.exports = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return cache[METHOD_NAME] = !!method && !fails(function () { + if (ACCESSORS && !DESCRIPTORS) return true; + var O = { length: -1 }; + + if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + }); +}; + + +/***/ }), + +/***/ 61: +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(62); +var Iterators = __webpack_require__(37); +var wellKnownSymbol = __webpack_require__(19); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + + +/***/ }), + +/***/ 62: +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(63); +var classofRaw = __webpack_require__(48); +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; +}; + + +/***/ }), + +/***/ 63: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), + +/***/ 64: +/***/ (function(module, exports, __webpack_require__) { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(63); +var defineProperty = __webpack_require__(31).f; +var createNonEnumerableProperty = __webpack_require__(29); +var has = __webpack_require__(24); +var toString = __webpack_require__(112); +var wellKnownSymbol = __webpack_require__(19); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC, SET_METHOD) { + if (it) { + var target = STATIC ? it : it.prototype; + if (!has(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, 'toString', toString); + } + } +}; + + +/***/ }), + +/***/ 65: +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(73); +var uid = __webpack_require__(59); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), + +/***/ 66: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var createIteratorConstructor = __webpack_require__(121); +var getPrototypeOf = __webpack_require__(86); +var setPrototypeOf = __webpack_require__(123); +var setToStringTag = __webpack_require__(64); +var createNonEnumerableProperty = __webpack_require__(29); +var redefine = __webpack_require__(84); +var wellKnownSymbol = __webpack_require__(19); +var IS_PURE = __webpack_require__(16); +var Iterators = __webpack_require__(37); +var IteratorsCore = __webpack_require__(85); + +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return nativeIterator.call(this); }; + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); + } + Iterators[NAME] = defaultIterator; + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + return methods; +}; + + +/***/ }), + +/***/ 67: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return adunitCounter; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); + +var adUnits = {}; + +function ensureAdUnit(adunit, bidderCode) { + var adUnit = adUnits[adunit] = adUnits[adunit] || { + bidders: {} + }; + + if (bidderCode) { + return adUnit.bidders[bidderCode] = adUnit.bidders[bidderCode] || {}; + } + + return adUnit; +} + +function incrementAdUnitCount(adunit, counter, bidderCode) { + var adUnit = ensureAdUnit(adunit, bidderCode); + adUnit[counter] = (adUnit[counter] || 0) + 1; + return adUnit[counter]; +} +/** + * Increments and returns current Adunit counter + * @param {string} adunit id + * @returns {number} current adunit count + */ + + +function incrementRequestsCounter(adunit) { + return incrementAdUnitCount(adunit, 'requestsCounter'); +} +/** + * Increments and returns current Adunit requests counter for a bidder + * @param {string} adunit id + * @param {string} bidderCode code + * @returns {number} current adunit bidder requests count + */ + + +function incrementBidderRequestsCounter(adunit, bidderCode) { + return incrementAdUnitCount(adunit, 'requestsCounter', bidderCode); +} +/** + * Increments and returns current Adunit wins counter for a bidder + * @param {string} adunit id + * @param {string} bidderCode code + * @returns {number} current adunit bidder requests count + */ + + +function incrementBidderWinsCounter(adunit, bidderCode) { + return incrementAdUnitCount(adunit, 'winsCounter', bidderCode); +} +/** + * Returns current Adunit counter + * @param {string} adunit id + * @returns {number} current adunit count + */ + + +function getRequestsCounter(adunit) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnits, "".concat(adunit, ".requestsCounter")) || 0; +} +/** + * Returns current Adunit requests counter for a specific bidder code + * @param {string} adunit id + * @param {string} bidder code + * @returns {number} current adunit bidder requests count + */ + + +function getBidderRequestsCounter(adunit, bidder) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnits, "".concat(adunit, ".bidders.").concat(bidder, ".requestsCounter")) || 0; +} +/** + * Returns current Adunit requests counter for a specific bidder code + * @param {string} adunit id + * @param {string} bidder code + * @returns {number} current adunit bidder requests count + */ + + +function getBidderWinsCounter(adunit, bidder) { + return Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["deepAccess"])(adUnits, "".concat(adunit, ".bidders.").concat(bidder, ".winsCounter")) || 0; +} +/** + * A module which counts how many times an adunit was called + * @module adunitCounter + */ + + +var adunitCounter = { + incrementRequestsCounter: incrementRequestsCounter, + incrementBidderRequestsCounter: incrementBidderRequestsCounter, + incrementBidderWinsCounter: incrementBidderWinsCounter, + getRequestsCounter: getRequestsCounter, + getBidderRequestsCounter: getBidderRequestsCounter, + getBidderWinsCounter: getBidderWinsCounter +}; + + +/***/ }), + +/***/ 68: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "adUnitSetupChecks", function() { return adUnitSetupChecks; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAdUnitSetup", function() { return checkAdUnitSetup; }); +/* harmony export (immutable) */ __webpack_exports__["executeStorageCallbacks"] = executeStorageCallbacks; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__secureCreatives_js__ = __webpack_require__(223); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__userSync_js__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__targeting_js__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__debugging_js__ = __webpack_require__(224); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__adUnits_js__ = __webpack_require__(67); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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 _extends() { _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; }; return _extends.apply(this, arguments); } + +/** @module pbjs */ + + + + + + + + + + + + + + +var pbjs = Object(__WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__["a" /* getGlobal */])(); + +var CONSTANTS = __webpack_require__(5); + +var utils = __webpack_require__(0); + +var adapterManager = __webpack_require__(7).default; + +var events = __webpack_require__(8); + +var triggerUserSyncs = __WEBPACK_IMPORTED_MODULE_3__userSync_js__["a" /* userSync */].triggerUserSyncs; +/* private variables */ + +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 +}; // initialize existing debugging sessions if present + +Object(__WEBPACK_IMPORTED_MODULE_8__debugging_js__["a" /* sessionLoader */])(); +/* Public vars */ + +pbjs.bidderSettings = pbjs.bidderSettings || {}; // let the world know we are loaded + +pbjs.libLoaded = true; // version auto generated from build + +pbjs.version = "v4.2.0"; +utils.logInfo("Prebid.js v4.2.0 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 = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsRequested().map(function (bidSet) { + return bidSet.bids.map(function (bid) { + return bid.adUnitCode; + }); + }).reduce(__WEBPACK_IMPORTED_MODULE_1__utils_js__["flatten"]).filter(__WEBPACK_IMPORTED_MODULE_1__utils_js__["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; + } +} + +function validateSizes(sizes, targLength) { + var cleanSizes = []; + + if (utils.isArray(sizes) && (targLength ? sizes.length === targLength : sizes.length > 0)) { + // check if an array of arrays or array of numbers + if (sizes.every(function (sz) { + return Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isArrayOfNums"])(sz, 2); + })) { + cleanSizes = sizes; + } else if (Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isArrayOfNums"])(sizes, 2)) { + cleanSizes.push(sizes); + } + } + + return cleanSizes; +} + +function validateBannerMediaType(adUnit) { + var validatedAdUnit = utils.deepClone(adUnit); + var banner = validatedAdUnit.mediaTypes.banner; + var bannerSizes = validateSizes(banner.sizes); + + if (bannerSizes.length > 0) { + banner.sizes = bannerSizes; // Deprecation Warning: This property will be deprecated in next release in favor of adUnit.mediaTypes.banner.sizes + + validatedAdUnit.sizes = bannerSizes; + } else { + utils.logError('Detected a mediaTypes.banner object without a proper sizes field. Please ensure the sizes are listed like: [[300, 250], ...]. Removing invalid mediaTypes.banner object from request.'); + delete validatedAdUnit.mediaTypes.banner; + } + + return validatedAdUnit; +} + +function validateVideoMediaType(adUnit) { + var validatedAdUnit = utils.deepClone(adUnit); + var video = validatedAdUnit.mediaTypes.video; + + if (video.playerSize) { + var tarPlayerSizeLen = typeof video.playerSize[0] === 'number' ? 2 : 1; + var videoSizes = validateSizes(video.playerSize, tarPlayerSizeLen); + + if (videoSizes.length > 0) { + if (tarPlayerSizeLen === 2) { + utils.logInfo('Transforming video.playerSize from [640,480] to [[640,480]] so it\'s in the proper format.'); + } + + video.playerSize = videoSizes; // Deprecation Warning: This property will be deprecated in next release in favor of adUnit.mediaTypes.video.playerSize + + validatedAdUnit.sizes = videoSizes; + } 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 validatedAdUnit.mediaTypes.video.playerSize; + } + } + + return validatedAdUnit; +} + +function validateNativeMediaType(adUnit) { + var validatedAdUnit = utils.deepClone(adUnit); + var native = validatedAdUnit.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 validatedAdUnit.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 validatedAdUnit.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 validatedAdUnit.mediaTypes.native.icon.sizes; + } + + return validatedAdUnit; +} + +var adUnitSetupChecks = { + validateBannerMediaType: validateBannerMediaType, + validateVideoMediaType: validateVideoMediaType, + validateNativeMediaType: validateNativeMediaType, + validateSizes: validateSizes +}; +var checkAdUnitSetup = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('sync', function (adUnits) { + var validatedAdUnits = []; + adUnits.forEach(function (adUnit) { + var mediaTypes = adUnit.mediaTypes; + var validatedBanner, validatedVideo, validatedNative; + + if (!mediaTypes || Object.keys(mediaTypes).length === 0) { + utils.logError("Detected adUnit.code '".concat(adUnit.code, "' did not have a 'mediaTypes' object defined. This is a required field for the auction, so this adUnit has been removed.")); + return; + } + + if (mediaTypes.banner) { + validatedBanner = validateBannerMediaType(adUnit); + } + + if (mediaTypes.video) { + validatedVideo = validatedBanner ? validateVideoMediaType(validatedBanner) : validateVideoMediaType(adUnit); + } + + if (mediaTypes.native) { + validatedNative = validatedVideo ? validateNativeMediaType(validatedVideo) : validatedBanner ? validateNativeMediaType(validatedBanner) : validateNativeMediaType(adUnit); + } + + var validatedAdUnit = _extends({}, validatedBanner, validatedVideo, validatedNative); + + validatedAdUnits.push(validatedAdUnit); + }); + return validatedAdUnits; +}, 'checkAdUnitSetup'); /// /////////////////////////////// +// // +// 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 __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getAllTargeting(adUnitCode); +}; + +function getBids(type) { + var responses = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */][type]().filter(utils.bind.call(__WEBPACK_IMPORTED_MODULE_1__utils_js__["adUnitsFilter"], this, __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getAdUnitCodes())); // find the last auction id to get responses for most recent auction only + + var currentAuctionId = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getLastAuctionId(); + return responses.map(function (bid) { + return bid.adUnitCode; + }).filter(__WEBPACK_IMPORTED_MODULE_1__utils_js__["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 + }); + }).reduce(function (a, b) { + return _extends(a, b); + }, {}); +} +/** + * This function returns the bids requests involved in an auction but not bid on + * @alias module:pbjs.getNoBids + * @return {Object} map | object that contains the bidRequests + */ + + +pbjs.getNoBids = function () { + utils.logInfo("Invoking pbjs.getNoBids", arguments); + return getBids('getNoBids'); +}; +/** + * 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); + return getBids('getBidsReceived'); +}; +/** + * Returns bidResponses for the specified adUnitCode + * @param {string} adUnitCode adUnitCode + * @alias module:pbjs.getBidResponsesForAdUnitCode + * @return {Object} bidResponse object + */ + + +pbjs.getBidResponsesForAdUnitCode = function (adUnitCode) { + var bids = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.adUnitCode === adUnitCode; + }); + return { + bids: bids + }; +}; +/** + * Set query string targeting on one or more GPT ad units. + * @param {(string|string[])} adUnit a single `adUnit.code` or multiple. + * @param {function(object)} customSlotMatching gets a GoogleTag slot and returns a filter function for adUnitCode, so you can decide to match on either eg. return slot => { return adUnitCode => { return slot.getSlotElementId() === 'myFavoriteDivId'; } }; + * @alias module:pbjs.setTargetingForGPTAsync + */ + + +pbjs.setTargetingForGPTAsync = function (adUnit, customSlotMatching) { + utils.logInfo("Invoking pbjs.setTargetingForGPTAsync", arguments); + + if (!Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isGptPubadsDefined"])()) { + utils.logError('window.googletag is not defined on the page'); + return; + } // get our ad unit codes + + + var targetingSet = __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getAllTargeting(adUnit); // first reset any old targeting + + __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].resetPresetTargeting(adUnit, customSlotMatching); // now set new targeting keys + + __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].setTargetingForGPT(targetingSet, customSlotMatching); + Object.keys(targetingSet).forEach(function (adUnitCode) { + Object.keys(targetingSet[adUnitCode]).forEach(function (targetingKey) { + if (targetingKey === 'hb_adid') { + __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].setStatusForBids(targetingSet[adUnitCode][targetingKey], CONSTANTS.BID_STATUS.BID_TARGETING_SET); + } + }); + }); // emit event + + events.emit(SET_TARGETING, targetingSet); +}; +/** + * 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). + * @param {(string|string[])} adUnitCode adUnitCode or array of adUnitCodes + * @alias module:pbjs.setTargetingForAst + */ + + +pbjs.setTargetingForAst = function (adUnitCodes) { + utils.logInfo("Invoking pbjs.setTargetingForAn", arguments); + + if (!__WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].isApntagDefined()) { + utils.logError('window.apntag is not defined on the page'); + return; + } + + __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].setTargetingForAst(adUnitCodes); // emit event + + events.emit(SET_TARGETING, __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getAllTargeting()); +}; + +function emitAdRenderFail(_ref2) { + var reason = _ref2.reason, + message = _ref2.message, + bid = _ref2.bid, + id = _ref2.id; + var data = { + reason: reason, + message: message + }; + if (bid) data.bid = bid; + if (id) data.adId = id; + 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 = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].findBidByAdId(id); + + if (bid) { + // 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 + + __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* 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 ".concat(bid.creativeId, " served by ").concat(bid.bidder, " Prebid.js Header Bidding")); + utils.insertElement(creativeComment, doc, 'body'); + + if (Object(__WEBPACK_IMPORTED_MODULE_11__Renderer_js__["c" /* isRendererRequired */])(renderer)) { + Object(__WEBPACK_IMPORTED_MODULE_11__Renderer_js__["b" /* executeRenderer */])(renderer, bid); + } else if (doc === document && !utils.inIframe() || mediaType === 'video') { + var message = "Error trying to write ad. Ad render call ad id ".concat(id, " was prevented from writing to the main document."); + emitAdRenderFail({ + reason: PREVENT_WRITING_ON_MAIN_DOCUMENT, + message: message, + bid: bid, + id: id + }); + } else if (ad) { + // will check if browser is firefox and below version 67, if so execute special doc.open() + // for details see: https://github.com/prebid/Prebid.js/pull/3524 + // TODO remove this browser specific code at later date (when Firefox < 67 usage is mostly gone) + if (navigator.userAgent && navigator.userAgent.toLowerCase().indexOf('firefox/') > -1) { + var firefoxVerRegx = /firefox\/([\d\.]+)/; + var firefoxVer = navigator.userAgent.toLowerCase().match(firefoxVerRegx)[1]; // grabs the text in the 1st matching group + + if (firefoxVer && parseInt(firefoxVer, 10) < 67) { + doc.open('text/html', 'replace'); + } + } + + 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: ".concat(id); + + emitAdRenderFail({ + reason: NO_AD, + message: _message, + bid: bid, + id: id + }); + } + } else { + var _message2 = "Error trying to write ad. Cannot find ad by given id : ".concat(id); + + emitAdRenderFail({ + reason: CANNOT_FIND_AD, + message: _message2, + id: id + }); + } + } catch (e) { + var _message3 = "Error trying to write ad Id :".concat(id, " to the page:").concat(e.message); + + emitAdRenderFail({ + reason: EXCEPTION, + message: _message3, + id: id + }); + } + } else { + var _message4 = "Error trying to write ad Id :".concat(id, " to the page. Missing document or adId"); + + emitAdRenderFail({ + reason: MISSING_DOC_OR_ADID, + message: _message4, + id: id + }); + } +}; +/** + * Remove adUnit from the $$PREBID_GLOBAL$$ configuration, if there are no addUnitCode(s) it will remove all + * @param {string| Array} adUnitCode the adUnitCode(s) to remove + * @alias module:pbjs.removeAdUnit + */ + + +pbjs.removeAdUnit = function (adUnitCode) { + utils.logInfo("Invoking pbjs.removeAdUnit", arguments); + + if (!adUnitCode) { + pbjs.adUnits = []; + return; + } + + var adUnitCodes; + + if (utils.isArray(adUnitCode)) { + adUnitCodes = adUnitCode; + } else { + adUnitCodes = [adUnitCode]; + } + + adUnitCodes.forEach(function (adUnitCode) { + for (var i = pbjs.adUnits.length - 1; i >= 0; 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 + * @param {String} requestOptions.auctionId + * @alias module:pbjs.requestBids + */ + + +pbjs.requestBids = Object(__WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */])('async', function () { + var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + bidsBackHandler = _ref3.bidsBackHandler, + timeout = _ref3.timeout, + adUnits = _ref3.adUnits, + adUnitCodes = _ref3.adUnitCodes, + labels = _ref3.labels, + auctionId = _ref3.auctionId; + + events.emit(REQUEST_BIDS); + var cbTimeout = timeout || __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].getConfig('bidderTimeout'); + adUnits = adUnits || pbjs.adUnits; + utils.logInfo("Invoking pbjs.requestBids", arguments); + adUnits = checkAdUnitSetup(adUnits); + + if (adUnitCodes && adUnitCodes.length) { + // if specific adUnitCodes supplied filter adUnits for those codes + adUnits = adUnits.filter(function (unit) { + return __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___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 allBidders = adUnit.bids.map(function (bid) { + return bid.bidder; + }); + var bidderRegistry = adapterManager.bidderRegistry; + var s2sConfig = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].getConfig('s2sConfig'); + var s2sBidders = s2sConfig && s2sConfig.bidders; + var bidders = s2sBidders ? allBidders.filter(function (bidder) { + return !__WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___default()(s2sBidders, bidder); + }) : allBidders; + adUnit.transactionId = utils.generateUUID(); + 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 __WEBPACK_IMPORTED_MODULE_9_core_js_pure_features_array_includes_js___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; + }); + } else { + __WEBPACK_IMPORTED_MODULE_10__adUnits_js__["a" /* adunitCounter */].incrementBidderRequestsCounter(adUnit.code, bidder); + } + }); + __WEBPACK_IMPORTED_MODULE_10__adUnits_js__["a" /* adunitCounter */].incrementRequestsCounter(adUnit.code); + }); + + 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 = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].createAuction({ + adUnits: adUnits, + adUnitCodes: adUnitCodes, + callback: bidsBackHandler, + cbTimeout: cbTimeout, + labels: labels, + auctionId: auctionId + }); + var adUnitsLen = adUnits.length; + + if (adUnitsLen > 15) { + utils.logInfo("Current auction ".concat(auction.getAuctionId(), " contains ").concat(adUnitsLen, " adUnits."), adUnits); + } + + adUnitCodes.forEach(function (code) { + return __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].setLatestAuctionForAdUnit(code, auction.getAuctionId()); + }); + auction.callBids(); +}); +function executeStorageCallbacks(fn, reqBidsConfigObj) { + runAll(__WEBPACK_IMPORTED_MODULE_13__storageManager_js__["c" /* storageCallbacks */]); + fn.call(this, reqBidsConfigObj); + + function runAll(queue) { + var queued; + + while (queued = queue.shift()) { + queued(); + } + } +} // This hook will execute all storage callbacks which were registered before gdpr enforcement hook was added. Some bidders, user id modules use storage functions when module is parsed but gdpr enforcement hook is not added at that stage as setConfig callbacks are yet to be called. Hence for such calls we execute all the stored callbacks just before requestBids. At this hook point we will know for sure that gdprEnforcement module is added or not + +pbjs.requestBids.before(executeStorageCallbacks, 49); +/** + * + * 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)) { + pbjs.adUnits.push.apply(pbjs.adUnits, adUnitArr); + } else if (_typeof(adUnitArr) === 'object') { + 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 `$$PREBID_GLOBAL$$.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 Object(__WEBPACK_IMPORTED_MODULE_12__bidfactory_js__["a" /* createBid */])(statusCode); +}; +/** + * 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, options) { + utils.logInfo("Invoking pbjs.aliasBidder", arguments); + + if (bidderCode && alias) { + adapterManager.aliasBidAdapter(bidderCode, alias, options); + } 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: `"",`. + * @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 been rendered. Useful for [troubleshooting your integration](http://prebid.org/dev-docs/prebid-troubleshooting-guide.html). + * @return {Array} A list of bids that have been rendered. +*/ + + +pbjs.getAllWinningBids = function () { + return __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getAllWinningBids(); +}; +/** + * Get all of the bids that have won their respective auctions. + * @return {Array} A list of bids that have won their respective auctions. + */ + + +pbjs.getAllPrebidWinningBids = function () { + return __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.status === CONSTANTS.BID_STATUS.BID_TARGETING_SET; + }); +}; +/** + * 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 __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getWinningBids(adUnitCode); +}; +/** + * Mark the winning bid as used, should only be used in conjunction with video + * @typedef {Object} MarkBidRequest + * @property {string} adUnitCode The ad unit code + * @property {string} adId The id representing the ad we want to mark + * + * @alias module:pbjs.markWinningBidAsUsed +*/ + + +pbjs.markWinningBidAsUsed = function (markBidRequest) { + var bids = []; + + if (markBidRequest.adUnitCode && markBidRequest.adId) { + bids = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.adId === markBidRequest.adId && bid.adUnitCode === markBidRequest.adUnitCode; + }); + } else if (markBidRequest.adUnitCode) { + bids = __WEBPACK_IMPORTED_MODULE_6__targeting_js__["a" /* targeting */].getWinningBids(markBidRequest.adUnitCode); + } else if (markBidRequest.adId) { + bids = __WEBPACK_IMPORTED_MODULE_5__auctionManager_js__["a" /* auctionManager */].getBidsReceived().filter(function (bid) { + return bid.adId === markBidRequest.adId; + }); + } else { + utils.logWarn('Inproper usage of markWinningBidAsUsed. It\'ll need an adUnitCode and/or adId to function.'); + } + + if (bids.length > 0) { + bids[0].status = CONSTANTS.BID_STATUS.RENDERED; + } +}; +/** + * Get Prebid config options + * @param {Object} options + * @alias module:pbjs.getConfig + */ + + +pbjs.getConfig = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* 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 {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 = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].setConfig; +pbjs.setBidderConfig = __WEBPACK_IMPORTED_MODULE_4__config_js__["b" /* config */].setBidderConfig; +pbjs.que.push(function () { + return Object(__WEBPACK_IMPORTED_MODULE_2__secureCreatives_js__["a" /* 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: + * + * + * + * + * 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 () { + __WEBPACK_IMPORTED_MODULE_7__hook_js__["b" /* hook */].ready(); + processQueue(pbjs.que); + processQueue(pbjs.cmd); +}; + +/* harmony default export */ __webpack_exports__["default"] = (pbjs); + +/***/ }), + +/***/ 69: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = registerVideoSupport; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); + + +var prebid = Object(__WEBPACK_IMPORTED_MODULE_0__prebidGlobal_js__["a" /* 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 + * $$PREBID_GLOBAL$$.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] || {}; + Object.keys(videoSupport).forEach(function (key) { + if (prebid.adServers[name][key]) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])("Attempting to add an already registered function property ".concat(key, " for AdServer ").concat(name, ".")); + return; + } + + prebid.adServers[name][key] = videoSupport[key]; + }); +} + +/***/ }), + +/***/ 7: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gdprDataHandler", function() { return gdprDataHandler; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uspDataHandler", function() { return uspDataHandler; }); +/* harmony export (immutable) */ __webpack_exports__["setS2STestingModule"] = setS2STestingModule; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__ = __webpack_require__(91); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__adUnits_js__ = __webpack_require__(67); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__refererDetection_js__ = __webpack_require__(30); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** @module adaptermanger */ + + + + + + + + + + + + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var events = __webpack_require__(8); + +var s2sTestingModule; // store s2sTesting module if it's loaded + +var adapterManager = {}; + +var _bidderRegistry = adapterManager.bidderRegistry = {}; + +var _aliasRegistry = adapterManager.aliasRegistry = {}; + +var _s2sConfig = {}; +__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* 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} labels the labels listed on the bidder or adUnit + * @property {Array} activeLabels the labels specified as being active by requestBids + */ + +function getBids(_ref) { + var bidderCode = _ref.bidderCode, + auctionId = _ref.auctionId, + bidderRequestId = _ref.bidderRequestId, + adUnits = _ref.adUnits, + labels = _ref.labels, + src = _ref.src; + return adUnits.reduce(function (result, adUnit) { + var _resolveStatus = Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["b" /* resolveStatus */])(Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["a" /* getLabels */])(adUnit, labels), adUnit.mediaTypes, adUnit.sizes), + active = _resolveStatus.active, + filteredMediaTypes = _resolveStatus.mediaTypes, + filterResults = _resolveStatus.filterResults; + + if (!active) { + utils.logInfo("Size mapping disabled adUnit \"".concat(adUnit.code, "\"")); + } else if (filterResults) { + utils.logInfo("Size mapping filtered adUnit \"".concat(adUnit.code, "\" banner sizes from "), filterResults.before, 'to ', filterResults.after); + } + + if (active) { + result.push(adUnit.bids.filter(function (bid) { + return bid.bidder === bidderCode; + }).reduce(function (bids, bid) { + var nativeParams = adUnit.nativeParams || utils.deepAccess(adUnit, 'mediaTypes.native'); + + if (nativeParams) { + bid = _extends({}, bid, { + nativeParams: Object(__WEBPACK_IMPORTED_MODULE_2__native_js__["g" /* processNativeAdUnitParams */])(nativeParams) + }); + } + + bid = _extends({}, bid, Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getDefinedParams"])(adUnit, ['fpd', 'mediaType', 'renderer', 'storedAuctionResponse'])); + + var _resolveStatus2 = Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["b" /* resolveStatus */])(Object(__WEBPACK_IMPORTED_MODULE_1__sizeMapping_js__["a" /* getLabels */])(bid, labels), filteredMediaTypes), + active = _resolveStatus2.active, + mediaTypes = _resolveStatus2.mediaTypes, + filterResults = _resolveStatus2.filterResults; + + if (!active) { + utils.logInfo("Size mapping deactivated adUnit \"".concat(adUnit.code, "\" bidder \"").concat(bid.bidder, "\"")); + } else if (filterResults) { + utils.logInfo("Size mapping filtered adUnit \"".concat(adUnit.code, "\" bidder \"").concat(bid.bidder, "\" banner sizes from "), filterResults.before, 'to ', filterResults.after); + } + + if (utils.isValidMediaTypes(mediaTypes)) { + bid = _extends({}, bid, { + mediaTypes: mediaTypes + }); + } else { + utils.logError("mediaTypes is not correctly configured for adunit ".concat(adUnit.code)); + } + + if (active) { + bids.push(_extends({}, bid, { + adUnitCode: adUnit.code, + transactionId: adUnit.transactionId, + sizes: utils.deepAccess(mediaTypes, 'banner.sizes') || utils.deepAccess(mediaTypes, 'video.playerSize') || [], + bidId: bid.bid_id || utils.getUniqueIdentifierStr(), + bidderRequestId: bidderRequestId, + auctionId: auctionId, + src: src, + bidRequestsCount: __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].getRequestsCounter(adUnit.code), + bidderRequestsCount: __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].getBidderRequestsCounter(adUnit.code, bid.bidder), + bidderWinsCount: __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].getBidderWinsCounter(adUnit.code, bid.bidder) + })); + } + + return bids; + }, [])); + } + + return result; + }, []).reduce(__WEBPACK_IMPORTED_MODULE_0__utils_js__["flatten"], []).filter(function (val) { + return val !== ''; + }); +} + +var hookedGetBids = Object(__WEBPACK_IMPORTED_MODULE_6__hook_js__["b" /* hook */])('sync', getBids, 'getBids'); + +function getAdUnitCopyForPrebidServer(adUnits) { + var adaptersServerSide = _s2sConfig.bidders; + var adUnitsCopy = utils.deepClone(adUnits); + adUnitsCopy.forEach(function (adUnit) { + // filter out client side bids + adUnit.bids = adUnit.bids.filter(function (bid) { + return __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___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; +} + +var gdprDataHandler = { + consentData: null, + setConsentData: function setConsentData(consentInfo) { + gdprDataHandler.consentData = consentInfo; + }, + getConsentData: function getConsentData() { + return gdprDataHandler.consentData; + } +}; +var uspDataHandler = { + consentData: null, + setConsentData: function setConsentData(consentInfo) { + uspDataHandler.consentData = consentInfo; + }, + getConsentData: function getConsentData() { + return uspDataHandler.consentData; + } +}; +adapterManager.makeBidRequests = Object(__WEBPACK_IMPORTED_MODULE_6__hook_js__["b" /* hook */])('sync', function (adUnits, auctionStart, auctionId, cbTimeout, labels) { + /** + * emit and pass adunits for external modification + * @see {@link https://github.com/prebid/Prebid.js/issues/4149|Issue} + */ + events.emit(CONSTANTS.EVENTS.BEFORE_REQUEST_BIDS, adUnits); + var bidRequests = []; + var bidderCodes = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidderCodes"])(adUnits); + + if (__WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('bidderSequence') === __WEBPACK_IMPORTED_MODULE_5__config_js__["a" /* RANDOM */]) { + bidderCodes = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["shuffle"])(bidderCodes); + } + + var refererInfo = Object(__WEBPACK_IMPORTED_MODULE_10__refererDetection_js__["a" /* getRefererInfo */])(); + var clientBidderCodes = bidderCodes; + var clientTestAdapters = []; + + if (_s2sConfig.enabled) { + // if s2sConfig.bidderControl testing is turned on + if (doingS2STesting()) { + // get all adapters doing client testing + var bidderMap = s2sTestingModule.getSourceBidderMap(adUnits); + clientTestAdapters = bidderMap[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 !__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(adaptersServerSide, elm) || __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(clientTestAdapters, elm); + }); + + var adUnitsContainServerRequests = function adUnitsContainServerRequests(adUnits) { + return Boolean(__WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adUnits, function (adUnit) { + return __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(adUnit.bids, function (bid) { + return (bid.bidSource || _s2sConfig.bidderControl && _s2sConfig.bidderControl[bid.bidder]) && bid.finalSource === s2sTestingModule.SERVER; + }); + })); + }; + + if (isTestingServerOnly() && adUnitsContainServerRequests(adUnits)) { + clientBidderCodes.length = 0; + } + + 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, + bids: hookedGetBids({ + bidderCode: bidderCode, + auctionId: auctionId, + bidderRequestId: bidderRequestId, + 'adUnits': utils.deepClone(adUnitsS2SCopy), + labels: labels, + src: CONSTANTS.S2S.SRC + }), + auctionStart: auctionStart, + timeout: _s2sConfig.timeout, + src: CONSTANTS.S2S.SRC, + refererInfo: refererInfo + }; + + if (bidderRequest.bids.length !== 0) { + bidRequests.push(bidderRequest); + } + }); // update the s2sAdUnits object and remove all bids that didn't pass sizeConfig/label checks from getBids() + // this is to keep consistency and only allow bids/adunits that passed the checks to go to pbs + + adUnitsS2SCopy.forEach(function (adUnitCopy) { + var validBids = adUnitCopy.bids.filter(function (adUnitBid) { + return __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(bidRequests, function (request) { + return __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(request.bids, function (reqBid) { + return reqBid.bidId === adUnitBid.bid_id; + }); + }); + }); + adUnitCopy.bids = validBids; + }); + bidRequests.forEach(function (request) { + request.adUnitsS2SCopy = adUnitsS2SCopy.filter(function (adUnitCopy) { + return adUnitCopy.bids.length > 0; + }); + }); + } // client adapters + + + var adUnitsClientCopy = getAdUnitCopyForClientAdapters(adUnits); + clientBidderCodes.forEach(function (bidderCode) { + var bidderRequestId = utils.getUniqueIdentifierStr(); + var bidderRequest = { + bidderCode: bidderCode, + auctionId: auctionId, + bidderRequestId: bidderRequestId, + bids: hookedGetBids({ + bidderCode: bidderCode, + auctionId: auctionId, + bidderRequestId: bidderRequestId, + 'adUnits': utils.deepClone(adUnitsClientCopy), + labels: labels, + src: 'client' + }), + auctionStart: auctionStart, + timeout: cbTimeout, + refererInfo: refererInfo + }; + var adapter = _bidderRegistry[bidderCode]; + + if (!adapter) { + utils.logError("Trying to make a request for bidder that does not exist: ".concat(bidderCode)); + } + + if (adapter && bidderRequest.bids && bidderRequest.bids.length !== 0) { + bidRequests.push(bidderRequest); + } + }); + + if (gdprDataHandler.getConsentData()) { + bidRequests.forEach(function (bidRequest) { + bidRequest['gdprConsent'] = gdprDataHandler.getConsentData(); + }); + } + + if (uspDataHandler.getConsentData()) { + bidRequests.forEach(function (bidRequest) { + bidRequest['uspConsent'] = uspDataHandler.getConsentData(); + }); + } + + return bidRequests; +}, 'makeBidRequests'); + +adapterManager.callBids = function (adUnits, bidRequests, addBidResponse, doneCb, requestCallbacks, requestBidsTimeout, onTimelyResponse) { + if (!bidRequests.length) { + utils.logWarn('callBids executed with no bidRequests. Were they filtered by labels or sizing?'); + return; + } + + 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) { + // s2s should get the same client side timeout as other client side requests. + var s2sAjax = Object(__WEBPACK_IMPORTED_MODULE_4__ajax_js__["b" /* ajaxBuilder */])(requestBidsTimeout, requestCallbacks ? { + request: requestCallbacks.request.bind(null, 's2s'), + done: requestCallbacks.done + } : undefined); + 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 = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["timestamp"])(); + return doneCb.bind(bidRequest); + }); // 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 ==== ".concat(adaptersServerSide.filter(function (adapter) { + return __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___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, function (adUnitCode, bid) { + var bidderRequest = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["getBidderRequest"])(serverBidRequests, bid.bidderCode, adUnitCode); + + if (bidderRequest) { + addBidResponse.call(bidderRequest, adUnitCode, bid); + } + }, function () { + return doneCbs.forEach(function (done) { + return done(); + }); + }, s2sAjax); + } + } else { + utils.logError('missing ' + _s2sConfig.adapter); + } + } // handle client adapter requests + + + clientBidRequests.forEach(function (bidRequest) { + bidRequest.start = Object(__WEBPACK_IMPORTED_MODULE_0__utils_js__["timestamp"])(); // TODO : Do we check for bid in pool from here and skip calling adapter again ? + + var adapter = _bidderRegistry[bidRequest.bidderCode]; + utils.logMessage("CALLING BIDDER ======= ".concat(bidRequest.bidderCode)); + events.emit(CONSTANTS.EVENTS.BID_REQUESTED, bidRequest); + var ajax = Object(__WEBPACK_IMPORTED_MODULE_4__ajax_js__["b" /* ajaxBuilder */])(requestBidsTimeout, requestCallbacks ? { + request: requestCallbacks.request.bind(null, bidRequest.bidderCode), + done: requestCallbacks.done + } : undefined); + var adapterDone = doneCb.bind(bidRequest); + + try { + __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].runWithBidder(bidRequest.bidderCode, __WEBPACK_IMPORTED_MODULE_0__utils_js__["bind"].call(adapter.callBids, adapter, bidRequest, addBidResponse.bind(bidRequest), adapterDone, ajax, onTimelyResponse, __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].callbackWithBidder(bidRequest.bidderCode))); + } catch (e) { + utils.logError("".concat(bidRequest.bidderCode, " Bid Adapter emitted an uncaught error when parsing their bidRequest"), { + e: e, + bidRequest: bidRequest + }); + adapterDone(); + } + }); +}; + +function doingS2STesting() { + return _s2sConfig && _s2sConfig.enabled && _s2sConfig.testing && s2sTestingModule; +} + +function isTestingServerOnly() { + return Boolean(doingS2STesting() && _s2sConfig.testServerOnly); +} + +; + +function getSupportedMediaTypes(bidderCode) { + var result = []; + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(adapterManager.videoAdapters, bidderCode)) result.push('video'); + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(__WEBPACK_IMPORTED_MODULE_2__native_js__["e" /* nativeAdapters */], bidderCode)) result.push('native'); + return result; +} + +adapterManager.videoAdapters = []; // added by adapterLoader for now + +adapterManager.registerBidAdapter = function (bidAdaptor, bidderCode) { + var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref2$supportedMediaT = _ref2.supportedMediaTypes, + supportedMediaTypes = _ref2$supportedMediaT === void 0 ? [] : _ref2$supportedMediaT; + + if (bidAdaptor && bidderCode) { + if (typeof bidAdaptor.callBids === 'function') { + _bidderRegistry[bidderCode] = bidAdaptor; + + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(supportedMediaTypes, 'video')) { + adapterManager.videoAdapters.push(bidderCode); + } + + if (__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(supportedMediaTypes, 'native')) { + __WEBPACK_IMPORTED_MODULE_2__native_js__["e" /* 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'); + } +}; + +adapterManager.aliasBidAdapter = function (bidderCode, alias, options) { + var existingAlias = _bidderRegistry[alias]; + + if (typeof existingAlias === 'undefined') { + var bidAdaptor = _bidderRegistry[bidderCode]; + + if (typeof bidAdaptor === 'undefined') { + // check if alias is part of s2sConfig and allow them to register if so (as base bidder may be s2s-only) + var s2sConfig = __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].getConfig('s2sConfig'); + var s2sBidders = s2sConfig && s2sConfig.bidders; + + if (!(s2sBidders && __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(s2sBidders, alias))) { + utils.logError('bidderCode "' + bidderCode + '" is not an existing bidder.', 'adapterManager.aliasBidAdapter'); + } else { + _aliasRegistry[alias] = bidderCode; + } + } else { + try { + var newAdapter; + 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(); + var gvlid = options && options.gvlid; + newAdapter = Object(__WEBPACK_IMPORTED_MODULE_3__adapters_bidderFactory_js__["newBidder"])(_extends({}, spec, { + code: alias, + gvlid: gvlid + })); + _aliasRegistry[alias] = bidderCode; + } + + adapterManager.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.'); + } +}; + +adapterManager.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 \"".concat(code, "\"\n analytics adapter must implement an enableAnalytics() function")); + } + } else { + utils.logError('Prebid Error: analyticsAdapter or analyticsCode not specified'); + } +}; + +adapterManager.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 ".concat(adapterConfig.provider, ".")); + } + }); +}; + +adapterManager.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 + + +function setS2STestingModule(module) { + s2sTestingModule = module; +} + +function tryCallBidderMethod(bidder, method, param) { + try { + var adapter = _bidderRegistry[bidder]; + var spec = adapter.getSpec(); + + if (spec && spec[method] && typeof spec[method] === 'function') { + utils.logInfo("Invoking ".concat(bidder, ".").concat(method)); + __WEBPACK_IMPORTED_MODULE_5__config_js__["b" /* config */].runWithBidder(bidder, __WEBPACK_IMPORTED_MODULE_0__utils_js__["bind"].call(spec[method], spec, param)); + } + } catch (e) { + utils.logWarn("Error calling ".concat(method, " of ").concat(bidder)); + } +} + +adapterManager.callTimedOutBidders = function (adUnits, timedOutBidders, cbTimeout) { + timedOutBidders = timedOutBidders.map(function (timedOutBidder) { + // Adding user configured params & timeout to timeout event data + timedOutBidder.params = utils.getUserConfiguredParams(adUnits, timedOutBidder.adUnitCode, timedOutBidder.bidder); + timedOutBidder.timeout = cbTimeout; + return timedOutBidder; + }); + timedOutBidders = utils.groupBy(timedOutBidders, 'bidder'); + Object.keys(timedOutBidders).forEach(function (bidder) { + tryCallBidderMethod(bidder, 'onTimeout', timedOutBidders[bidder]); + }); +}; + +adapterManager.callBidWonBidder = function (bidder, bid, adUnits) { + // Adding user configured params to bidWon event data + bid.params = utils.getUserConfiguredParams(adUnits, bid.adUnitCode, bid.bidder); + __WEBPACK_IMPORTED_MODULE_9__adUnits_js__["a" /* adunitCounter */].incrementBidderWinsCounter(bid.adUnitCode, bid.bidder); + tryCallBidderMethod(bidder, 'onBidWon', bid); +}; + +adapterManager.callSetTargetingBidder = function (bidder, bid) { + tryCallBidderMethod(bidder, 'onSetTargeting', bid); +}; + +/* harmony default export */ __webpack_exports__["default"] = (adapterManager); + +/***/ }), + +/***/ 70: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); +var classof = __webpack_require__(48); + +var split = ''.split; + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins + return !Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) == 'String' ? split.call(it, '') : Object(it); +} : Object; + + +/***/ }), + +/***/ 71: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var fails = __webpack_require__(28); +var createElement = __webpack_require__(72); + +// Thank's IE8 for his funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; +}); + + +/***/ }), + +/***/ 72: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var isObject = __webpack_require__(23); + +var document = global.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), + +/***/ 73: +/***/ (function(module, exports, __webpack_require__) { + +var IS_PURE = __webpack_require__(16); +var store = __webpack_require__(74); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.6.4', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2020 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), + +/***/ 74: +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(22); +var setGlobal = __webpack_require__(103); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; + + +/***/ }), + +/***/ 75: +/***/ (function(module, exports, __webpack_require__) { + +var fails = __webpack_require__(28); + +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + // Chrome 38 Symbol has incorrect toString conversion + // eslint-disable-next-line no-undef + return !String(Symbol()); +}); + + +/***/ }), + +/***/ 76: +/***/ (function(module, exports, __webpack_require__) { + +var toIndexedObject = __webpack_require__(47); +var toLength = __webpack_require__(50); +var toAbsoluteIndex = __webpack_require__(107); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($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) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), + +/***/ 77: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(108); +__webpack_require__(131); +__webpack_require__(133); +__webpack_require__(135); +__webpack_require__(137); +__webpack_require__(139); +__webpack_require__(140); +__webpack_require__(141); +__webpack_require__(142); +__webpack_require__(143); +__webpack_require__(144); +__webpack_require__(145); +__webpack_require__(146); +__webpack_require__(147); +__webpack_require__(148); +__webpack_require__(149); +__webpack_require__(150); +__webpack_require__(151); +__webpack_require__(152); + +module.exports = parent; + + +/***/ }), + +/***/ 78: +/***/ (function(module, exports, __webpack_require__) { + +var hiddenKeys = __webpack_require__(53); +var isObject = __webpack_require__(23); +var has = __webpack_require__(24); +var defineProperty = __webpack_require__(31).f; +var uid = __webpack_require__(59); +var FREEZING = __webpack_require__(111); + +var METADATA = uid('meta'); +var id = 0; + +var isExtensible = Object.isExtensible || function () { + return true; +}; + +var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + ++id, // object ID + weakData: {} // weak collections IDs + } }); +}; + +var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; +}; + +var getWeakData = function (it, create) { + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; +}; + +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); + return it; +}; + +var meta = module.exports = { + REQUIRED: false, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze +}; + +hiddenKeys[METADATA] = true; + + +/***/ }), + +/***/ 79: +/***/ (function(module, exports, __webpack_require__) { + +var wellKnownSymbol = __webpack_require__(19); +var Iterators = __webpack_require__(37); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), + +/***/ 8: +/***/ (function(module, exports, __webpack_require__) { + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * events.js + */ +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +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(que.indexOf(_handler), 1); + } + }); + } else { + utils._each(event.que, function (_handler) { + var que = event.que; + + if (_handler === handler) { + que.splice(que.indexOf(_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; +}(); + +/***/ }), + +/***/ 80: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (error) { + var returnMethod = iterator['return']; + if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); + throw error; + } +}; + + +/***/ }), + +/***/ 81: +/***/ (function(module, exports) { + +module.exports = function (it, Constructor, name) { + if (!(it instanceof Constructor)) { + throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); + } return it; +}; + + +/***/ }), + +/***/ 82: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var defineProperties = __webpack_require__(116); +var enumBugKeys = __webpack_require__(83); +var hiddenKeys = __webpack_require__(53); +var html = __webpack_require__(119); +var documentCreateElement = __webpack_require__(72); +var sharedKey = __webpack_require__(65); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.github.io/ecma262/#sec-object.create +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : defineProperties(result, Properties); +}; + + +/***/ }), + +/***/ 828: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(68); + + +/***/ }), + +/***/ 83: +/***/ (function(module, exports) { + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), + +/***/ 84: +/***/ (function(module, exports, __webpack_require__) { + +var createNonEnumerableProperty = __webpack_require__(29); + +module.exports = function (target, key, value, options) { + if (options && options.enumerable) target[key] = value; + else createNonEnumerableProperty(target, key, value); +}; + + +/***/ }), + +/***/ 85: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var getPrototypeOf = __webpack_require__(86); +var createNonEnumerableProperty = __webpack_require__(29); +var has = __webpack_require__(24); +var wellKnownSymbol = __webpack_require__(19); +var IS_PURE = __webpack_require__(16); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +var returnThis = function () { return this; }; + +// `%IteratorPrototype%` object +// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +if (IteratorPrototype == undefined) IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + + +/***/ }), + +/***/ 86: +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(24); +var toObject = __webpack_require__(57); +var sharedKey = __webpack_require__(65); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(122); + +var IE_PROTO = sharedKey('IE_PROTO'); +var ObjectPrototype = Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.github.io/ecma262/#sec-object.getprototypeof +module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectPrototype : null; +}; + + +/***/ }), + +/***/ 87: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var charAt = __webpack_require__(127).charAt; +var InternalStateModule = __webpack_require__(54); +var defineIterator = __webpack_require__(66); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: String(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; +}); + + +/***/ }), + +/***/ 88: +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(15); +var getIteratorMethod = __webpack_require__(61); + +module.exports = function (it) { + var iteratorMethod = getIteratorMethod(it); + if (typeof iteratorMethod != 'function') { + throw TypeError(String(it) + ' is not iterable'); + } return anObject(iteratorMethod.call(it)); +}; + + +/***/ }), + +/***/ 89: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(153); + +module.exports = parent; + + +/***/ }), + +/***/ 9: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return storageCallbacks; }); +/* unused harmony export newStorageManager */ +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return validateStorageEnforcement; }); +/* harmony export (immutable) */ __webpack_exports__["a"] = getCoreStorageManager; +/* harmony export (immutable) */ __webpack_exports__["b"] = getStorageManager; +/* unused harmony export resetData */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); + + + +var moduleTypeWhiteList = ['core', 'prebid-module']; +var storageCallbacks = []; +/** + * Storage options + * @typedef {Object} storageOptions + * @property {Number=} gvlid - Vendor id + * @property {string} moduleName - Module name + * @property {string=} moduleType - Module type, value can be anyone of core or prebid-module + */ + +/** + * Returns list of storage related functions with gvlid, module name and module type in its scope. + * All three argument are optional here. Below shows the usage of of these + * - GVL Id: Pass GVL id if you are a vendor + * - Module name: All modules need to pass module name + * - Module type: Some modules may need these functions but are not vendor. e.g prebid core files in src and modules like currency. + * @param {storageOptions} options + */ + +function newStorageManager() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + gvlid = _ref.gvlid, + moduleName = _ref.moduleName, + moduleType = _ref.moduleType; + + function isValid(cb) { + if (__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(moduleTypeWhiteList, moduleType)) { + var result = { + valid: true + }; + return cb(result); + } else { + var value; + var hookDetails = { + hasEnforcementHook: false + }; + validateStorageEnforcement(gvlid, moduleName, hookDetails, function (result) { + if (result && result.hasEnforcementHook) { + value = cb(result); + } else { + var _result = { + hasEnforcementHook: false, + valid: __WEBPACK_IMPORTED_MODULE_1__utils_js__["hasDeviceAccess"]() + }; + value = cb(_result); + } + }); + return value; + } + } + /** + * @param {string} key + * @param {string} value + * @param {string} [expires=''] + * @param {string} [sameSite='/'] + * @param {string} [domain] domain (e.g., 'example.com' or 'subdomain.example.com'). + * If not specified, defaults to the host portion of the current document location. + * If a domain is specified, subdomains are always included. + * Domain must match the domain of the JavaScript origin. Setting cookies to foreign domains will be silently ignored. + */ + + + var setCookie = function setCookie(key, value, expires, sameSite, domain, done) { + var cb = function cb(result) { + if (result && result.valid) { + var domainPortion = domain && domain !== '' ? " ;domain=".concat(encodeURIComponent(domain)) : ''; + var expiresPortion = expires && expires !== '' ? " ;expires=".concat(expires) : ''; + var isNone = sameSite != null && sameSite.toLowerCase() == 'none'; + var secure = isNone ? '; Secure' : ''; + document.cookie = "".concat(key, "=").concat(encodeURIComponent(value)).concat(expiresPortion, "; path=/").concat(domainPortion).concat(sameSite ? "; SameSite=".concat(sameSite) : '').concat(secure); + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} name + * @returns {(string|null)} + */ + + + var getCookie = function getCookie(name, done) { + var cb = function cb(result) { + if (result && result.valid) { + var m = window.document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]*)\\s*(;|$)'); + return m ? decodeURIComponent(m[2]) : null; + } + + return null; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @returns {boolean} + */ + + + var localStorageIsEnabled = function localStorageIsEnabled(done) { + var cb = function cb(result) { + if (result && result.valid) { + try { + localStorage.setItem('prebid.cookieTest', '1'); + return localStorage.getItem('prebid.cookieTest') === '1'; + } catch (error) {} + } + + return false; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @returns {boolean} + */ + + + var cookiesAreEnabled = function cookiesAreEnabled(done) { + var cb = function cb(result) { + if (result && result.valid) { + if (__WEBPACK_IMPORTED_MODULE_1__utils_js__["checkCookieSupport"]()) { + return true; + } + + window.document.cookie = 'prebid.cookieTest'; + return window.document.cookie.indexOf('prebid.cookieTest') !== -1; + } + + return false; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} key + * @param {string} value + */ + + + var setDataInLocalStorage = function setDataInLocalStorage(key, value, done) { + var cb = function cb(result) { + if (result && result.valid) { + window.localStorage.setItem(key, value); + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} key + * @returns {(string|null)} + */ + + + var getDataFromLocalStorage = function getDataFromLocalStorage(key, done) { + var cb = function cb(result) { + if (result && result.valid) { + return window.localStorage.getItem(key); + } + + return null; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @param {string} key + */ + + + var removeDataFromLocalStorage = function removeDataFromLocalStorage(key, done) { + var cb = function cb(result) { + if (result && result.valid) { + window.localStorage.removeItem(key); + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * @returns {boolean} + */ + + + var hasLocalStorage = function hasLocalStorage(done) { + var cb = function cb(result) { + if (result && result.valid) { + try { + return !!window.localStorage; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__utils_js__["logError"]('Local storage api disabled'); + } + } + + return false; + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + /** + * Returns all cookie values from the jar whose names contain the `keyLike` + * Needs to exist in `utils.js` as it follows the StorageHandler interface defined in live-connect-js. If that module were to be removed, this function can go as well. + * @param {string} keyLike + * @return {[]} + */ + + + var findSimilarCookies = function findSimilarCookies(keyLike, done) { + var cb = function cb(result) { + if (result && result.valid) { + var all = []; + + if (__WEBPACK_IMPORTED_MODULE_1__utils_js__["hasDeviceAccess"]()) { + var cookies = document.cookie.split(';'); + + while (cookies.length) { + var cookie = cookies.pop(); + var separatorIndex = cookie.indexOf('='); + separatorIndex = separatorIndex < 0 ? cookie.length : separatorIndex; + var cookieName = decodeURIComponent(cookie.slice(0, separatorIndex).replace(/^\s+/, '')); + + if (cookieName.indexOf(keyLike) >= 0) { + all.push(decodeURIComponent(cookie.slice(separatorIndex + 1))); + } + } + } + + return all; + } + }; + + if (done && typeof done === 'function') { + storageCallbacks.push(function () { + var result = isValid(cb); + done(result); + }); + } else { + return isValid(cb); + } + }; + + return { + setCookie: setCookie, + getCookie: getCookie, + localStorageIsEnabled: localStorageIsEnabled, + cookiesAreEnabled: cookiesAreEnabled, + setDataInLocalStorage: setDataInLocalStorage, + getDataFromLocalStorage: getDataFromLocalStorage, + removeDataFromLocalStorage: removeDataFromLocalStorage, + hasLocalStorage: hasLocalStorage, + findSimilarCookies: findSimilarCookies + }; +} +/** + * This hook validates the storage enforcement if gdprEnforcement module is included + */ + +var validateStorageEnforcement = Object(__WEBPACK_IMPORTED_MODULE_0__hook_js__["b" /* hook */])('async', function (gvlid, moduleName, hookDetails, callback) { + callback(hookDetails); +}, 'validateStorageEnforcement'); +/** + * This function returns storage functions to access cookies and localstorage. This function will bypass the gdpr enforcement requirement. Prebid as a software needs to use storage in some scenarios and is not a vendor so GDPR enforcement rules does not apply on Prebid. + * @param {string} moduleName Module name + */ + +function getCoreStorageManager(moduleName) { + return newStorageManager({ + moduleName: moduleName, + moduleType: 'core' + }); +} +/** + * Note: Core modules or Prebid modules like Currency, SizeMapping should use getCoreStorageManager + * This function returns storage functions to access cookies and localstorage. Bidders and User id modules should import this and use it in their module if needed. GVL ID and Module name are optional param but gvl id is needed for when gdpr enforcement module is used. + * @param {Number=} gvlid Vendor id + * @param {string=} moduleName BidderCode or module name + */ + +function getStorageManager(gvlid, moduleName) { + return newStorageManager({ + gvlid: gvlid, + moduleName: moduleName + }); +} +function resetData() { + storageCallbacks = []; +} + +/***/ }), + +/***/ 90: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = 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 + }; +} + +/***/ }), + +/***/ 91: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export setSizeConfig */ +/* harmony export (immutable) */ __webpack_exports__["a"] = getLabels; +/* harmony export (immutable) */ __webpack_exports__["c"] = sizeSupported; +/* harmony export (immutable) */ __webpack_exports__["b"] = resolveStatus; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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} sizesSupported The sizes to be accepted if this SizeConfig is enabled. + * @property {Array} labels The active labels to match this SizeConfig to an adUnits and/or bidders. + */ + +/** + * + * @param {Array} config + */ + +function setSizeConfig(config) { + sizeConfig = config; +} +__WEBPACK_IMPORTED_MODULE_0__config_js__["b" /* config */].getConfig('sizeConfig', function (config) { + return setSizeConfig(config.sizeConfig); +}); +/** + * 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 + }; +} +/** + * Determines whether a single size is valid given configured sizes + * @param {Array} size [width, height] + * @param {Array} configs + * @returns {boolean} + */ + +function sizeSupported(size) { + var configs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : sizeConfig; + var maps = evaluateSizeConfig(configs); + + if (!maps.shouldFilter) { + return true; + } + + return !!maps.sizesSupported[size]; +} +/** + * Resolves the unique set of the union of all sizes and labels that are active from a SizeConfig.mediaQuery match + * @param {Array} labels Labels specified on adUnit or bidder + * @param {boolean} labelAll if true, all labels must match to be enabled + * @param {Array} activeLabels Labels passed in through requestBids + * @param {object} mediaTypes A mediaTypes object describing the various media types (banner, video, native) + * @param {Array>} sizes Sizes specified on adUnit (deprecated) + * @param {Array} configs + * @returns {{labels: Array, sizes: Array>}} + */ + +function resolveStatus() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$labels = _ref.labels, + labels = _ref$labels === void 0 ? [] : _ref$labels, + _ref$labelAll = _ref.labelAll, + labelAll = _ref$labelAll === void 0 ? false : _ref$labelAll, + _ref$activeLabels = _ref.activeLabels, + activeLabels = _ref$activeLabels === void 0 ? [] : _ref$activeLabels; + + var mediaTypes = arguments.length > 1 ? arguments[1] : undefined; + var sizes = arguments.length > 2 ? arguments[2] : undefined; + var configs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : sizeConfig; + var maps = evaluateSizeConfig(configs); + + if (!Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["isPlainObject"])(mediaTypes)) { + // add support for deprecated adUnit.sizes by creating correct banner mediaTypes if they don't already exist + if (sizes) { + mediaTypes = { + banner: { + sizes: sizes + } + }; + } else { + mediaTypes = {}; + } + } else { + mediaTypes = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepClone"])(mediaTypes); + } + + var oldSizes = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(mediaTypes, 'banner.sizes'); + + if (maps.shouldFilter && oldSizes) { + mediaTypes.banner.sizes = oldSizes.filter(function (size) { + return maps.sizesSupported[size]; + }); + } + + var allMediaTypes = Object.keys(mediaTypes); + var results = { + active: allMediaTypes.every(function (type) { + return type !== 'banner'; + }) || allMediaTypes.some(function (type) { + return type === 'banner'; + }) && Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["deepAccess"])(mediaTypes, 'banner.sizes.length') > 0 && (labels.length === 0 || !labelAll && (labels.some(function (label) { + return maps.labels[label]; + }) || labels.some(function (label) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(activeLabels, label); + })) || labelAll && labels.reduce(function (result, label) { + return !result ? result : maps.labels[label] || __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(activeLabels, label); + }, true)), + mediaTypes: mediaTypes + }; + + if (oldSizes && oldSizes.length !== mediaTypes.banner.sizes.length) { + results.filterResults = { + before: oldSizes, + after: mediaTypes.banner.sizes + }; + } + + return results; +} + +function evaluateSizeConfig(configs) { + return configs.reduce(function (results, config) { + if (_typeof(config) === 'object' && typeof config.mediaQuery === 'string') { + var ruleMatch = false; // TODO: (Prebid - 4.0) Remove empty mediaQuery string check. Disallow empty mediaQuery in sizeConfig. + // Refer: https://github.com/prebid/Prebid.js/pull/4691, https://github.com/prebid/Prebid.js/issues/4810 for more details. + + if (config.mediaQuery === '') { + ruleMatch = true; + } else { + try { + ruleMatch = Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["getWindowTop"])().matchMedia(config.mediaQuery).matches; + } catch (e) { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])('Unfriendly iFrame blocks sizeConfig from being correctly evaluated'); + ruleMatch = matchMedia(config.mediaQuery).matches; + } + } + + if (ruleMatch) { + 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 { + Object(__WEBPACK_IMPORTED_MODULE_1__utils_js__["logWarn"])('sizeConfig rule missing required property "mediaQuery"'); + } + + return results; + }, { + labels: {}, + sizesSupported: {}, + shouldFilter: false + }); +} + +/***/ }), + +/***/ 92: +/***/ (function(module, exports, __webpack_require__) { + +var parent = __webpack_require__(215); + +module.exports = parent; + + +/***/ }), + +/***/ 93: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["b"] = store; +/* harmony export (immutable) */ __webpack_exports__["a"] = getCacheUrl; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_js__ = __webpack_require__(0); +/** + * 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. + */ + + + +/** + * @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. + * @param {string} impUrl An impression tracker URL for the delivery of the video ad + * @return A VAST URL which loads XML from the given URI. + */ + +function wrapURI(uri, impUrl) { + // 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. + var vastImp = impUrl ? "") : ""; + return "\n \n \n prebid.org wrapper\n \n ").concat(vastImp, "\n \n \n \n "); +} +/** + * 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, bid.vastImpUrl); + var payload = { + type: 'xml', + value: vastValue, + ttlseconds: Number(bid.ttl) + }; + + if (__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('cache.vasttrack')) { + payload.bidder = bid.bidder; + payload.bidid = bid.requestId; // function has a thisArg set to bidderRequest for accessing the auctionStart + + if (__WEBPACK_IMPORTED_MODULE_2__utils_js__["isPlainObject"](this) && this.hasOwnProperty('auctionStart')) { + payload.timestamp = this.auctionStart; + } + } + + if (typeof bid.customCacheKey === 'string' && bid.customCacheKey !== '') { + payload.key = bid.customCacheKey; + } + + return payload; +} +/** + * 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; + + 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: ".concat(statusText, ": ").concat(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 + * @param {BidderRequest} [bidderRequest] + * the data has been stored in the cache. + */ + + +function store(bids, done, bidderRequest) { + var requestData = { + puts: bids.map(toStorageRequest, bidderRequest) + }; + Object(__WEBPACK_IMPORTED_MODULE_0__ajax_js__["a" /* ajax */])(__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('cache.url'), shimStorageCallback(done), JSON.stringify(requestData), { + contentType: 'text/plain', + withCredentials: true + }); +} +function getCacheUrl(id) { + return "".concat(__WEBPACK_IMPORTED_MODULE_1__config_js__["b" /* config */].getConfig('cache.url'), "?uuid=").concat(id); +} + +/***/ }), + +/***/ 96: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(97); +var entryUnbind = __webpack_require__(52); + +module.exports = entryUnbind('Array', 'find'); + + +/***/ }), + +/***/ 97: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $ = __webpack_require__(14); +var $find = __webpack_require__(56).find; +var addToUnscopables = __webpack_require__(51); +var arrayMethodUsesToLength = __webpack_require__(60); + +var FIND = 'find'; +var SKIPS_HOLES = true; + +var USES_TO_LENGTH = arrayMethodUsesToLength(FIND); + +// Shouldn't skip holes +if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.find` method +// https://tc39.github.io/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND); + + +/***/ }), + +/***/ 98: +/***/ (function(module, exports, __webpack_require__) { + +var DESCRIPTORS = __webpack_require__(27); +var propertyIsEnumerableModule = __webpack_require__(99); +var createPropertyDescriptor = __webpack_require__(46); +var toIndexedObject = __webpack_require__(47); +var toPrimitive = __webpack_require__(55); +var has = __webpack_require__(24); +var IE8_DOM_DEFINE = __webpack_require__(71); + +var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return nativeGetOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); +}; + + +/***/ }), + +/***/ 99: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var nativePropertyIsEnumerable = {}.propertyIsEnumerable; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : nativePropertyIsEnumerable; + + +/***/ }) + +/******/ }); +pbjsChunk([282],{ + +/***/ 265: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(266); + + +/***/ }), + +/***/ 266: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_video_js__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + + + + + +var BIDDER_CODE = 'appnexus'; +var URL = 'https://ib.adnxs.com/ut/v3/prebid'; +var VIDEO_TARGETING = ['id', 'minduration', 'maxduration', 'skippable', 'playback_method', 'frameworks', 'context', 'skipoffset']; +var USER_PARAMS = ['age', 'externalUid', 'segments', 'gender', 'dnt', 'language']; +var APP_DEVICE_PARAMS = ['geo', 'device_id']; // appid is collected separately + +var DEBUG_PARAMS = ['enabled', 'dongle', 'member_id', 'debug_timeout']; +var VIDEO_MAPPING = { + playback_method: { + 'unknown': 0, + 'auto_play_sound_on': 1, + 'auto_play_sound_off': 2, + 'click_to_play': 3, + 'mouse_over': 4, + 'auto_play_sound_unknown': 5 + }, + context: { + 'unknown': 0, + 'pre_roll': 1, + 'mid_roll': 2, + 'post_roll': 3, + 'outstream': 4, + 'in-banner': 5 + } +}; +var NATIVE_MAPPING = { + body: 'description', + body2: 'desc2', + cta: 'ctatext', + image: { + serverName: 'main_image', + requiredParams: { + required: true + } + }, + icon: { + serverName: 'icon', + requiredParams: { + required: true + } + }, + sponsoredBy: 'sponsored_by', + privacyLink: 'privacy_link', + salePrice: 'saleprice', + displayUrl: 'displayurl' +}; +var SOURCE = 'pbjs'; +var MAX_IMPS_PER_REQUEST = 15; +var mappingFileUrl = 'https://acdn.adnxs.com/prebid/appnexus-mapping/mappings.json'; +var SCRIPT_TAG_START = ' 0) { + payload.member_id = member; + } + + if (appDeviceObjBid) { + payload.device = appDeviceObj; + } + + if (appIdObjBid) { + payload.app = appIdObj; + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('adpod.brandCategoryExclusion')) { + payload.brand_category_uniqueness = true; + } + + if (debugObjParams.enabled) { + payload.debug = debugObjParams; + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('AppNexus Debug Auction Settings:\n\n' + JSON.stringify(debugObjParams, null, 4)); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + // note - objects for impbus use underscore instead of camelCase + payload.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.refererInfo) { + var refererinfo = { + rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + rd_top: bidderRequest.refererInfo.reachedTop, + rd_ifs: bidderRequest.refererInfo.numIframes, + rd_stk: bidderRequest.refererInfo.stack.map(function (url) { + return encodeURIComponent(url); + }).join(',') + }; + payload.referrer_detection = refererinfo; + } + + var hasAdPodBid = __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default()(bidRequests, hasAdPod); + + if (hasAdPodBid) { + bidRequests.filter(hasAdPod).forEach(function (adPodBid) { + var adPodTags = createAdPodRequest(tags, adPodBid); // don't need the original adpod placement because it's in adPodTags + + var nonPodTags = payload.tags.filter(function (tag) { + return tag.uuid !== adPodBid.bidId; + }); + payload.tags = [].concat(_toConsumableArray(nonPodTags), _toConsumableArray(adPodTags)); + }); + } + + var eids = []; + var criteoId = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequests[0], "userId.criteoId"); + + if (criteoId) { + eids.push({ + source: 'criteo.com', + id: criteoId + }); + } + + var tdid = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequests[0], "userId.tdid"); + + if (tdid) { + eids.push({ + source: 'adserver.org', + id: tdid, + rti_partner: 'TDID' + }); + } + + if (eids.length) { + payload.eids = eids; + } + + if (tags[0].publisher_id) { + payload.publisher_id = tags[0].publisher_id; + } + + var request = formatRequest(payload, bidderRequest); + return 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, _ref) { + var _this = this; + + var bidderRequest = _ref.bidderRequest; + serverResponse = serverResponse.body; + var bids = []; + + if (!serverResponse || serverResponse.error) { + var errorMessage = "in response for ".concat(bidderRequest.bidderCode, " adapter"); + + if (serverResponse && serverResponse.error) { + errorMessage += ": ".concat(serverResponse.error); + } + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"](errorMessage); + return bids; + } + + if (serverResponse.tags) { + serverResponse.tags.forEach(function (serverBid) { + var rtbBid = getRtbBid(serverBid); + + if (rtbBid) { + if (rtbBid.cpm !== 0 && __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(_this.supportedMediaTypes, rtbBid.ad_type)) { + var bid = newBid(serverBid, rtbBid, bidderRequest); + bid.mediaType = parseMediaType(rtbBid); + bids.push(bid); + } + } + }); + } + + if (serverResponse.debug && serverResponse.debug.debug_info) { + var debugHeader = 'AppNexus Debug Auction for Prebid\n\n'; + var debugText = debugHeader + serverResponse.debug.debug_info; + debugText = debugText.replace(/(|)/gm, '\t') // Tables + .replace(/(<\/td>|<\/th>)/gm, '\n') // Tables + .replace(/^
/gm, '') // Remove leading
+ .replace(/(
\n|
)/gm, '\n') //
+ .replace(/

(.*)<\/h1>/gm, '\n\n===== $1 =====\n\n') // Header H1 + .replace(/(.*)<\/h[2-6]>/gm, '\n\n*** $1 ***\n\n') // Headers + .replace(/(<([^>]+)>)/igm, ''); // Remove any other tags + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"]('https://console.appnexus.com/docs/understanding-the-debug-auction'); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"](debugText); + } + + return bids; + }, + + /** + * @typedef {Object} mappingFileInfo + * @property {string} url mapping file json url + * @property {number} refreshInDays prebid stores mapping data in localstorage so you can return in how many days you want to update value stored in localstorage. + * @property {string} localStorageKey unique key to store your mapping json in localstorage + */ + + /** + * Returns mapping file info. This info will be used by bidderFactory to preload mapping file and store data in local storage + * @returns {mappingFileInfo} + */ + getMappingFileInfo: function getMappingFileInfo() { + return { + url: mappingFileUrl, + refreshInDays: 2 + }; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: 'https://acdn.adnxs.com/dmp/async_usersync.html' + }]; + } + }, + transformBidParams: function transformBidParams(params, isOpenRtb) { + params = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["convertTypes"]({ + 'member': 'string', + 'invCode': 'string', + 'placementId': 'number', + 'keywords': __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["transformBidderParamKeywords"], + 'publisherId': 'number' + }, params); + + if (isOpenRtb) { + params.use_pmt_rule = typeof params.usePaymentRule === 'boolean' ? params.usePaymentRule : false; + + if (params.usePaymentRule) { + delete params.usePaymentRule; + } + + if (isPopulatedArray(params.keywords)) { + params.keywords.forEach(deleteValues); + } + + Object.keys(params).forEach(function (paramKey) { + var convertedKey = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["convertCamelToUnderscore"](paramKey); + + if (convertedKey !== paramKey) { + params[convertedKey] = params[paramKey]; + delete params[paramKey]; + } + }); + } + + return params; + }, + + /** + * Add element selector to javascript tracker to improve native viewability + * @param {Bid} bid + */ + onBidWon: function onBidWon(bid) { + if (bid.native) { + reloadViewabilityScriptWithCorrectParameters(bid); + } + } +}; + +function isPopulatedArray(arr) { + return !!(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](arr) && arr.length > 0); +} + +function deleteValues(keyPairObj) { + if (isPopulatedArray(keyPairObj.value) && keyPairObj.value[0] === '') { + delete keyPairObj.value; + } +} + +function reloadViewabilityScriptWithCorrectParameters(bid) { + var viewJsPayload = getAppnexusViewabilityScriptFromJsTrackers(bid.native.javascriptTrackers); + + if (viewJsPayload) { + var prebidParams = 'pbjs_adid=' + bid.adId + ';pbjs_auc=' + bid.adUnitCode; + var jsTrackerSrc = getViewabilityScriptUrlFromPayload(viewJsPayload); + var newJsTrackerSrc = jsTrackerSrc.replace('dom_id=%native_dom_id%', prebidParams); // find iframe containing script tag + + var frameArray = document.getElementsByTagName('iframe'); // boolean var to modify only one script. That way if there are muliple scripts, + // they won't all point to the same creative. + + var modifiedAScript = false; // first, loop on all ifames + + for (var i = 0; i < frameArray.length && !modifiedAScript; i++) { + var currentFrame = frameArray[i]; + + try { + // IE-compatible, see https://stackoverflow.com/a/3999191/2112089 + var nestedDoc = currentFrame.contentDocument || currentFrame.contentWindow.document; + + if (nestedDoc) { + // if the doc is present, we look for our jstracker + var scriptArray = nestedDoc.getElementsByTagName('script'); + + for (var j = 0; j < scriptArray.length && !modifiedAScript; j++) { + var currentScript = scriptArray[j]; + + if (currentScript.getAttribute('data-src') == jsTrackerSrc) { + currentScript.setAttribute('src', newJsTrackerSrc); + currentScript.setAttribute('data-src', ''); + + if (currentScript.removeAttribute) { + currentScript.removeAttribute('data-src'); + } + + modifiedAScript = true; + } + } + } + } catch (exception) { + // trying to access a cross-domain iframe raises a SecurityError + // this is expected and ignored + if (!(exception instanceof DOMException && exception.name === 'SecurityError')) { + // all other cases are raised again to be treated by the calling function + throw exception; + } + } + } + } +} + +function strIsAppnexusViewabilityScript(str) { + var regexMatchUrlStart = str.match(VIEWABILITY_URL_START); + var viewUrlStartInStr = regexMatchUrlStart != null && regexMatchUrlStart.length >= 1; + var regexMatchFileName = str.match(VIEWABILITY_FILE_NAME); + var fileNameInStr = regexMatchFileName != null && regexMatchFileName.length >= 1; + return str.startsWith(SCRIPT_TAG_START) && fileNameInStr && viewUrlStartInStr; +} + +function getAppnexusViewabilityScriptFromJsTrackers(jsTrackerArray) { + var viewJsPayload; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](jsTrackerArray) && strIsAppnexusViewabilityScript(jsTrackerArray)) { + viewJsPayload = jsTrackerArray; + } else if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](jsTrackerArray)) { + for (var i = 0; i < jsTrackerArray.length; i++) { + var currentJsTracker = jsTrackerArray[i]; + + if (strIsAppnexusViewabilityScript(currentJsTracker)) { + viewJsPayload = currentJsTracker; + } + } + } + + return viewJsPayload; +} + +function getViewabilityScriptUrlFromPayload(viewJsPayload) { + // extracting the content of the src attribute + // -> substring between src=" and " + var indexOfFirstQuote = viewJsPayload.indexOf('src="') + 5; // offset of 5: the length of 'src=' + 1 + + var indexOfSecondQuote = viewJsPayload.indexOf('"', indexOfFirstQuote); + var jsTrackerSrc = viewJsPayload.substring(indexOfFirstQuote, indexOfSecondQuote); + return jsTrackerSrc; +} + +function hasPurpose1Consent(bidderRequest) { + var result = true; + + if (bidderRequest && bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.gdprApplies && bidderRequest.gdprConsent.apiVersion === 2) { + result = !!(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidderRequest.gdprConsent, 'vendorData.purpose.consents.1') === true); + } + } + + return result; +} + +function formatRequest(payload, bidderRequest) { + var request = []; + var options = {}; + + if (!hasPurpose1Consent(bidderRequest)) { + options = { + withCredentials: false + }; + } + + if (payload.tags.length > MAX_IMPS_PER_REQUEST) { + var clonedPayload = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepClone"](payload); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["chunk"](payload.tags, MAX_IMPS_PER_REQUEST).forEach(function (tags) { + clonedPayload.tags = tags; + var payloadString = JSON.stringify(clonedPayload); + request.push({ + method: 'POST', + url: URL, + data: payloadString, + bidderRequest: bidderRequest, + options: options + }); + }); + } else { + var payloadString = JSON.stringify(payload); + request = { + method: 'POST', + url: URL, + data: payloadString, + bidderRequest: bidderRequest, + options: options + }; + } + + return request; +} + +function newRenderer(adUnitCode, rtbBid) { + var rendererOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_0__src_Renderer_js__["a" /* Renderer */].install({ + id: rtbBid.renderer_id, + url: rtbBid.renderer_url, + config: rendererOptions, + loaded: false, + adUnitCode: adUnitCode + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + renderer.setEventHandlers({ + impression: function impression() { + return __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"]('AppNexus outstream video impression event'); + }, + loaded: function loaded() { + return __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"]('AppNexus outstream video loaded event'); + }, + ended: function ended() { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"]('AppNexus outstream renderer video event'); + document.querySelector("#".concat(adUnitCode)).style.display = 'none'; + } + }); + return renderer; +} +/** + * Unpack the Server's Bid into a Prebid-compatible one. + * @param serverBid + * @param rtbBid + * @param bidderRequest + * @return Bid + */ + + +function newBid(serverBid, rtbBid, bidderRequest) { + var bidRequest = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getBidRequest"](serverBid.uuid, [bidderRequest]); + var bid = { + requestId: serverBid.uuid, + cpm: rtbBid.cpm, + creativeId: rtbBid.creative_id, + dealId: rtbBid.deal_id, + currency: 'USD', + netRevenue: true, + ttl: 300, + adUnitCode: bidRequest.adUnitCode, + appnexus: { + buyerMemberId: rtbBid.buyer_member_id, + dealPriority: rtbBid.deal_priority, + dealCode: rtbBid.deal_code + } + }; + + if (rtbBid.advertiser_id) { + bid.meta = _extends({}, bid.meta, { + advertiserId: rtbBid.advertiser_id + }); + } + + if (rtbBid.rtb.video) { + // shared video properties used for all 3 contexts + _extends(bid, { + width: rtbBid.rtb.video.player_width, + height: rtbBid.rtb.video.player_height, + vastImpUrl: rtbBid.notify_url, + ttl: 3600 + }); + + var videoContext = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.context'); + + switch (videoContext) { + case __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["a" /* ADPOD */]: + var primaryCatId = Object(__WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__["getIabSubCategory"])(bidRequest.bidder, rtbBid.brand_category_id); + bid.meta = _extends({}, bid.meta, { + primaryCatId: primaryCatId + }); + var dealTier = rtbBid.deal_priority; + bid.video = { + context: __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["a" /* ADPOD */], + durationSeconds: Math.floor(rtbBid.rtb.video.duration_ms / 1000), + dealTier: dealTier + }; + bid.vastUrl = rtbBid.rtb.video.asset_url; + break; + + case __WEBPACK_IMPORTED_MODULE_8__src_video_js__["b" /* OUTSTREAM */]: + bid.adResponse = serverBid; + bid.adResponse.ad = bid.adResponse.ads[0]; + bid.adResponse.ad.video = bid.adResponse.ad.rtb.video; + bid.vastXml = rtbBid.rtb.video.content; + + if (rtbBid.renderer_url) { + var videoBid = __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default()(bidderRequest.bids, function (bid) { + return bid.bidId === serverBid.uuid; + }); + var rendererOptions = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](videoBid, 'renderer.options'); + bid.renderer = newRenderer(bid.adUnitCode, rtbBid, rendererOptions); + } + + break; + + case __WEBPACK_IMPORTED_MODULE_8__src_video_js__["a" /* INSTREAM */]: + bid.vastUrl = rtbBid.notify_url + '&redir=' + encodeURIComponent(rtbBid.rtb.video.asset_url); + break; + } + } else if (rtbBid.rtb[__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]]) { + var nativeAd = rtbBid.rtb[__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]]; // setting up the jsTracker: + // we put it as a data-src attribute so that the tracker isn't called + // until we have the adId (see onBidWon) + + var jsTrackerDisarmed = rtbBid.viewability.config.replace('src=', 'data-src='); + var jsTrackers = nativeAd.javascript_trackers; + + if (jsTrackers == undefined) { + jsTrackers = jsTrackerDisarmed; + } else if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isStr"](jsTrackers)) { + jsTrackers = [jsTrackers, jsTrackerDisarmed]; + } else { + jsTrackers.push(jsTrackerDisarmed); + } + + bid[__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]] = { + title: nativeAd.title, + body: nativeAd.desc, + body2: nativeAd.desc2, + cta: nativeAd.ctatext, + rating: nativeAd.rating, + sponsoredBy: nativeAd.sponsored, + privacyLink: nativeAd.privacy_link, + address: nativeAd.address, + downloads: nativeAd.downloads, + likes: nativeAd.likes, + phone: nativeAd.phone, + price: nativeAd.price, + salePrice: nativeAd.saleprice, + clickUrl: nativeAd.link.url, + displayUrl: nativeAd.displayurl, + clickTrackers: nativeAd.link.click_trackers, + impressionTrackers: nativeAd.impression_trackers, + javascriptTrackers: jsTrackers + }; + + 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 { + if (rtbBid.rtb.trackers) { + var url = rtbBid.rtb.trackers[0].impression_urls[0]; + var tracker = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["createTrackPixelHtml"](url); + bid.ad += tracker; + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["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.publisherId) { + tag.publisher_id = parseInt(bid.params.publisherId, 10); + } + + if (bid.params.externalImpId) { + tag.external_imp_id = bid.params.externalImpId; + } + + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](bid.params.keywords)) { + var keywords = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["transformBidderParamKeywords"](bid.params.keywords); + + if (keywords.length > 0) { + keywords.forEach(deleteValues); + } + + tag.keywords = keywords; + } + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */] || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]))) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]); + + if (tag.sizes.length === 0) { + tag.sizes = transformSizes([1, 1]); + } + + if (bid.nativeParams) { + var nativeRequest = buildNativeRequest(bid.nativeParams); + tag[__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]] = { + layouts: [nativeRequest] + }; + } + } + + var videoMediaType = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */])); + var context = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (videoMediaType && context === 'adpod') { + tag.hb_source = 7; + } else { + tag.hb_source = 1; + } + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */] || videoMediaType) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]); + } // instream gets vastUrl, outstream gets vastXml + + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* 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 __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).forEach(function (param) { + switch (param) { + case 'context': + case 'playback_method': + var type = bid.params.video[param]; + type = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](type) ? type[0] : type; + tag.video[param] = VIDEO_MAPPING[param][type]; + break; + + default: + tag.video[param] = bid.params.video[param]; + } + }); + } + + if (bid.renderer) { + tag.video = _extends({}, tag.video, { + custom_renderer_present: true + }); + } + + var adUnit = __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default()(__WEBPACK_IMPORTED_MODULE_5__src_auctionManager_js__["a" /* auctionManager */].getAdUnits(), function (au) { + return bid.transactionId === au.transactionId; + }); + + if (adUnit && adUnit.mediaTypes && adUnit.mediaTypes.banner) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]); + } + + if (tag.ad_types.length === 0) { + delete tag.ad_types; + } + + return tag; +} +/* Turn bid request sizes into ut-compatible format */ + + +function transformSizes(requestSizes) { + var sizes = []; + var sizeObj = {}; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](requestSizes) && requestSizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](requestSizes[0])) { + sizeObj.width = parseInt(requestSizes[0], 10); + sizeObj.height = parseInt(requestSizes[1], 10); + sizes.push(sizeObj); + } else if (_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 hasAppDeviceInfo(bid) { + if (bid.params) { + return !!bid.params.app; + } +} + +function hasAppId(bid) { + if (bid.params && bid.params.app) { + return !!bid.params.app.id; + } + + return !!bid.params.app; +} + +function hasDebug(bid) { + return !!bid.debug; +} + +function hasAdPod(bid) { + return bid.mediaTypes && bid.mediaTypes.video && bid.mediaTypes.video.context === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["a" /* ADPOD */]; +} +/** + * Expand an adpod placement into a set of request objects according to the + * total adpod duration and the range of duration seconds. Sets minduration/ + * maxduration video property according to requireExactDuration configuration + */ + + +function createAdPodRequest(tags, adPodBid) { + var _adPodBid$mediaTypes$ = adPodBid.mediaTypes.video, + durationRangeSec = _adPodBid$mediaTypes$.durationRangeSec, + requireExactDuration = _adPodBid$mediaTypes$.requireExactDuration; + var numberOfPlacements = getAdPodPlacementNumber(adPodBid.mediaTypes.video); + var maxDuration = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getMaxValueFromArray"](durationRangeSec); + var tagToDuplicate = tags.filter(function (tag) { + return tag.uuid === adPodBid.bidId; + }); + var request = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["fill"].apply(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__, _toConsumableArray(tagToDuplicate).concat([numberOfPlacements])); + + if (requireExactDuration) { + var divider = Math.ceil(numberOfPlacements / durationRangeSec.length); + var chunked = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["chunk"](request, divider); // each configured duration is set as min/maxduration for a subset of requests + + durationRangeSec.forEach(function (duration, index) { + chunked[index].map(function (tag) { + setVideoProperty(tag, 'minduration', duration); + setVideoProperty(tag, 'maxduration', duration); + }); + }); + } else { + // all maxdurations should be the same + request.map(function (tag) { + return setVideoProperty(tag, 'maxduration', maxDuration); + }); + } + + return request; +} + +function getAdPodPlacementNumber(videoParams) { + var adPodDurationSec = videoParams.adPodDurationSec, + durationRangeSec = videoParams.durationRangeSec, + requireExactDuration = videoParams.requireExactDuration; + var minAllowedDuration = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getMinValueFromArray"](durationRangeSec); + var numberOfPlacements = Math.floor(adPodDurationSec / minAllowedDuration); + return requireExactDuration ? Math.max(numberOfPlacements, durationRangeSec.length) : numberOfPlacements; +} + +function setVideoProperty(tag, key, value) { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](tag.video)) { + tag.video = {}; + } + + tag.video[key] = value; +} + +function getRtbBid(tag) { + return tag && tag.ads && tag.ads.length && __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___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: ''} or + // {tag: {serverName: '', requiredParams: {...}}} + + Object.keys(params).forEach(function (key) { + // check if one of the forms is used, otherwise + // a mapping wasn't specified so pass the key straight through + var requestKey = NATIVE_MAPPING[key] && NATIVE_MAPPING[key].serverName || NATIVE_MAPPING[key] || key; // required params are always passed on request + + var requiredParams = NATIVE_MAPPING[key] && NATIVE_MAPPING[key].requiredParams; + request[requestKey] = _extends({}, requiredParams, params[key]); // convert the sizes of image/icon assets to proper format (if needed) + + var isImageAsset = !!(requestKey === NATIVE_MAPPING.image.serverName || requestKey === NATIVE_MAPPING.icon.serverName); + + if (isImageAsset && request[requestKey].sizes) { + var sizes = request[requestKey].sizes; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArrayOfNums"](sizes) || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](sizes) && sizes.length > 0 && sizes.every(function (sz) { + return __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArrayOfNums"](sz); + })) { + request[requestKey].sizes = transformSizes(request[requestKey].sizes); + } + } + + if (requestKey === NATIVE_MAPPING.privacyLink) { + request.privacy_supported = true; + } + }); + return request; +} +/** + * This function hides google div container for outstream bids to remove unwanted space on page. Appnexus renderer creates a new iframe outside of google iframe to render the outstream creative. + * @param {string} elementId element id + */ + + +function hidedfpContainer(elementId) { + var el = document.getElementById(elementId).querySelectorAll("div[id^='google_ads']"); + + if (el[0]) { + el[0].style.setProperty('display', 'none'); + } +} + +function outstreamRender(bid) { + // push to render queue because ANOutstreamVideo may not be loaded yet + hidedfpContainer(bid.adUnitCode); + 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 === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]) { + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]; + } else if (adType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]) { + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["c" /* NATIVE */]; + } else { + return __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[265]); +pbjsChunk([248],{ + +/***/ 337: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(338); + + +/***/ }), + +/***/ 338: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "allowAuction", function() { return allowAuction; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "userCMP", function() { return userCMP; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "consentTimeout", function() { return consentTimeout; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gdprScope", function() { return gdprScope; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticConsentData", function() { return staticConsentData; }); +/* harmony export (immutable) */ __webpack_exports__["requestBidsHook"] = requestBidsHook; +/* harmony export (immutable) */ __webpack_exports__["resetConsentData"] = resetConsentData; +/* harmony export (immutable) */ __webpack_exports__["setConsentConfig"] = setConsentConfig; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js__ = __webpack_require__(339); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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; } + +/** + * This module adds GDPR consentManagement support to prebid.js. It interacts with + * supported CMPs (Consent Management Platforms) to grab the user's consent information + * and make it available for any GDPR supported adapters to read/pass this information to + * their system. + */ + + + + + +var DEFAULT_CMP = 'iab'; +var DEFAULT_CONSENT_TIMEOUT = 10000; +var DEFAULT_ALLOW_AUCTION_WO_CONSENT = true; +var allowAuction = { + value: DEFAULT_ALLOW_AUCTION_WO_CONSENT, + definedInConfig: false +}; +var userCMP; +var consentTimeout; +var gdprScope; +var staticConsentData; +var cmpVersion = 0; +var consentData; +var addedConsentHook = false; // add new CMPs here, with their dedicated lookup function + +var cmpCallMap = { + 'iab': lookupIabConsent, + 'static': lookupStaticConsentData +}; +/** + * This function reads the consent string from the config to obtain the consent information of the user. + * @param {function(string)} cmpSuccess acts as a success callback when the value is read from config; pass along consentObject (string) from CMP + * @param {function(string)} cmpError acts as an error callback while interacting with the config string; pass along an error message (string) + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + +function lookupStaticConsentData(cmpSuccess, cmpError, hookConfig) { + cmpSuccess(staticConsentData, hookConfig); +} +/** + * This function handles interacting with an IAB compliant CMP to obtain the consent information of the user. + * Given the async nature of the CMP's API, we pass in acting success/error callback functions to exit this function + * based on the appropriate result. + * @param {function(string)} cmpSuccess acts as a success callback when CMP returns a value; pass along consentObject (string) from CMP + * @param {function(string)} cmpError acts as an error callback while interacting with CMP; pass along an error message (string) + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + + +function lookupIabConsent(cmpSuccess, cmpError, hookConfig) { + function findCMP() { + var f = window; + var cmpFrame; + var cmpFunction; + + while (!cmpFrame) { + try { + if (typeof f.__tcfapi === 'function' || typeof f.__cmp === 'function') { + if (typeof f.__tcfapi === 'function') { + cmpVersion = 2; + cmpFunction = f.__tcfapi; + } else { + cmpVersion = 1; + cmpFunction = f.__cmp; + } + + cmpFrame = f; + break; + } + } catch (e) {} // need separate try/catch blocks due to the exception errors thrown when trying to check for a frame that doesn't exist in 3rd party env + + + try { + if (f.frames['__tcfapiLocator']) { + cmpVersion = 2; + cmpFrame = f; + break; + } + } catch (e) {} + + try { + if (f.frames['__cmpLocator']) { + cmpVersion = 1; + cmpFrame = f; + break; + } + } catch (e) {} + + if (f === window.top) break; + f = f.parent; + } + + return { + cmpFrame: cmpFrame, + cmpFunction: cmpFunction + }; + } + + function v2CmpResponseCallback(tcfData, success) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Received a response from CMP', tcfData); + + if (success) { + if (tcfData.eventStatus === 'tcloaded' || tcfData.eventStatus === 'useractioncomplete') { + cmpSuccess(tcfData, hookConfig); + } else if (tcfData.eventStatus === 'cmpuishown' && tcfData.tcString && tcfData.purposeOneTreatment === true) { + cmpSuccess(tcfData, hookConfig); + } + } else { + cmpError('CMP unable to register callback function. Please check CMP setup.', hookConfig); + } + } + + function handleV1CmpResponseCallbacks() { + var cmpResponse = {}; + + function afterEach() { + if (cmpResponse.getConsentData && cmpResponse.getVendorConsents) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Received all requested responses from CMP', cmpResponse); + cmpSuccess(cmpResponse, hookConfig); + } + } + + return { + consentDataCallback: function consentDataCallback(consentResponse) { + cmpResponse.getConsentData = consentResponse; + afterEach(); + }, + vendorConsentsCallback: function vendorConsentsCallback(consentResponse) { + cmpResponse.getVendorConsents = consentResponse; + afterEach(); + } + }; + } + + var v1CallbackHandler = handleV1CmpResponseCallbacks(); + var cmpCallbacks = {}; + + var _findCMP = findCMP(), + cmpFrame = _findCMP.cmpFrame, + cmpFunction = _findCMP.cmpFunction; + + if (!cmpFrame) { + return cmpError('CMP not found.', hookConfig); + } // to collect the consent information from the user, we perform two calls to the CMP in parallel: + // first to collect the user's consent choices represented in an encoded string (via getConsentData) + // second to collect the user's full unparsed consent information (via getVendorConsents) + // the following code also determines where the CMP is located and uses the proper workflow to communicate with it: + // check to see if CMP is found on the same window level as prebid and call it directly if so + // check to see if prebid is in a safeframe (with CMP support) + // else assume prebid may be inside an iframe and use the IAB CMP locator code to see if CMP's located in a higher parent window. this works in cross domain iframes + // if the CMP is not found, the iframe function will call the cmpError exit callback to abort the rest of the CMP workflow + + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](cmpFunction)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Detected CMP API is directly accessible, calling it now...'); + + if (cmpVersion === 1) { + cmpFunction('getConsentData', null, v1CallbackHandler.consentDataCallback); + cmpFunction('getVendorConsents', null, v1CallbackHandler.vendorConsentsCallback); + } else if (cmpVersion === 2) { + cmpFunction('addEventListener', cmpVersion, v2CmpResponseCallback); + } + } else if (cmpVersion === 1 && inASafeFrame() && typeof window.$sf.ext.cmp === 'function') { + // this safeframe workflow is only supported with TCF v1 spec; the v2 recommends to use the iframe postMessage route instead (even if you are in a safeframe). + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Detected Prebid.js is encased in a SafeFrame and CMP is registered, calling it now...'); + callCmpWhileInSafeFrame('getConsentData', v1CallbackHandler.consentDataCallback); + callCmpWhileInSafeFrame('getVendorConsents', v1CallbackHandler.vendorConsentsCallback); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('Detected CMP is outside the current iframe where Prebid.js is located, calling it now...'); + + if (cmpVersion === 1) { + callCmpWhileInIframe('getConsentData', cmpFrame, v1CallbackHandler.consentDataCallback); + callCmpWhileInIframe('getVendorConsents', cmpFrame, v1CallbackHandler.vendorConsentsCallback); + } else if (cmpVersion === 2) { + callCmpWhileInIframe('addEventListener', cmpFrame, v2CmpResponseCallback); + } + } + + function inASafeFrame() { + return !!(window.$sf && window.$sf.ext); + } + + function callCmpWhileInSafeFrame(commandName, callback) { + function sfCallback(msgName, data) { + if (msgName === 'cmpReturn') { + var responseObj = commandName === 'getConsentData' ? data.vendorConsentData : data.vendorConsents; + callback(responseObj); + } + } // find sizes from adUnits object + + + var adUnits = hookConfig.adUnits; + var width = 1; + var height = 1; + + if (Array.isArray(adUnits) && adUnits.length > 0) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getAdUnitSizes"](adUnits[0]); + width = sizes[0][0]; + height = sizes[0][1]; + } + + window.$sf.ext.register(width, height, sfCallback); + window.$sf.ext.cmp(commandName); + } + + function callCmpWhileInIframe(commandName, cmpFrame, moduleCallback) { + var apiName = cmpVersion === 2 ? '__tcfapi' : '__cmp'; + /* Setup up a __cmp function to do the postMessage and stash the callback. + This function behaves (from the caller's perspective identicially to the in-frame __cmp call */ + + window[apiName] = function (cmd, arg, callback) { + var callId = Math.random() + ''; + var callName = "".concat(apiName, "Call"); + + var msg = _defineProperty({}, callName, { + command: cmd, + parameter: arg, + callId: callId + }); + + if (cmpVersion !== 1) msg[callName].version = cmpVersion; + cmpCallbacks[callId] = callback; + cmpFrame.postMessage(msg, '*'); + }; + /** when we get the return message, call the stashed callback */ + + + window.addEventListener('message', readPostMessageResponse, false); // call CMP + + window[apiName](commandName, null, moduleCallback); + + function readPostMessageResponse(event) { + var cmpDataPkgName = "".concat(apiName, "Return"); + var json = typeof event.data === 'string' && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_string_includes_js___default()(event.data, cmpDataPkgName) ? JSON.parse(event.data) : event.data; + + if (json[cmpDataPkgName] && json[cmpDataPkgName].callId) { + var payload = json[cmpDataPkgName]; // TODO - clean up this logic (move listeners?); we have duplicate messages responses because 2 eventlisteners are active from the 2 cmp requests running in parallel + + if (typeof cmpCallbacks[payload.callId] !== 'undefined') { + cmpCallbacks[payload.callId](payload.returnValue, payload.success); + } + } + } + } +} +/** + * If consentManagement module is enabled (ie included in setConfig), this hook function will attempt to fetch the + * user's encoded consent string from the supported CMP. Once obtained, the module will store this + * data as part of a gdprConsent object which gets transferred to adapterManager's gdprDataHandler object. + * This information is later added into the bidRequest object for any supported adapters to read/pass along to their system. + * @param {object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids. + * @param {function} fn required; The next function in the chain, used by hook.js + */ + + +function requestBidsHook(fn, reqBidsConfigObj) { + // preserves all module related variables for the current auction instance (used primiarily for concurrent auctions) + var hookConfig = { + context: this, + args: [reqBidsConfigObj], + nextFn: fn, + adUnits: reqBidsConfigObj.adUnits || pbjs.adUnits, + bidsBackHandler: reqBidsConfigObj.bidsBackHandler, + haveExited: false, + timer: null + }; // in case we already have consent (eg during bid refresh) + + if (consentData) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('User consent information already known. Pulling internally stored information...'); + return exitModule(null, hookConfig); + } + + if (!__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(Object.keys(cmpCallMap), userCMP)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("CMP framework (".concat(userCMP, ") is not a supported framework. Aborting consentManagement module and resuming auction.")); + return hookConfig.nextFn.apply(hookConfig.context, hookConfig.args); + } + + cmpCallMap[userCMP].call(this, processCmpData, cmpFailed, hookConfig); // only let this code run if module is still active (ie if the callbacks used by CMPs haven't already finished) + + if (!hookConfig.haveExited) { + if (consentTimeout === 0) { + processCmpData(undefined, hookConfig); + } else { + hookConfig.timer = setTimeout(cmpTimedOut.bind(null, hookConfig), consentTimeout); + } + } +} +/** + * This function checks the consent data provided by CMP to ensure it's in an expected state. + * If it's bad, we exit the module depending on config settings. + * If it's good, then we store the value and exits the module. + * @param {object} consentObject required; object returned by CMP that contains user's consent choices + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + */ + +function processCmpData(consentObject, hookConfig) { + function checkV1Data(consentObject) { + var gdprApplies = consentObject && consentObject.getConsentData && consentObject.getConsentData.gdprApplies; + return !!(typeof gdprApplies !== 'boolean' || gdprApplies === true && !(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](consentObject.getConsentData.consentData) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](consentObject.getVendorConsents) && Object.keys(consentObject.getVendorConsents).length > 1)); + } + + function checkV2Data() { + // if CMP does not respond with a gdprApplies boolean, use defaultGdprScope (gdprScope) + var gdprApplies = consentObject && typeof consentObject.gdprApplies === 'boolean' ? consentObject.gdprApplies : gdprScope; + var tcString = consentObject && consentObject.tcString; + return !!(typeof gdprApplies !== 'boolean' || gdprApplies === true && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](tcString)); + } // do extra things for static config + + + if (userCMP === 'static') { + cmpVersion = consentObject.getConsentData ? 1 : consentObject.getTCData ? 2 : 0; // remove extra layer in static v2 data object so it matches normal v2 CMP object for processing step + + if (cmpVersion === 2) { + consentObject = consentObject.getTCData; + } + } // determine which set of checks to run based on cmpVersion + + + var checkFn = cmpVersion === 1 ? checkV1Data : cmpVersion === 2 ? checkV2Data : null; // Raise deprecation warning if 'allowAuctionWithoutConsent' is used with TCF 2. + + if (allowAuction.definedInConfig && cmpVersion === 2) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("'allowAuctionWithoutConsent' ignored for TCF 2"); + } else if (!allowAuction.definedInConfig && cmpVersion === 1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("'allowAuctionWithoutConsent' using system default: (".concat(DEFAULT_ALLOW_AUCTION_WO_CONSENT, ").")); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](checkFn)) { + if (checkFn(consentObject)) { + cmpFailed("CMP returned unexpected value during lookup process.", hookConfig, consentObject); + } else { + clearTimeout(hookConfig.timer); + storeConsentData(consentObject); + exitModule(null, hookConfig); + } + } else { + cmpFailed('Unable to derive CMP version to process data. Consent object does not conform to TCF v1 or v2 specs.', hookConfig, consentObject); + } +} +/** + * General timeout callback when interacting with CMP takes too long. + */ + + +function cmpTimedOut(hookConfig) { + cmpFailed('CMP workflow exceeded timeout threshold.', hookConfig); +} +/** + * This function contains the controlled steps to perform when there's a problem with CMP. + * @param {string} errMsg required; should be a short descriptive message for why the failure/issue happened. + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + * @param {object} extraArgs contains additional data that's passed along in the error/warning messages for easier debugging +*/ + + +function cmpFailed(errMsg, hookConfig, extraArgs) { + clearTimeout(hookConfig.timer); // still set the consentData to undefined when there is a problem as per config options + + if (allowAuction.value && cmpVersion === 1) { + storeConsentData(undefined); + } + + exitModule(errMsg, hookConfig, extraArgs); +} +/** + * Stores CMP data locally in module and then invokes gdprDataHandler.setConsentData() to make information available in adaptermanger.js for later in the auction + * @param {object} cmpConsentObject required; an object representing user's consent choices (can be undefined in certain use-cases for this function only) + */ + + +function storeConsentData(cmpConsentObject) { + if (cmpVersion === 1) { + consentData = { + consentString: cmpConsentObject ? cmpConsentObject.getConsentData.consentData : undefined, + vendorData: cmpConsentObject ? cmpConsentObject.getVendorConsents : undefined, + gdprApplies: cmpConsentObject ? cmpConsentObject.getConsentData.gdprApplies : gdprScope + }; + } else { + consentData = { + consentString: cmpConsentObject ? cmpConsentObject.tcString : undefined, + vendorData: cmpConsentObject || undefined, + gdprApplies: cmpConsentObject && typeof cmpConsentObject.gdprApplies === 'boolean' ? cmpConsentObject.gdprApplies : gdprScope + }; + } + + consentData.apiVersion = cmpVersion; + __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["gdprDataHandler"].setConsentData(consentData); +} +/** + * This function handles the exit logic for the module. + * While there are several paths in the module's logic to call this function, we only allow 1 of the 3 potential exits to happen before suppressing others. + * + * We prevent multiple exits to avoid conflicting messages in the console depending on certain scenarios. + * One scenario could be auction was canceled due to timeout with CMP being reached. + * While the timeout is the accepted exit and runs first, the CMP's callback still tries to process the user's data (which normally leads to a good exit). + * In this case, the good exit will be suppressed since we already decided to cancel the auction. + * + * Three exit paths are: + * 1. good exit where auction runs (CMP data is processed normally). + * 2. bad exit but auction still continues (warning message is logged, CMP data is undefined and still passed along). + * 3. bad exit with auction canceled (error message is logged). + * @param {string} errMsg optional; only to be used when there was a 'bad' exit. String is a descriptive message for the failure/issue encountered. + * @param {object} hookConfig contains module related variables (see comment in requestBidsHook function) + * @param {object} extraArgs contains additional data that's passed along in the error/warning messages for easier debugging + */ + + +function exitModule(errMsg, hookConfig, extraArgs) { + if (hookConfig.haveExited === false) { + hookConfig.haveExited = true; + var context = hookConfig.context; + var args = hookConfig.args; + var nextFn = hookConfig.nextFn; + + if (errMsg) { + if (allowAuction.value && cmpVersion === 1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](errMsg + " 'allowAuctionWithoutConsent' activated.", extraArgs); + nextFn.apply(context, args); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errMsg + ' Canceling auction as per consentManagement config.', extraArgs); + + if (typeof hookConfig.bidsBackHandler === 'function') { + hookConfig.bidsBackHandler(); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error executing bidsBackHandler'); + } + } + } else { + nextFn.apply(context, args); + } + } +} +/** + * Simply resets the module's consentData variable back to undefined, mainly for testing purposes + */ + + +function resetConsentData() { + consentData = undefined; + userCMP = undefined; + cmpVersion = 0; + __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["gdprDataHandler"].setConsentData(null); +} +/** + * A configuration function that initializes some module variables, as well as add a hook into the requestBids function + * @param {{cmp:string, timeout:number, allowAuctionWithoutConsent:boolean, defaultGdprScope:boolean}} config required; consentManagement module config settings; cmp (string), timeout (int), allowAuctionWithoutConsent (boolean) + */ + +function setConsentConfig(config) { + // if `config.gdpr` or `config.usp` exist, assume new config format. + // else for backward compatability, just use `config` + config = config.gdpr || config.usp ? config.gdpr : config; + + if (!config || _typeof(config) !== 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('consentManagement config not defined, exiting consent manager'); + return; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](config.cmpApi)) { + userCMP = config.cmpApi; + } else { + userCMP = DEFAULT_CMP; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("consentManagement config did not specify cmp. Using system default setting (".concat(DEFAULT_CMP, ").")); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](config.timeout)) { + consentTimeout = config.timeout; + } else { + consentTimeout = DEFAULT_CONSENT_TIMEOUT; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("consentManagement config did not specify timeout. Using system default setting (".concat(DEFAULT_CONSENT_TIMEOUT, ").")); + } + + if (typeof config.allowAuctionWithoutConsent === 'boolean') { + allowAuction.value = config.allowAuctionWithoutConsent; + allowAuction.definedInConfig = true; + } // if true, then gdprApplies should be set to true + + + gdprScope = config.defaultGdprScope === true; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('consentManagement module has been activated...'); + + if (userCMP === 'static') { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](config.consentData)) { + staticConsentData = config.consentData; + consentTimeout = 0; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("consentManagement config with cmpApi: 'static' did not specify consentData. No consents will be available to adapters."); + } + } + + if (!addedConsentHook) { + pbjs.requestBids.before(requestBidsHook, 50); + } + + addedConsentHook = true; +} +__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('consentManagement', function (config) { + return setConsentConfig(config.consentManagement); +}); + +/***/ }) + +},[337]); +pbjsChunk([194],{ + +/***/ 464: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(465); + + +/***/ }), + +/***/ 465: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js__ = __webpack_require__(466); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + +var BIDDER_CODE = 'ix'; +var SECURE_BID_URL = 'https://htlb.casalemedia.com/cygnus'; +var SUPPORTED_AD_TYPES = [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]]; +var BANNER_ENDPOINT_VERSION = 7.2; +var VIDEO_ENDPOINT_VERSION = 8.1; +var CENT_TO_DOLLAR_FACTOR = 100; +var BANNER_TIME_TO_LIVE = 300; +var VIDEO_TIME_TO_LIVE = 3600; // 1hr + +var NET_REVENUE = true; +var PRICE_TO_DOLLAR_FACTOR = { + JPY: 1 +}; +var USER_SYNC_URL = 'https://js-sec.indexww.com/um/ixmatch.html'; +/** + * Transform valid bid request config object to banner impression object that will be sent to ad server. + * + * @param {object} bid A valid bid request config object. + * @return {object} A impression object that will be sent to ad server. + */ + +function bidToBannerImp(bid) { + var imp = bidToImp(bid); + imp.banner = {}; + imp.banner.w = bid.params.size[0]; + imp.banner.h = bid.params.size[1]; + imp.banner.topframe = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"]() ? 0 : 1; + return imp; +} +/** + * Transform valid bid request config object to video impression object that will be sent to ad server. + * + * @param {object} bid A valid bid request config object. + * @return {object} A impression object that will be sent to ad server. + */ + + +function bidToVideoImp(bid) { + var imp = bidToImp(bid); + imp.video = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](bid.params.video); + imp.video.w = bid.params.size[0]; + imp.video.h = bid.params.size[1]; + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (context) { + if (context === 'instream') { + imp.video.placement = 1; + } else if (context === 'outstream') { + imp.video.placement = 4; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("ix bidder params: video context '".concat(context, "' is not supported")); + } + } + + return imp; +} + +function bidToImp(bid) { + var imp = {}; + imp.id = bid.bidId; + imp.ext = {}; + imp.ext.siteID = bid.params.siteId; + + if (bid.params.hasOwnProperty('id') && (typeof bid.params.id === 'string' || typeof bid.params.id === 'number')) { + imp.ext.sid = String(bid.params.id); + } else { + imp.ext.sid = "".concat(bid.params.size[0], "x").concat(bid.params.size[1]); + } + + if (bid.params.hasOwnProperty('bidFloor') && bid.params.hasOwnProperty('bidFloorCur')) { + imp.bidfloor = bid.params.bidFloor; + imp.bidfloorcur = bid.params.bidFloorCur; + } + + return imp; +} +/** + * Parses a raw bid for the relevant information. + * + * @param {object} rawBid The bid to be parsed. + * @param {string} currency Global currency in bid response. + * @return {object} bid The parsed bid. + */ + + +function parseBid(rawBid, currency, bidRequest) { + var bid = {}; + + if (PRICE_TO_DOLLAR_FACTOR.hasOwnProperty(currency)) { + bid.cpm = rawBid.price / PRICE_TO_DOLLAR_FACTOR[currency]; + } else { + bid.cpm = rawBid.price / CENT_TO_DOLLAR_FACTOR; + } + + bid.requestId = rawBid.impid; + bid.dealId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.dealid'); + bid.netRevenue = NET_REVENUE; + bid.currency = currency; + bid.creativeId = rawBid.hasOwnProperty('crid') ? rawBid.crid : '-'; // in the event of a video + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.vasturl')) { + bid.vastUrl = rawBid.ext.vasturl; + bid.width = bidRequest.video.w; + bid.height = bidRequest.video.h; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + bid.ttl = VIDEO_TIME_TO_LIVE; + } else { + bid.ad = rawBid.adm; + bid.width = rawBid.w; + bid.height = rawBid.h; + bid.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + bid.ttl = BANNER_TIME_TO_LIVE; + } + + bid.meta = {}; + bid.meta.networkId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.dspid'); + bid.meta.brandId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.advbrandid'); + bid.meta.brandName = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](rawBid, 'ext.advbrand'); + + if (rawBid.adomain && rawBid.adomain.length > 0) { + bid.meta.advertiserDomains = rawBid.adomain; + } + + return bid; +} +/** + * Determines whether or not the given object is valid size format. + * + * @param {*} size The object to be validated. + * @return {boolean} True if this is a valid size format, and false otherwise. + */ + + +function isValidSize(size) { + return Array.isArray(size) && size.length === 2 && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js___default()(size[0]) && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_number_is_integer_js___default()(size[1]); +} +/** + * Determines whether or not the given size object is an element of the size + * array. + * + * @param {array} sizeArray The size array. + * @param {object} size The size object. + * @return {boolean} True if the size object is an element of the size array, and false + * otherwise. + */ + + +function includesSize(sizeArray, size) { + if (isValidSize(sizeArray)) { + return sizeArray[0] === size[0] && sizeArray[1] === size[1]; + } + + for (var i = 0; i < sizeArray.length; i++) { + if (sizeArray[i][0] === size[0] && sizeArray[i][1] === size[1]) { + return true; + } + } + + return false; +} +/** + * Determines whether or not the given bidFloor parameters are valid. + * + * @param {*} bidFloor The bidFloor parameter inside bid request config. + * @param {*} bidFloorCur The bidFloorCur parameter inside bid request config. + * @return {boolean} True if this is a valid bidFloor parameters format, and false + * otherwise. + */ + + +function isValidBidFloorParams(bidFloor, bidFloorCur) { + var curRegex = /^[A-Z]{3}$/; + return Boolean(typeof bidFloor === 'number' && typeof bidFloorCur === 'string' && bidFloorCur.match(curRegex)); +} +/** + * Finds the impression with the associated id. + * + * @param {*} id Id of the impression. + * @param {array} impressions List of impressions sent in the request. + * @return {object} The impression with the associated id. + */ + + +function getBidRequest(id, impressions) { + if (!id) { + return; + } + + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find_js___default()(impressions, function (imp) { + return imp.id === id; + }); +} +/** + * Adds a User ID module's response into user Eids array. + * + * @param {array} userEids An array of objects containing user ids, + * will be attached to bid request later. + * @param {object} seenIdPartners An object with Identity partners names already added, + * updated with new partner name. + * @param {*} id The id obtained from User ID module. + * @param {string} source The URL of the User ID module. + * @param {string} ixlPartnerName The name of the Identity Partner in IX Library. + * @param {string} rtiPartner The name of the User ID provider in Prebid. + * @return {boolean} True if successfully added the ID to the userEids, false otherwise. + */ + + +function addUserEids(userEids, seenIdPartners, id, source, ixlPartnerName, rtiPartner) { + if (id) { + // mark the partnername that IX RTI uses + seenIdPartners[ixlPartnerName] = 1; + userEids.push({ + source: source, + uids: [{ + id: id, + ext: { + rtiPartner: rtiPartner + } + }] + }); + return true; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Tried to add a user ID from Prebid, the ID received was null'); + return false; +} +/** + * Builds a request object to be sent to the ad server based on bid requests. + * + * @param {array} validBidRequests A list of valid bid request config objects. + * @param {object} bidderRequest An object containing other info like gdprConsent. + * @param {array} impressions List of impression objects describing the bids. + * @param {array} version Endpoint version denoting banner or video. + * @return {object} Info describing the request to the server. + * + */ + + +function buildRequest(validBidRequests, bidderRequest, impressions, version) { + var userEids = []; // Always use secure HTTPS protocol. + + var baseUrl = SECURE_BID_URL; // Dict for identity partners already populated from prebid + + var seenIdPartners = {}; // Get ids from Prebid User ID Modules + + var userId = validBidRequests[0].userId; + + if (userId && _typeof(userId) === 'object') { + if (userId.idl_env) { + addUserEids(userEids, seenIdPartners, userId.idl_env, 'liveramp.com', 'LiveRampIp', 'idl'); + } + } // RTI ids will be included in the bid request if the function getIdentityInfo() is loaded + // and if the data for the partner exist + + + if (window.headertag && typeof window.headertag.getIdentityInfo === 'function') { + var identityInfo = window.headertag.getIdentityInfo(); + + if (identityInfo && _typeof(identityInfo) === 'object') { + for (var partnerName in identityInfo) { + if (identityInfo.hasOwnProperty(partnerName)) { + // check if not already populated by prebid cache + if (!seenIdPartners.hasOwnProperty(partnerName)) { + var response = identityInfo[partnerName]; + + if (!response.responsePending && response.data && _typeof(response.data) === 'object' && Object.keys(response.data).length) { + userEids.push(response.data); + } + } + } + } + } + } + + var r = {}; // Since bidderRequestId are the same for different bid request, just use the first one. + + r.id = validBidRequests[0].bidderRequestId; + r.imp = impressions; + r.site = {}; + r.ext = {}; + r.ext.source = 'prebid'; // if an schain is provided, send it along + + if (validBidRequests[0].schain) { + r.source = { + ext: { + schain: validBidRequests[0].schain + } + }; + } + + if (userEids.length > 0) { + r.user = {}; + r.user.eids = userEids; + } + + if (document.referrer && document.referrer !== '') { + r.site.ref = document.referrer; + } // Apply GDPR information to the request if GDPR is enabled. + + + if (bidderRequest) { + if (bidderRequest.gdprConsent) { + var gdprConsent = bidderRequest.gdprConsent; + + if (gdprConsent.hasOwnProperty('gdprApplies')) { + r.regs = { + ext: { + gdpr: gdprConsent.gdprApplies ? 1 : 0 + } + }; + } + + if (gdprConsent.hasOwnProperty('consentString')) { + r.user = r.user || {}; + r.user.ext = { + consent: gdprConsent.consentString || '' + }; + } + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](r, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (bidderRequest.refererInfo) { + r.site.page = bidderRequest.refererInfo.referer; + } + } + + var payload = {}; // Parse additional runtime configs. + + var bidderCode = bidderRequest && bidderRequest.bidderCode || 'ix'; + var otherIxConfig = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig(bidderCode); + + if (otherIxConfig) { + // Append firstPartyData to r.site.page if firstPartyData exists. + if (_typeof(otherIxConfig.firstPartyData) === 'object') { + var firstPartyData = otherIxConfig.firstPartyData; + var firstPartyString = '?'; + + for (var key in firstPartyData) { + if (firstPartyData.hasOwnProperty(key)) { + firstPartyString += "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(firstPartyData[key]), "&"); + } + } + + firstPartyString = firstPartyString.slice(0, -1); + r.site.page += firstPartyString; + } // Create t in payload if timeout is configured. + + + if (typeof otherIxConfig.timeout === 'number') { + payload.t = otherIxConfig.timeout; + } + } // Use the siteId in the first bid request as the main siteId. + + + payload.s = validBidRequests[0].params.siteId; + payload.v = version; + payload.r = JSON.stringify(r); + payload.ac = 'j'; + payload.sd = 1; + + if (version === VIDEO_ENDPOINT_VERSION) { + payload.nf = 1; + } + + return { + method: 'GET', + url: baseUrl, + data: payload + }; +} +/** + * + * @param {array} bannerSizeList list of banner sizes + * @param {array} bannerSize the size to be removed + * @return {boolean} true if succesfully removed, false if not found + */ + + +function removeFromSizes(bannerSizeList, bannerSize) { + for (var i = 0; i < bannerSizeList.length; i++) { + if (bannerSize[0] == bannerSizeList[i][0] && bannerSize[1] == bannerSizeList[i][1]) { + bannerSizeList.splice(i, 1); + return true; + } + } // size not found + + + return false; +} +/** + * Updates the Object to track missing banner sizes. + * + * @param {object} validBidRequest The bid request for an ad unit's with a configured size. + * @param {object} missingBannerSizes The object containing missing banner sizes + * @param {object} imp The impression for the bidrequest + */ + + +function updateMissingSizes(validBidRequest, missingBannerSizes, imp) { + var transactionID = validBidRequest.transactionId; + + if (missingBannerSizes.hasOwnProperty(transactionID)) { + var currentSizeList = []; + + if (missingBannerSizes[transactionID].hasOwnProperty('missingSizes')) { + currentSizeList = missingBannerSizes[transactionID].missingSizes; + } + + removeFromSizes(currentSizeList, validBidRequest.params.size); + missingBannerSizes[transactionID].missingSizes = currentSizeList; + } else { + // New Ad Unit + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequest, 'mediaTypes.banner.sizes')) { + var sizeList = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](validBidRequest.mediaTypes.banner.sizes); + removeFromSizes(sizeList, validBidRequest.params.size); + var newAdUnitEntry = { + 'missingSizes': sizeList, + 'impression': imp + }; + missingBannerSizes[transactionID] = newAdUnitEntry; + } + } +} +/** + * + * @param {object} imp Impression object to be modified + * @param {array} newSize The new size to be applied + * @return {object} newImp Updated impression object + */ + + +function createMissingBannerImp(imp, newSize) { + var newImp = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](imp); + newImp.ext.sid = "".concat(newSize[0], "x").concat(newSize[1]); + newImp.banner.w = newSize[0]; + newImp.banner.h = newSize[1]; + return newImp; +} + +var spec = { + code: BIDDER_CODE, + gvlid: 10, + supportedMediaTypes: SUPPORTED_AD_TYPES, + + /** + * 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) { + if (!isValidSize(bid.params.size)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: bid size has invalid format.'); + return false; + } + + if (!includesSize(bid.sizes, bid.params.size)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: bid size is not included in ad unit sizes.'); + return false; + } + + if (bid.hasOwnProperty('mediaType') && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["contains"](SUPPORTED_AD_TYPES, bid.mediaType)) { + return false; + } + + if (bid.hasOwnProperty('mediaTypes') && !(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize'))) { + return false; + } + + if (typeof bid.params.siteId !== 'string' && typeof bid.params.siteId !== 'number') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: siteId must be string or number value.'); + return false; + } + + var hasBidFloor = bid.params.hasOwnProperty('bidFloor'); + var hasBidFloorCur = bid.params.hasOwnProperty('bidFloorCur'); + + if (hasBidFloor || hasBidFloorCur) { + if (!(hasBidFloor && hasBidFloorCur && isValidBidFloorParams(bid.params.bidFloor, bid.params.bidFloorCur))) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('ix bidder params: bidFloor / bidFloorCur parameter has invalid format.'); + return false; + } + } + + return true; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {array} validBidRequests A list of valid bid request config objects. + * @param {object} bidderRequest A object contains bids and other info like gdprConsent. + * @return {object} Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var reqs = []; + var bannerImps = []; + var videoImps = []; + var validBidRequest = null; // To capture the missing sizes i.e not configured for ix + + var missingBannerSizes = {}; + + for (var i = 0; i < validBidRequests.length; i++) { + validBidRequest = validBidRequests[i]; + + if (validBidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequest, 'mediaTypes.video')) { + if (validBidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] || includesSize(validBidRequest.mediaTypes.video.playerSize, validBidRequest.params.size)) { + videoImps.push(bidToVideoImp(validBidRequest)); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Bid size is not included in video playerSize'); + } + } + + if (validBidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */] || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequest, 'mediaTypes.banner') || !validBidRequest.mediaType && !validBidRequest.mediaTypes) { + var imp = bidToBannerImp(validBidRequest); + bannerImps.push(imp); + updateMissingSizes(validBidRequest, missingBannerSizes, imp); + } + } // Finding the missing banner sizes ,and making impressions for them + + + for (var transactionID in missingBannerSizes) { + if (missingBannerSizes.hasOwnProperty(transactionID)) { + var missingSizes = missingBannerSizes[transactionID].missingSizes; + + for (var _i = 0; _i < missingSizes.length; _i++) { + var origImp = missingBannerSizes[transactionID].impression; + var newImp = createMissingBannerImp(origImp, missingSizes[_i]); + bannerImps.push(newImp); + } + } + } + + if (bannerImps.length > 0) { + reqs.push(buildRequest(validBidRequests, bidderRequest, bannerImps, BANNER_ENDPOINT_VERSION)); + } + + if (videoImps.length > 0) { + reqs.push(buildRequest(validBidRequests, bidderRequest, videoImps, VIDEO_ENDPOINT_VERSION)); + } + + return reqs; + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {object} serverResponse A successful response from the server. + * @param {object} bidderRequest The bid request sent to the server. + * @return {array} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, bidderRequest) { + var bids = []; + var bid = null; + + if (!serverResponse.hasOwnProperty('body') || !serverResponse.body.hasOwnProperty('seatbid')) { + return bids; + } + + var responseBody = serverResponse.body; + var seatbid = responseBody.seatbid; + + for (var i = 0; i < seatbid.length; i++) { + if (!seatbid[i].hasOwnProperty('bid')) { + continue; + } // Transform rawBid in bid response to the format that will be accepted by prebid. + + + var innerBids = seatbid[i].bid; + var requestBid = JSON.parse(bidderRequest.data.r); + + for (var j = 0; j < innerBids.length; j++) { + var bidRequest = getBidRequest(innerBids[j].impid, requestBid.imp); + bid = parseBid(innerBids[j], responseBody.cur, bidRequest); + bids.push(bid); + } + } + + return bids; + }, + + /** + * Covert bid param types for S2S + * @param {Object} params bid params + * @param {Boolean} isOpenRtb boolean to check openrtb2 protocol + * @return {Object} params bid params + */ + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'siteID': 'number' + }, params); + }, + + /** + * Determine which user syncs should occur + * @param {object} syncOptions + * @param {array} serverResponses + * @returns {array} User sync pixels + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + return syncOptions.iframeEnabled ? [{ + type: 'iframe', + url: USER_SYNC_URL + }] : []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_5__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[464]); +pbjsChunk([25],{ + +/***/ 591: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(592); + + +/***/ }), + +/***/ 592: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["resetSyncedStatus"] = resetSyncedStatus; +/* harmony export (immutable) */ __webpack_exports__["resetWurlMap"] = resetWurlMap; +/* harmony export (immutable) */ __webpack_exports__["PrebidServer"] = PrebidServer; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapter_js__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9__src_events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__config_js__ = __webpack_require__(593); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js__); +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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + + + + + + + + + +var getConfig = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig; +var TYPE = __WEBPACK_IMPORTED_MODULE_3__src_constants_json__["S2S"].SRC; +var _synced = false; +var DEFAULT_S2S_TTL = 60; +var DEFAULT_S2S_CURRENCY = 'USD'; +var DEFAULT_S2S_NETREVENUE = true; + +var _s2sConfig; +/** + * @typedef {Object} AdapterOptions + * @summary s2sConfig parameter that adds arguments to resulting OpenRTB payload that goes to Prebid Server + * @example + * // example of multiple bidder configuration + * pbjs.setConfig({ + * s2sConfig: { + * adapterOptions: { + * rubicon: {singleRequest: false} + * appnexus: {key: "value"} + * } + * } + * }); + */ + +/** + * @typedef {Object} S2SDefaultConfig + * @property {boolean} enabled + * @property {number} timeout + * @property {number} maxBids + * @property {string} adapter + * @property {AdapterOptions} adapterOptions + */ + +/** + * @type {S2SDefaultConfig} + */ + + +var s2sDefaultConfig = { + enabled: false, + timeout: 1000, + maxBids: 1, + adapter: 'prebidServer', + adapterOptions: {}, + syncUrlModifier: {} +}; +__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].setDefaults({ + 's2sConfig': s2sDefaultConfig +}); +/** + * 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 {number} [defaultTtl] ttl for S2S bidders when pbs does not return a ttl on the response - defaults to 60` + * @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 {Object} [extPrebid] properties will be merged into request.ext.prebid + * @property {AdapterOptions} [adapterOptions] adds arguments to resulting OpenRTB payload to Prebid Server + */ + +function setS2sConfig(options) { + if (options.defaultVendor) { + var vendor = options.defaultVendor; + var optionKeys = Object.keys(options); + + if (__WEBPACK_IMPORTED_MODULE_11__config_js__["a" /* S2S_VENDORS */][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(__WEBPACK_IMPORTED_MODULE_11__config_js__["a" /* S2S_VENDORS */][vendor]).forEach(function (vendorKey) { + if (s2sDefaultConfig[vendorKey] === options[vendorKey] || !__WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default()(optionKeys, vendorKey)) { + options[vendorKey] = __WEBPACK_IMPORTED_MODULE_11__config_js__["a" /* S2S_VENDORS */][vendor][vendorKey]; + } + }); + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["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 (!__WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default()(keys, key)) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](key + ' missing in server to server config'); + return true; + } + + return false; + }).length > 0) { + return; + } + + _s2sConfig = options; +} + +getConfig('s2sConfig', function (_ref) { + var s2sConfig = _ref.s2sConfig; + return setS2sConfig(s2sConfig); +}); +/** + * resets the _synced variable back to false, primiarily used for testing purposes +*/ + +function resetSyncedStatus() { + _synced = false; +} +/** + * @param {Array} bidderCodes list of bidders to request user syncs for. + */ + +function queueSync(bidderCodes, gdprConsent, uspConsent) { + if (_synced) { + return; + } + + _synced = true; + var payload = { + uuid: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["generateUUID"](), + bidders: bidderCodes, + account: _s2sConfig.accountId + }; + var userSyncLimit = _s2sConfig.userSyncLimit; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isNumber"](userSyncLimit) && userSyncLimit > 0) { + payload['limit'] = userSyncLimit; + } + + if (gdprConsent) { + // only populate gdpr field if we know CMP returned consent information (ie didn't timeout or have an error) + if (typeof gdprConsent.consentString !== 'undefined') { + payload.gdpr = gdprConsent.gdprApplies ? 1 : 0; + } // attempt to populate gdpr_consent if we know gdprApplies or it may apply + + + if (gdprConsent.gdprApplies !== false) { + payload.gdpr_consent = gdprConsent.consentString; + } + } // US Privace (CCPA) support + + + if (uspConsent) { + payload.us_privacy = uspConsent; + } + + var jsonPayload = JSON.stringify(payload); + Object(__WEBPACK_IMPORTED_MODULE_12__src_ajax_js__["a" /* ajax */])(_s2sConfig.syncEndpoint, function (response) { + try { + response = JSON.parse(response); + doAllSyncs(response.bidder_status); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](e); + } + }, jsonPayload, { + contentType: 'text/plain', + withCredentials: true + }); +} + +function doAllSyncs(bidders) { + if (bidders.length === 0) { + return; + } + + var thisSync = bidders.pop(); + + if (thisSync.no_cookie) { + doPreBidderSync(thisSync.usersync.type, thisSync.usersync.url, thisSync.bidder, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["bind"].call(doAllSyncs, null, bidders)); + } else { + doAllSyncs(bidders); + } +} +/** + * Modify the cookie sync url from prebid server to add new params. + * + * @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 + * @param {function} done an exit callback; to signify this pixel has either: finished rendering or something went wrong + */ + + +function doPreBidderSync(type, url, bidder, done) { + if (_s2sConfig.syncUrlModifier && typeof _s2sConfig.syncUrlModifier[bidder] === 'function') { + var newSyncUrl = _s2sConfig.syncUrlModifier[bidder](type, url, bidder); + + doBidderSync(type, newSyncUrl, bidder, done); + } else { + doBidderSync(type, url, bidder, done); + } +} +/** + * 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 + * @param {function} done an exit callback; to signify this pixel has either: finished rendering or something went wrong + */ + + +function doBidderSync(type, url, bidder, done) { + if (!url) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("No sync url for bidder \"".concat(bidder, "\": ").concat(url)); + done(); + } else if (type === 'image' || type === 'redirect') { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]("Invoking image pixel user sync for bidder: \"".concat(bidder, "\"")); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["triggerPixel"](url, done); + } else if (type == 'iframe') { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]("Invoking iframe user sync for bidder: \"".concat(bidder, "\"")); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["insertUserSyncIframe"](url, done); + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("User sync type \"".concat(type, "\" not supported for bidder: \"").concat(bidder, "\"")); + done(); + } +} +/** + * Do client-side syncs for bidders. + * + * @param {Array} bidders a list of bidder names + */ + + +function doClientSideSyncs(bidders) { + bidders.forEach(function (bidder) { + var clientAdapter = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].getBidAdapter(bidder); + + if (clientAdapter && clientAdapter.registerSyncs) { + clientAdapter.registerSyncs([]); + } + }); +} + +function _appendSiteAppDevice(request, pageUrl) { + if (!request) return; // ORTB specifies app OR site + + if (_typeof(__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + request.app = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('app'); + request.app.publisher = { + id: _s2sConfig.accountId + }; + } else { + request.site = {}; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('site'))) { + request.site = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('site'); + } // set publisher.id if not already defined + + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](request.site, 'publisher.id')) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request.site, 'publisher.id', _s2sConfig.accountId); + } // set site.page if not already defined + + + if (!request.site.page) { + request.site.page = pageUrl; + } + } + + if (_typeof(__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('device')) === 'object') { + request.device = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('device'); + } + + if (!request.device) { + request.device = {}; + } + + if (!request.device.w) { + request.device.w = window.innerWidth; + } + + if (!request.device.h) { + request.device.h = window.innerHeight; + } +} + +function addBidderFirstPartyDataToRequest(request) { + var bidderConfig = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getBidderConfig(); + var fpdConfigs = Object.keys(bidderConfig).reduce(function (acc, bidder) { + var currBidderConfig = bidderConfig[bidder]; + + if (currBidderConfig.fpd) { + var fpd = {}; + + if (currBidderConfig.fpd.context) { + fpd.site = currBidderConfig.fpd.context; + } + + if (currBidderConfig.fpd.user) { + fpd.user = currBidderConfig.fpd.user; + } + + acc.push({ + bidders: [bidder], + config: { + fpd: fpd + } + }); + } + + return acc; + }, []); + + if (fpdConfigs.length) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'ext.prebid.bidderconfig', fpdConfigs); + } +} // https://iabtechlab.com/wp-content/uploads/2016/07/OpenRTB-Native-Ads-Specification-Final-1.2.pdf#page=40 + + +var nativeDataIdMap = { + sponsoredBy: 1, + // sponsored + body: 2, + // desc + rating: 3, + likes: 4, + downloads: 5, + price: 6, + salePrice: 7, + phone: 8, + address: 9, + body2: 10, + // desc2 + cta: 12 // ctatext + +}; +var nativeDataNames = Object.keys(nativeDataIdMap); +var nativeImgIdMap = { + icon: 1, + image: 3 +}; +var nativeEventTrackerEventMap = { + impression: 1, + 'viewable-mrc50': 2, + 'viewable-mrc100': 3, + 'viewable-video50': 4 +}; +var nativeEventTrackerMethodMap = { + img: 1, + js: 2 +}; // enable reverse lookup + +[nativeDataIdMap, nativeImgIdMap, nativeEventTrackerEventMap, nativeEventTrackerMethodMap].forEach(function (map) { + Object.keys(map).forEach(function (key) { + map[map[key]] = key; + }); +}); +/* + * Protocol spec for OpenRTB endpoint + * e.g., https:///v1/openrtb2/auction + */ + +var bidIdMap = {}; +var nativeAssetCache = {}; // store processed native params to preserve + +/** + * map wurl to auction id and adId for use in the BID_WON event + */ + +var wurlMap = {}; +/** + * @param {string} auctionId + * @param {string} adId generated value set to bidObject.adId by bidderFactory Bid() + * @param {string} wurl events.winurl passed from prebidServer as wurl + */ + +function addWurl(auctionId, adId, wurl) { + if ([auctionId, adId].every(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])) { + wurlMap["".concat(auctionId).concat(adId)] = wurl; + } +} +/** + * @param {string} auctionId + * @param {string} adId generated value set to bidObject.adId by bidderFactory Bid() + */ + + +function removeWurl(auctionId, adId) { + if ([auctionId, adId].every(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])) { + wurlMap["".concat(auctionId).concat(adId)] = undefined; + } +} +/** + * @param {string} auctionId + * @param {string} adId generated value set to bidObject.adId by bidderFactory Bid() + * @return {(string|undefined)} events.winurl which was passed as wurl + */ + + +function getWurl(auctionId, adId) { + if ([auctionId, adId].every(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])) { + return wurlMap["".concat(auctionId).concat(adId)]; + } +} +/** + * remove all cached wurls + */ + + +function resetWurlMap() { + wurlMap = {}; +} +var OPEN_RTB_PROTOCOL = { + buildRequest: function buildRequest(s2sBidRequest, bidRequests, adUnits) { + var imps = []; + var aliases = {}; + var firstBidRequest = bidRequests[0]; // transform ad unit into array of OpenRTB impression objects + + adUnits.forEach(function (adUnit) { + var nativeParams = Object(__WEBPACK_IMPORTED_MODULE_7__src_native_js__["g" /* processNativeAdUnitParams */])(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'mediaTypes.native')); + var nativeAssets; + + if (nativeParams) { + try { + nativeAssets = nativeAssetCache[adUnit.code] = Object.keys(nativeParams).reduce(function (assets, type) { + var params = nativeParams[type]; + + function newAsset(obj) { + return _extends({ + required: params.required ? 1 : 0 + }, obj ? __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"](obj) : {}); + } + + switch (type) { + case 'image': + case 'icon': + var imgTypeId = nativeImgIdMap[type]; + var asset = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"]({ + type: imgTypeId, + w: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'sizes.0'), + h: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'sizes.1'), + wmin: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'aspect_ratios.0.min_width'), + hmin: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'aspect_ratios.0.min_height') + }); + + if (!(asset.w && asset.h || asset.hmin && asset.wmin)) { + throw 'invalid img sizes (must provide sizes or min_height & min_width if using aspect_ratios)'; + } + + if (Array.isArray(params.aspect_ratios)) { + // pass aspect_ratios as ext data I guess? + asset.ext = { + aspectratios: params.aspect_ratios.map(function (ratio) { + return "".concat(ratio.ratio_width, ":").concat(ratio.ratio_height); + }) + }; + } + + assets.push(newAsset({ + img: asset + })); + break; + + case 'title': + if (!params.len) { + throw 'invalid title.len'; + } + + assets.push(newAsset({ + title: { + len: params.len + } + })); + break; + + default: + var dataAssetTypeId = nativeDataIdMap[type]; + + if (dataAssetTypeId) { + assets.push(newAsset({ + data: { + type: dataAssetTypeId, + len: params.len + } + })); + } + + } + + return assets; + }, []); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('error creating native request: ' + String(e)); + } + } + + var videoParams = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'mediaTypes.video'); + var bannerParams = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'mediaTypes.banner'); + adUnit.bids.forEach(function (bid) { + // 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 + bidIdMap["".concat(adUnit.code).concat(bid.bidder)] = bid.bid_id; // check for and store valid aliases to add to the request + + if (__WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].aliasRegistry[bid.bidder]) { + aliases[bid.bidder] = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].aliasRegistry[bid.bidder]; + } + }); + var mediaTypes = {}; + + if (bannerParams && bannerParams.sizes) { + var sizes = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseSizesInput"](bannerParams.sizes); // get banner sizes in form [{ w: , h: }, ...] + + 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 + }; + }); + mediaTypes['banner'] = { + format: format + }; + } + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](videoParams)) { + if (videoParams.context === 'outstream' && !adUnit.renderer) { + // Don't push oustream w/o renderer to request object. + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('Outstream bid without renderer cannot be sent to Prebid Server.'); + } else { + mediaTypes['video'] = videoParams; + } + } + + if (nativeAssets) { + try { + mediaTypes['native'] = { + request: JSON.stringify({ + // TODO: determine best way to pass these and if we allow defaults + context: 1, + plcmttype: 1, + eventtrackers: [{ + event: 1, + methods: [1] + }], + // TODO: figure out how to support privacy field + // privacy: int + assets: nativeAssets + }), + ver: '1.2' + }; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('error creating native request: ' + String(e)); + } + } // get bidder params in form { : {...params} } + + + var ext = adUnit.bids.reduce(function (acc, bid) { + var adapter = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].bidderRegistry[bid.bidder]; + + if (adapter && adapter.getSpec().transformBidParams) { + bid.params = adapter.getSpec().transformBidParams(bid.params, true); + } + + acc[bid.bidder] = _s2sConfig.adapterOptions && _s2sConfig.adapterOptions[bid.bidder] ? _extends({}, bid.params, _s2sConfig.adapterOptions[bid.bidder]) : bid.params; + return acc; + }, {}); + var imp = { + id: adUnit.code, + ext: ext, + secure: _s2sConfig.secure + }; + /** + * Prebid AdSlot + * @type {(string|undefined)} + */ + + var pbAdSlot = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'fpd.context.pbAdSlot'); + + if (typeof pbAdSlot === 'string' && pbAdSlot) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](imp, 'ext.context.data.pbadslot', pbAdSlot); + } + /** + * GAM Ad Unit + * @type {(string|undefined)} + */ + + + var gamAdUnit = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'fpd.context.adServer.adSlot'); + + if (typeof gamAdUnit === 'string' && gamAdUnit) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](imp, 'ext.context.data.adslot', gamAdUnit); + } + + _extends(imp, mediaTypes); // if storedAuctionResponse has been set, pass SRID + + + var storedAuctionResponseBid = __WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js___default()(firstBidRequest.bids, function (bid) { + return bid.adUnitCode === adUnit.code && bid.storedAuctionResponse; + }); + + if (storedAuctionResponseBid) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](imp, 'ext.prebid.storedauctionresponse.id', storedAuctionResponseBid.storedAuctionResponse.toString()); + } + + if (imp.banner || imp.video || imp.native) { + imps.push(imp); + } + }); + + if (!imps.length) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('Request to Prebid Server rejected due to invalid media type(s) in adUnit.'); + return; + } + + var request = { + id: s2sBidRequest.tid, + source: { + tid: s2sBidRequest.tid + }, + tmax: _s2sConfig.timeout, + imp: imps, + test: getConfig('debug') ? 1 : 0, + ext: { + prebid: { + // set ext.prebid.auctiontimestamp with the auction timestamp. Data type is long integer. + auctiontimestamp: firstBidRequest.auctionStart, + targeting: { + // includewinners is always true for openrtb + includewinners: true, + // includebidderkeys always false for openrtb + includebidderkeys: false + } + } + } + }; // s2sConfig video.ext.prebid is passed through openrtb to PBS + + if (_s2sConfig.extPrebid && _typeof(_s2sConfig.extPrebid) === 'object') { + request.ext.prebid = _extends(request.ext.prebid, _s2sConfig.extPrebid); + } + /** + * @type {(string[]|string|undefined)} - OpenRTB property 'cur', currencies available for bids + */ + + + var adServerCur = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); + + if (adServerCur && typeof adServerCur === 'string') { + // if the value is a string, wrap it with an array + request.cur = [adServerCur]; + } else if (Array.isArray(adServerCur) && adServerCur.length) { + // if it's an array, get the first element + request.cur = [adServerCur[0]]; + } + + _appendSiteAppDevice(request, firstBidRequest.refererInfo.referer); // pass schain object if it is present + + + var schain = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequests, '0.bids.0.schain'); + + if (schain) { + request.source.ext = { + schain: schain + }; + } + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](aliases)) { + request.ext.prebid.aliases = aliases; + } + + var bidUserIdAsEids = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequests, '0.bids.0.userIdAsEids'); + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](bidUserIdAsEids) && bidUserIdAsEids.length > 0) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.eids', bidUserIdAsEids); + } + + if (bidRequests) { + if (firstBidRequest.gdprConsent) { + // note - gdprApplies & consentString may be undefined in certain use-cases for consentManagement module + var gdprApplies; + + if (typeof firstBidRequest.gdprConsent.gdprApplies === 'boolean') { + gdprApplies = firstBidRequest.gdprConsent.gdprApplies ? 1 : 0; + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.ext.gdpr', gdprApplies); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.consent', firstBidRequest.gdprConsent.consentString); + } // US Privacy (CCPA) support + + + if (firstBidRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.ext.us_privacy', firstBidRequest.uspConsent); + } + } + + if (getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.coppa', 1); + } + + var commonFpd = getConfig('fpd') || {}; + + if (commonFpd.context) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'site.ext.data', commonFpd.context); + } + + if (commonFpd.user) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.data', commonFpd.user); + } + + addBidderFirstPartyDataToRequest(request); + return request; + }, + interpretResponse: function interpretResponse(response, bidderRequests) { + 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; + var key = "".concat(bid.impid).concat(seatbid.seat); + + if (bidIdMap[key]) { + bidRequest = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getBidRequest"](bidIdMap[key], bidderRequests); + } + + var cpm = bid.price; + var status = cpm !== 0 ? __WEBPACK_IMPORTED_MODULE_3__src_constants_json__["STATUS"].GOOD : __WEBPACK_IMPORTED_MODULE_3__src_constants_json__["STATUS"].NO_BID; + var bidObject = Object(__WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__["a" /* createBid */])(status, bidRequest || { + bidder: seatbid.seat, + src: TYPE + }); + bidObject.cpm = cpm; + var serverResponseTimeMs = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](response, ['ext', 'responsetimemillis', seatbid.seat].join('.')); + + if (bidRequest && serverResponseTimeMs) { + bidRequest.serverResponseTimeMs = serverResponseTimeMs; + } // Look for seatbid[].bid[].ext.prebid.bidid and place it in the bidResponse object for use in analytics adapters as 'pbsBidId' + + + var bidId = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.bidid'); + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](bidId)) { + bidObject.pbsBidId = bidId; + } // store wurl by auctionId and adId so it can be accessed from the BID_WON event handler + + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.events.win'))) { + addWurl(bidRequest.auctionId, bidObject.adId, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.events.win')); + } + + var extPrebidTargeting = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.targeting'); // If ext.prebid.targeting exists, add it as a property value named 'adserverTargeting' + // The removal of hb_winurl and hb_bidid targeting values is temporary + // once we get through the transition, this block will be removed. + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](extPrebidTargeting)) { + // If wurl exists, remove hb_winurl and hb_bidid targeting attributes + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.events.win'))) { + extPrebidTargeting = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getDefinedParams"](extPrebidTargeting, Object.keys(extPrebidTargeting).filter(function (i) { + return i.indexOf('hb_winurl') === -1 && i.indexOf('hb_bidid') === -1; + })); + } + + bidObject.adserverTargeting = extPrebidTargeting; + } + + bidObject.seatBidId = bid.id; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.type') === __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["d" /* VIDEO */]) { + bidObject.mediaType = __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["d" /* VIDEO */]; + var sizes = bidRequest.sizes && bidRequest.sizes[0]; + bidObject.playerHeight = sizes[0]; + bidObject.playerWidth = sizes[1]; // try to get cache values from 'response.ext.prebid.cache.js' + // else try 'bid.ext.prebid.targeting' as fallback + + if (bid.ext.prebid.cache && _typeof(bid.ext.prebid.cache.vastXml) === 'object' && bid.ext.prebid.cache.vastXml.cacheId && bid.ext.prebid.cache.vastXml.url) { + bidObject.videoCacheKey = bid.ext.prebid.cache.vastXml.cacheId; + bidObject.vastUrl = bid.ext.prebid.cache.vastXml.url; + } else if (extPrebidTargeting && extPrebidTargeting.hb_uuid && extPrebidTargeting.hb_cache_host && extPrebidTargeting.hb_cache_path) { + bidObject.videoCacheKey = extPrebidTargeting.hb_uuid; // build url using key and cache host + + bidObject.vastUrl = "https://".concat(extPrebidTargeting.hb_cache_host).concat(extPrebidTargeting.hb_cache_path, "?uuid=").concat(extPrebidTargeting.hb_uuid); + } + + if (bid.adm) { + bidObject.vastXml = bid.adm; + } + + if (!bidObject.vastUrl && bid.nurl) { + bidObject.vastUrl = bid.nurl; + } + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.type') === __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["c" /* NATIVE */]) { + var _trackers; + + bidObject.mediaType = __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["c" /* NATIVE */]; + var adm; + + if (typeof bid.adm === 'string') { + adm = bidObject.adm = JSON.parse(bid.adm); + } else { + adm = bidObject.adm = bid.adm; + } + + var trackers = (_trackers = {}, _defineProperty(_trackers, nativeEventTrackerMethodMap.img, adm.imptrackers || []), _defineProperty(_trackers, nativeEventTrackerMethodMap.js, adm.jstracker ? [adm.jstracker] : []), _trackers); + + if (adm.eventtrackers) { + adm.eventtrackers.forEach(function (tracker) { + switch (tracker.method) { + case nativeEventTrackerMethodMap.img: + trackers[nativeEventTrackerMethodMap.img].push(tracker.url); + break; + + case nativeEventTrackerMethodMap.js: + trackers[nativeEventTrackerMethodMap.js].push(tracker.url); + break; + } + }); + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](adm) && Array.isArray(adm.assets)) { + var origAssets = nativeAssetCache[bidRequest.adUnitCode]; + bidObject.native = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"](adm.assets.reduce(function (native, asset) { + var origAsset = origAssets[asset.id]; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](asset.img)) { + native[origAsset.img.type ? nativeImgIdMap[origAsset.img.type] : 'image'] = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["pick"](asset.img, ['url', 'w as width', 'h as height']); + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](asset.title)) { + native['title'] = asset.title.text; + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](asset.data)) { + nativeDataNames.forEach(function (dataType) { + if (nativeDataIdMap[dataType] === origAsset.data.type) { + native[dataType] = asset.data.value; + } + }); + } + + return native; + }, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"]({ + clickUrl: adm.link, + clickTrackers: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adm, 'link.clicktrackers'), + impressionTrackers: trackers[nativeEventTrackerMethodMap.img], + javascriptTrackers: trackers[nativeEventTrackerMethodMap.js] + }))); + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('prebid server native response contained no assets'); + } + } else { + // banner + if (bid.adm && bid.nurl) { + bidObject.ad = bid.adm; + bidObject.ad += __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["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 = bidRequest.bidId || bidRequest.bid_Id; + bidObject.creative_id = bid.crid; + bidObject.creativeId = bid.crid; + + if (bid.burl) { + bidObject.burl = bid.burl; + } + + bidObject.currency = response.cur ? response.cur : DEFAULT_S2S_CURRENCY; + bidObject.meta = bidObject.meta || {}; + + if (bid.adomain) { + bidObject.meta.advertiserDomains = bid.adomain; + } // TODO: Remove when prebid-server returns ttl and netRevenue + + + var configTtl = _s2sConfig.defaultTtl || DEFAULT_S2S_TTL; + bidObject.ttl = bid.ttl ? bid.ttl : configTtl; + bidObject.netRevenue = bid.netRevenue ? bid.netRevenue : DEFAULT_S2S_NETREVENUE; + bids.push({ + adUnit: bid.impid, + bid: bidObject + }); + }); + }); + } + + return bids; + } +}; +/** + * BID_WON event to request the wurl + * @param {Bid} bid the winning bid object + */ + +function bidWonHandler(bid) { + var wurl = getWurl(bid.auctionId, bid.adId); + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](wurl)) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]("Invoking image pixel for wurl on BID_WIN: \"".concat(wurl, "\"")); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["triggerPixel"](wurl); // remove from wurl cache, since the wurl url was called + + removeWurl(bid.auctionId, bid.adId); + } +} +/** + * Bidder adapter for Prebid Server + */ + + +function PrebidServer() { + var baseAdapter = new __WEBPACK_IMPORTED_MODULE_0__src_adapter_js__["a" /* 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 = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepClone"](s2sBidRequest.ad_units); // at this point ad units should have a size array either directly or mapped so filter for that + + var validAdUnits = adUnits.filter(function (unit) { + return unit.mediaTypes && (unit.mediaTypes.native || unit.mediaTypes.banner && unit.mediaTypes.banner.sizes || unit.mediaTypes.video && unit.mediaTypes.video.playerSize); + }); // in case config.bidders contains invalid bidders, we only process those we sent requests for + + var requestedBidders = validAdUnits.map(function (adUnit) { + return adUnit.bids.map(function (bid) { + return bid.bidder; + }).filter(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["uniques"]); + }).reduce(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["flatten"]).filter(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["uniques"]); + + if (_s2sConfig && _s2sConfig.syncEndpoint) { + var gdprConsent, uspConsent; + + if (Array.isArray(bidRequests) && bidRequests.length > 0) { + gdprConsent = bidRequests[0].gdprConsent; + uspConsent = bidRequests[0].uspConsent; + } + + var syncBidders = _s2sConfig.bidders.map(function (bidder) { + return __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].aliasRegistry[bidder] || bidder; + }).filter(function (bidder, index, array) { + return array.indexOf(bidder) === index; + }); + + queueSync(syncBidders, gdprConsent, uspConsent); + } + + var request = OPEN_RTB_PROTOCOL.buildRequest(s2sBidRequest, bidRequests, validAdUnits); + var requestJson = request && JSON.stringify(request); + + if (request && requestJson) { + ajax(_s2sConfig.endpoint, { + success: function success(response) { + return handleResponse(response, requestedBidders, bidRequests, addBidResponse, done); + }, + error: done + }, requestJson, { + contentType: 'text/plain', + withCredentials: true + }); + } + }; + /* Notify Prebid of bid responses so bids can get in the auction */ + + + function handleResponse(response, requestedBidders, bidderRequests, addBidResponse, done) { + var result; + var bids = []; + + try { + result = JSON.parse(response); + bids = OPEN_RTB_PROTOCOL.interpretResponse(result, bidderRequests, requestedBidders); + bids.forEach(function (_ref2) { + var adUnit = _ref2.adUnit, + bid = _ref2.bid; + + if (Object(__WEBPACK_IMPORTED_MODULE_8__src_adapters_bidderFactory_js__["isValid"])(adUnit, bid, bidderRequests)) { + addBidResponse(adUnit, bid); + } + }); + bidderRequests.forEach(function (bidderRequest) { + return __WEBPACK_IMPORTED_MODULE_9__src_events_js___default.a.emit(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__["EVENTS"].BIDDER_DONE, bidderRequest); + }); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](error); + } + + if (!result || result.status && __WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default()(result.status, 'Error')) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('error parsing response: ', result.status); + } + + done(); + doClientSideSyncs(requestedBidders); + } // Listen for bid won to call wurl + + + __WEBPACK_IMPORTED_MODULE_9__src_events_js___default.a.on(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__["EVENTS"].BID_WON, bidWonHandler); + return _extends(this, { + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode, + type: TYPE + }); +} +__WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].registerBidAdapter(new PrebidServer(), 'prebidServer'); + +/***/ }), + +/***/ 593: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return S2S_VENDORS; }); +// accountId and bidders params are not included here, should be configured by end-user +var S2S_VENDORS = { + 'appnexus': { + adapter: 'prebidServer', + enabled: true, + endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', + syncEndpoint: 'https://prebid.adnxs.com/pbs/v1/cookie_sync', + timeout: 1000 + }, + 'rubicon': { + adapter: 'prebidServer', + enabled: true, + endpoint: 'https://prebid-server.rubiconproject.com/openrtb2/auction', + syncEndpoint: 'https://prebid-server.rubiconproject.com/cookie_sync', + timeout: 500 + } +}; + +/***/ }) + +},[591]); +pbjsChunk([116],{ + +/***/ 664: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(665); + + +/***/ }), + +/***/ 665: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FASTLANE_ENDPOINT", function() { return FASTLANE_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_ENDPOINT", function() { return VIDEO_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SYNC_ENDPOINT", function() { return SYNC_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["hasVideoMediaType"] = hasVideoMediaType; +/* harmony export (immutable) */ __webpack_exports__["masSizeOrdering"] = masSizeOrdering; +/* harmony export (immutable) */ __webpack_exports__["determineRubiconVideoSizeId"] = determineRubiconVideoSizeId; +/* harmony export (immutable) */ __webpack_exports__["getPriceGranularity"] = getPriceGranularity; +/* harmony export (immutable) */ __webpack_exports__["hasValidVideoParams"] = hasValidVideoParams; +/* harmony export (immutable) */ __webpack_exports__["hasValidSupplyChainParams"] = hasValidSupplyChainParams; +/* harmony export (immutable) */ __webpack_exports__["encodeParam"] = encodeParam; +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var DEFAULT_INTEGRATION = 'pbjs_lite'; +var DEFAULT_PBS_INTEGRATION = 'pbjs'; // always use https, regardless of whether or not current page is secure + +var FASTLANE_ENDPOINT = 'https://fastlane.rubiconproject.com/a/api/fastlane.json'; +var VIDEO_ENDPOINT = 'https://prebid-server.rubiconproject.com/openrtb2/auction'; +var SYNC_ENDPOINT = 'https://eus.rubiconproject.com/usync.html'; +var GVLID = 52; +var DIGITRUST_PROP_NAMES = { + FASTLANE: { + id: 'dt.id', + keyv: 'dt.keyv', + pref: 'dt.pref' + }, + PREBID_SERVER: { + id: 'id', + keyv: 'keyv' + } +}; +var sizeMap = { + 1: '468x60', + 2: '728x90', + 5: '120x90', + 7: '125x125', + 8: '120x600', + 9: '160x600', + 10: '300x600', + 13: '200x200', + 14: '250x250', + 15: '300x250', + 16: '336x280', + 17: '240x400', + 19: '300x100', + 31: '980x120', + 32: '250x360', + 33: '180x500', + 35: '980x150', + 37: '468x400', + 38: '930x180', + 39: '750x100', + 40: '750x200', + 41: '750x300', + 42: '2x4', + 43: '320x50', + 44: '300x50', + 48: '300x300', + 53: '1024x768', + 54: '300x1050', + 55: '970x90', + 57: '970x250', + 58: '1000x90', + 59: '320x80', + 60: '320x150', + 61: '1000x1000', + 64: '580x500', + 65: '640x480', + 66: '930x600', + 67: '320x480', + 68: '1800x1000', + 72: '320x320', + 73: '320x160', + 78: '980x240', + 79: '980x300', + 80: '980x400', + 83: '480x300', + 85: '300x120', + 90: '548x150', + 94: '970x310', + 95: '970x100', + 96: '970x210', + 101: '480x320', + 102: '768x1024', + 103: '480x280', + 105: '250x800', + 108: '320x240', + 113: '1000x300', + 117: '320x100', + 125: '800x250', + 126: '200x600', + 144: '980x600', + 145: '980x150', + 152: '1000x250', + 156: '640x320', + 159: '320x250', + 179: '250x600', + 195: '600x300', + 198: '640x360', + 199: '640x200', + 213: '1030x590', + 214: '980x360', + 221: '1x1', + 229: '320x180', + 230: '2000x1400', + 232: '580x400', + 234: '6x6', + 251: '2x2', + 256: '480x820', + 257: '400x600', + 258: '500x200', + 259: '998x200', + 264: '970x1000', + 265: '1920x1080', + 274: '1800x200', + 278: '320x500', + 282: '320x400', + 288: '640x380' +}; + +__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](sizeMap, function (item, key) { + return sizeMap[item] = key; +}); + +var spec = { + code: 'rubicon', + gvlid: GVLID, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + + /** + * @param {object} bid + * @return boolean + */ + isBidRequestValid: function isBidRequestValid(bid) { + if (_typeof(bid.params) !== 'object') { + return false; + } // validate account, site, zone have numeric values + + + for (var i = 0, props = ['accountId', 'siteId', 'zoneId']; i < props.length; i++) { + bid.params[props[i]] = parseInt(bid.params[props[i]]); + + if (isNaN(bid.params[props[i]])) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: wrong format of accountId or siteId or zoneId.'); + return false; + } + } + + var bidFormat = bidType(bid, true); // bidType is undefined? Return false + + if (!bidFormat) { + return false; + } else if (bidFormat === 'video') { + // bidType is video, make sure it has required params + return hasValidVideoParams(bid); + } // bidType is banner? return true + + + return true; + }, + + /** + * @param {BidRequest[]} bidRequests + * @param bidderRequest + * @return BidRequest[] + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + // separate video bids because the requests are structured differently + var requests = []; + var videoRequests = bidRequests.filter(function (bidRequest) { + return bidType(bidRequest) === 'video'; + }).map(function (bidRequest) { + bidRequest.startTime = new Date().getTime(); + var data = { + id: bidRequest.transactionId, + test: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('debug') ? 1 : 0, + cur: ['USD'], + source: { + tid: bidRequest.transactionId + }, + tmax: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('TTL') || 1000, + imp: [{ + exp: 300, + id: bidRequest.adUnitCode, + secure: 1, + ext: _defineProperty({}, bidRequest.bidder, bidRequest.params), + video: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') || {} + }], + ext: { + prebid: { + cache: { + vastxml: { + returnCreative: false // don't return the VAST + + } + }, + targeting: { + includewinners: true, + // includebidderkeys always false for openrtb + includebidderkeys: false, + pricegranularity: getPriceGranularity(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */]) + }, + bidders: { + rubicon: { + integration: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.int_type') || DEFAULT_PBS_INTEGRATION + } + } + } + } + }; // Add alias if it is there + + if (bidRequest.bidder !== 'rubicon') { + data.ext.prebid.aliases = _defineProperty({}, bidRequest.bidder, 'rubicon'); + } + + var bidFloor; + + if (typeof bidRequest.getFloor === 'function' && !__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.disableFloors')) { + var floorInfo = bidRequest.getFloor({ + currency: 'USD', + mediaType: 'video', + size: parseSizes(bidRequest, 'video') + }); + bidFloor = _typeof(floorInfo) === 'object' && floorInfo.currency === 'USD' && !isNaN(parseInt(floorInfo.floor)) ? parseFloat(floorInfo.floor) : undefined; + } else { + bidFloor = parseFloat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.floor')); + } + + if (!isNaN(bidFloor)) { + data.imp[0].bidfloor = bidFloor; + } // if value is set, will overwrite with same value + + + data.imp[0].ext[bidRequest.bidder].video.size_id = determineRubiconVideoSizeId(bidRequest); + appendSiteAppDevice(data, bidRequest, bidderRequest); + addVideoParameters(data, bidRequest); + + var digiTrust = _getDigiTrustQueryParams(bidRequest, 'PREBID_SERVER'); + + if (digiTrust) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.digitrust', digiTrust); + } + + if (bidderRequest.gdprConsent) { + // note - gdprApplies & consentString may be undefined in certain use-cases for consentManagement module + var gdprApplies; + + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + gdprApplies = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.ext.gdpr', gdprApplies); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (bidRequest.userId && _typeof(bidRequest.userId) === 'object' && (bidRequest.userId.tdid || bidRequest.userId.pubcid || bidRequest.userId.lipb || bidRequest.userId.idl_env)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.eids', []); + + if (bidRequest.userId.tdid) { + data.user.ext.eids.push({ + source: 'adserver.org', + uids: [{ + id: bidRequest.userId.tdid, + ext: { + rtiPartner: 'TDID' + } + }] + }); + } + + if (bidRequest.userId.pubcid) { + data.user.ext.eids.push({ + source: 'pubcommon', + uids: [{ + id: bidRequest.userId.pubcid + }] + }); + } // support liveintent ID + + + if (bidRequest.userId.lipb && bidRequest.userId.lipb.lipbid) { + data.user.ext.eids.push({ + source: 'liveintent.com', + uids: [{ + id: bidRequest.userId.lipb.lipbid + }] + }); + data.user.ext.tpid = { + source: 'liveintent.com', + uid: bidRequest.userId.lipb.lipbid + }; + + if (Array.isArray(bidRequest.userId.lipb.segments) && bidRequest.userId.lipb.segments.length) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'rp.target.LIseg', bidRequest.userId.lipb.segments); + } + } // support identityLink (aka LiveRamp) + + + if (bidRequest.userId.idl_env) { + data.user.ext.eids.push({ + source: 'liveramp.com', + uids: [{ + id: bidRequest.userId.idl_env + }] + }); + } + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.coppa', 1); + } + + if (bidRequest.schain && hasValidSupplyChainParams(bidRequest.schain)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'source.ext.schain', bidRequest.schain); + } + + var siteData = _extends({}, bidRequest.params.inventory, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context')); + + var userData = _extends({}, bidRequest.params.visitor, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user')); + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](siteData) || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userData)) { + var bidderData = { + bidders: [bidderRequest.bidderCode], + config: { + fpd: {} + } + }; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](siteData)) { + bidderData.config.fpd.site = siteData; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userData)) { + bidderData.config.fpd.user = userData; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'ext.prebid.bidderconfig.0', bidderData); + } + /** + * Prebid AdSlot + * @type {(string|undefined)} + */ + + + var pbAdSlot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.pbAdSlot'); + + if (typeof pbAdSlot === 'string' && pbAdSlot) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0].ext, 'context.data.pbadslot', pbAdSlot); + } + /** + * GAM Ad Unit + * @type {(string|undefined)} + */ + + + var gamAdUnit = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.adServer.adSlot'); + + if (typeof gamAdUnit === 'string' && gamAdUnit) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0].ext, 'context.data.adslot', gamAdUnit); + } // if storedAuctionResponse has been set, pass SRID + + + if (bidRequest.storedAuctionResponse) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0], 'ext.prebid.storedauctionresponse.id', bidRequest.storedAuctionResponse.toString()); + } // set ext.prebid.auctiontimestamp using auction time + + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0], 'ext.prebid.auctiontimestamp', bidderRequest.auctionStart); + return { + method: 'POST', + url: VIDEO_ENDPOINT, + data: data, + bidRequest: bidRequest + }; + }); + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.singleRequest') !== true) { + // bids are not grouped if single request mode is not enabled + requests = videoRequests.concat(bidRequests.filter(function (bidRequest) { + return bidType(bidRequest) === 'banner'; + }).map(function (bidRequest) { + var bidParams = spec.createSlotParams(bidRequest, bidderRequest); + return { + method: 'GET', + url: FASTLANE_ENDPOINT, + data: spec.getOrderedParams(bidParams).reduce(function (paramString, key) { + var propValue = bidParams[key]; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](propValue) && propValue !== '' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](propValue) ? "".concat(paramString).concat(encodeParam(key, propValue), "&") : paramString; + }, '') + "slots=1&rand=".concat(Math.random()), + bidRequest: bidRequest + }; + })); + } else { + // single request requires bids to be grouped by site id into a single request + // note: utils.groupBy wasn't used because deep property access was needed + var nonVideoRequests = bidRequests.filter(function (bidRequest) { + return bidType(bidRequest) === 'banner'; + }); + var groupedBidRequests = nonVideoRequests.reduce(function (groupedBids, bid) { + (groupedBids[bid.params['siteId']] = groupedBids[bid.params['siteId']] || []).push(bid); + return groupedBids; + }, {}); // fastlane SRA has a limit of 10 slots + + var SRA_BID_LIMIT = 10; // multiple requests are used if bids groups have more than 10 bids + + requests = videoRequests.concat(Object.keys(groupedBidRequests).reduce(function (aggregate, bidGroupKey) { + // for each partioned bidGroup, append a bidRequest to requests list + partitionArray(groupedBidRequests[bidGroupKey], SRA_BID_LIMIT).forEach(function (bidsInGroup) { + var combinedSlotParams = spec.combineSlotUrlParams(bidsInGroup.map(function (bidRequest) { + return spec.createSlotParams(bidRequest, bidderRequest); + })); // SRA request returns grouped bidRequest arrays not a plain bidRequest + + aggregate.push({ + method: 'GET', + url: FASTLANE_ENDPOINT, + data: spec.getOrderedParams(combinedSlotParams).reduce(function (paramString, key) { + var propValue = combinedSlotParams[key]; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](propValue) && propValue !== '' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](propValue) ? "".concat(paramString).concat(encodeParam(key, propValue), "&") : paramString; + }, '') + "slots=".concat(bidsInGroup.length, "&rand=").concat(Math.random()), + bidRequest: bidsInGroup + }); + }); + return aggregate; + }, [])); + } + + return requests; + }, + getOrderedParams: function getOrderedParams(params) { + var containsTgV = /^tg_v/; + var containsTgI = /^tg_i/; + var orderedParams = ['account_id', 'site_id', 'zone_id', 'size_id', 'alt_size_ids', 'p_pos', 'gdpr', 'gdpr_consent', 'us_privacy', 'rp_schain', 'tpid_tdid', 'tpid_liveintent.com', 'tg_v.LIseg', 'dt.id', 'dt.keyv', 'dt.pref', 'rf', 'p_geo.latitude', 'p_geo.longitude', 'kw'].concat(Object.keys(params).filter(function (item) { + return containsTgV.test(item); + })).concat(Object.keys(params).filter(function (item) { + return containsTgI.test(item); + })).concat(['tk_flint', 'x_source.tid', 'x_source.pchain', 'p_screen_res', 'rp_floor', 'rp_secure', 'tk_user_key']); + return orderedParams.concat(Object.keys(params).filter(function (item) { + return orderedParams.indexOf(item) === -1; + })); + }, + + /** + * @summary combines param values from an array of slots into a single semicolon delineated value + * or just one value if they are all the same. + * @param {Object[]} aSlotUrlParams - example [{p1: 'foo', p2: 'test'}, {p2: 'test'}, {p1: 'bar', p2: 'test'}] + * @return {Object} - example {p1: 'foo;;bar', p2: 'test'} + */ + combineSlotUrlParams: function combineSlotUrlParams(aSlotUrlParams) { + // if only have params for one slot, return those params + if (aSlotUrlParams.length === 1) { + return aSlotUrlParams[0]; + } // reduce param values from all slot objects into an array of values in a single object + + + var oCombinedSlotUrlParams = aSlotUrlParams.reduce(function (oCombinedParams, oSlotUrlParams, iIndex) { + Object.keys(oSlotUrlParams).forEach(function (param) { + if (!oCombinedParams.hasOwnProperty(param)) { + oCombinedParams[param] = new Array(aSlotUrlParams.length); // initialize array; + } // insert into the proper element of the array + + + oCombinedParams[param].splice(iIndex, 1, oSlotUrlParams[param]); + }); + return oCombinedParams; + }, {}); // convert arrays into semicolon delimited strings + + var re = new RegExp('^([^;]*)(;\\1)+$'); // regex to test for duplication + + Object.keys(oCombinedSlotUrlParams).forEach(function (param) { + var sValues = oCombinedSlotUrlParams[param].join(';'); // consolidate param values into one value if they are all the same + + var match = sValues.match(re); + oCombinedSlotUrlParams[param] = match ? match[1] : sValues; + }); + return oCombinedSlotUrlParams; + }, + + /** + * @param {BidRequest} bidRequest + * @param {Object} bidderRequest + * @returns {Object} - object key values named and formatted as slot params + */ + createSlotParams: function createSlotParams(bidRequest, bidderRequest) { + bidRequest.startTime = new Date().getTime(); + var params = bidRequest.params; // use rubicon sizes if provided, otherwise adUnit.sizes + + var parsedSizes = parseSizes(bidRequest, 'banner'); + + var _ref = params.latLong || [], + _ref2 = _slicedToArray(_ref, 2), + latitude = _ref2[0], + longitude = _ref2[1]; + + var configIntType = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.int_type'); + var data = { + 'account_id': params.accountId, + 'site_id': params.siteId, + 'zone_id': params.zoneId, + 'size_id': parsedSizes[0], + 'alt_size_ids': parsedSizes.slice(1).join(',') || undefined, + 'rp_floor': (params.floor = parseFloat(params.floor)) > 0.01 ? params.floor : 0.01, + 'rp_secure': '1', + 'tk_flint': "".concat(configIntType || DEFAULT_INTEGRATION, "_v4.2.0"), + 'x_source.tid': bidRequest.transactionId, + 'x_source.pchain': params.pchain, + 'p_screen_res': _getScreenResolution(), + 'tk_user_key': params.userId, + 'p_geo.latitude': isNaN(parseFloat(latitude)) ? undefined : parseFloat(latitude).toFixed(4), + 'p_geo.longitude': isNaN(parseFloat(longitude)) ? undefined : parseFloat(longitude).toFixed(4), + 'tg_fl.eid': bidRequest.code, + 'rf': _getPageUrl(bidRequest, bidderRequest) + }; // If floors module is enabled and we get USD floor back, send it in rp_hard_floor else undfined + + if (typeof bidRequest.getFloor === 'function' && !__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.disableFloors')) { + var floorInfo = bidRequest.getFloor({ + currency: 'USD', + mediaType: 'banner', + size: '*' + }); + data['rp_hard_floor'] = _typeof(floorInfo) === 'object' && floorInfo.currency === 'USD' && !isNaN(parseInt(floorInfo.floor)) ? floorInfo.floor : undefined; + } // add p_pos only if specified and valid + // For SRA we need to explicitly put empty semi colons so AE treats it as empty, instead of copying the latter value + + + data['p_pos'] = params.position === 'atf' || params.position === 'btf' ? params.position : ''; + + if (bidRequest.userId) { + if (bidRequest.userId.tdid) { + data['tpid_tdid'] = bidRequest.userId.tdid; + } // support liveintent ID + + + if (bidRequest.userId.lipb && bidRequest.userId.lipb.lipbid) { + data['tpid_liveintent.com'] = bidRequest.userId.lipb.lipbid; + + if (Array.isArray(bidRequest.userId.lipb.segments) && bidRequest.userId.lipb.segments.length) { + data['tg_v.LIseg'] = bidRequest.userId.lipb.segments.join(','); + } + } // support identityLink (aka LiveRamp) + + + if (bidRequest.userId.idl_env) { + data['tpid_liveramp.com'] = bidRequest.userId.idl_env; + } + } + + if (bidderRequest.gdprConsent) { + // add 'gdpr' only if 'gdprApplies' is defined + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + data['gdpr'] = Number(bidderRequest.gdprConsent.gdprApplies); + } + + data['gdpr_consent'] = bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest.uspConsent) { + data['us_privacy'] = encodeURIComponent(bidderRequest.uspConsent); + } // visitor properties + + + var visitorData = _extends({}, params.visitor, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user')); + + Object.keys(visitorData).forEach(function (key) { + if (visitorData[key] != null && key !== 'keywords') { + data["tg_v.".concat(key)] = _typeof(visitorData[key]) === 'object' && !Array.isArray(visitorData[key]) ? JSON.stringify(visitorData[key]) : visitorData[key].toString(); // initialize array; + } + }); // inventory properties + + var inventoryData = _extends({}, params.inventory, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context')); + + Object.keys(inventoryData).forEach(function (key) { + if (inventoryData[key] != null && key !== 'keywords') { + data["tg_i.".concat(key)] = _typeof(inventoryData[key]) === 'object' && !Array.isArray(inventoryData[key]) ? JSON.stringify(inventoryData[key]) : inventoryData[key].toString(); + } + }); // keywords + + var keywords = (params.keywords || []).concat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user'), 'keywords') || [], __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context'), 'keywords') || []); + data.kw = Array.isArray(keywords) && keywords.length ? keywords.join(',') : ''; + /** + * Prebid AdSlot + * @type {(string|undefined)} + */ + + var pbAdSlot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.pbAdSlot'); + + if (typeof pbAdSlot === 'string' && pbAdSlot) { + data['tg_i.pbadslot'] = pbAdSlot.replace(/^\/+/, ''); + } + /** + * GAM Ad Unit + * @type {(string|undefined)} + */ + + + var gamAdUnit = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.adServer.adSlot'); + + if (typeof gamAdUnit === 'string' && gamAdUnit) { + data['tg_i.dfp_ad_unit_code'] = gamAdUnit.replace(/^\/+/, ''); + } // digitrust properties + + + var digitrustParams = _getDigiTrustQueryParams(bidRequest, 'FASTLANE'); + + _extends(data, digitrustParams); + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true) { + data['coppa'] = 1; + } // if SupplyChain is supplied and contains all required fields + + + if (bidRequest.schain && hasValidSupplyChainParams(bidRequest.schain)) { + data.rp_schain = spec.serializeSupplyChain(bidRequest.schain); + } + + return data; + }, + + /** + * Serializes schain params according to OpenRTB requirements + * @param {Object} supplyChain + * @returns {String} + */ + serializeSupplyChain: function serializeSupplyChain(supplyChain) { + var supplyChainIsValid = hasValidSupplyChainParams(supplyChain); + if (!supplyChainIsValid) return ''; + var ver = supplyChain.ver, + complete = supplyChain.complete, + nodes = supplyChain.nodes; + return "".concat(ver, ",").concat(complete, "!").concat(spec.serializeSupplyChainNodes(nodes)); + }, + + /** + * Properly sorts schain object params + * @param {Array} nodes + * @returns {String} + */ + serializeSupplyChainNodes: function serializeSupplyChainNodes(nodes) { + var nodePropOrder = ['asi', 'sid', 'hp', 'rid', 'name', 'domain']; + return nodes.map(function (node) { + return nodePropOrder.map(function (prop) { + return encodeURIComponent(node[prop] || ''); + }).join(','); + }).join('!'); + }, + + /** + * @param {*} responseObj + * @param {BidRequest|Object.} bidRequest - if request was SRA the bidRequest argument will be a keyed BidRequest array object, + * non-SRA responses return a plain BidRequest object + * @return {Bid[]} An array of bids which + */ + interpretResponse: function interpretResponse(responseObj, _ref3) { + var bidRequest = _ref3.bidRequest; + responseObj = responseObj.body; // check overall response + + if (!responseObj || _typeof(responseObj) !== 'object') { + return []; + } // video response from PBS Java openRTB + + + if (responseObj.seatbid) { + var responseErrors = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](responseObj, 'ext.errors.rubicon'); + + if (Array.isArray(responseErrors) && responseErrors.length > 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Rubicon: Error in video response'); + } + + var bids = []; + responseObj.seatbid.forEach(function (seatbid) { + (seatbid.bid || []).forEach(function (bid) { + var bidObject = { + requestId: bidRequest.bidId, + currency: responseObj.cur || 'USD', + creativeId: bid.crid, + cpm: bid.price || 0, + bidderCode: seatbid.seat, + ttl: 300, + netRevenue: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.netRevenue') !== false, + // If anything other than false, netRev is true + width: bid.w || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.w') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.video.playerWidth'), + height: bid.h || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.h') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.video.playerHeight') + }; + + if (bid.id) { + bidObject.seatBidId = bid.id; + } + + if (bid.dealid) { + bidObject.dealId = bid.dealid; + } + + var serverResponseTimeMs = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](responseObj, 'ext.responsetimemillis.rubicon'); + + if (bidRequest && serverResponseTimeMs) { + bidRequest.serverResponseTimeMs = serverResponseTimeMs; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'ext.prebid.type') === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]) { + bidObject.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + var extPrebidTargeting = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'ext.prebid.targeting'); // If ext.prebid.targeting exists, add it as a property value named 'adserverTargeting' + + if (extPrebidTargeting && _typeof(extPrebidTargeting) === 'object') { + bidObject.adserverTargeting = extPrebidTargeting; + } // try to get cache values from 'response.ext.prebid.cache.js' + // else try 'bid.ext.prebid.targeting' as fallback + + + if (bid.ext.prebid.cache && _typeof(bid.ext.prebid.cache.vastXml) === 'object' && bid.ext.prebid.cache.vastXml.cacheId && bid.ext.prebid.cache.vastXml.url) { + bidObject.videoCacheKey = bid.ext.prebid.cache.vastXml.cacheId; + bidObject.vastUrl = bid.ext.prebid.cache.vastXml.url; + } else if (extPrebidTargeting && extPrebidTargeting.hb_uuid && extPrebidTargeting.hb_cache_host && extPrebidTargeting.hb_cache_path) { + bidObject.videoCacheKey = extPrebidTargeting.hb_uuid; // build url using key and cache host + + bidObject.vastUrl = "https://".concat(extPrebidTargeting.hb_cache_host).concat(extPrebidTargeting.hb_cache_path, "?uuid=").concat(extPrebidTargeting.hb_uuid); + } + + if (bid.adm) { + bidObject.vastXml = bid.adm; + } + + if (bid.nurl) { + bidObject.vastUrl = bid.nurl; + } + + if (!bidObject.vastUrl && bid.nurl) { + bidObject.vastUrl = bid.nurl; + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Rubicon: video response received non-video media type'); + } + + bids.push(bidObject); + }); + }); + return bids; + } + + var ads = responseObj.ads; // video ads array is wrapped in an object + + if (_typeof(bidRequest) === 'object' && !Array.isArray(bidRequest) && bidType(bidRequest) === 'video' && _typeof(ads) === 'object') { + ads = ads[bidRequest.adUnitCode]; + } // check the ad response + + + if (!Array.isArray(ads) || ads.length < 1) { + return []; + } + + return ads.reduce(function (bids, ad, i) { + if (ad.status !== 'ok') { + return bids; + } // associate bidRequests; assuming ads matches bidRequest + + + var associatedBidRequest = Array.isArray(bidRequest) ? bidRequest[i] : bidRequest; + + if (associatedBidRequest && _typeof(associatedBidRequest) === 'object') { + var bid = { + requestId: associatedBidRequest.bidId, + currency: 'USD', + creativeId: ad.creative_id || "".concat(ad.network || '', "-").concat(ad.advertiser || ''), + cpm: ad.cpm || 0, + dealId: ad.deal, + ttl: 300, + // 5 minutes + netRevenue: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.netRevenue') !== false, + // If anything other than false, netRev is true + rubicon: { + advertiserId: ad.advertiser, + networkId: ad.network + }, + meta: { + advertiserId: ad.advertiser, + networkId: ad.network + } + }; + + if (ad.creative_type) { + bid.mediaType = ad.creative_type; + } + + if (ad.creative_type === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]) { + bid.width = associatedBidRequest.params.video.playerWidth; + bid.height = associatedBidRequest.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': associatedBidRequest.adUnitCode + }); + bids.push(bid); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Rubicon: bidRequest undefined at index position:".concat(i), bidRequest, responseObj); + } + + return bids; + }, []).sort(function (adA, adB) { + return (adB.cpm || 0.0) - (adA.cpm || 0.0); + }); + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + if (!hasSynced && syncOptions.iframeEnabled) { + // data is only assigned if params are available to pass to SYNC_ENDPOINT + var params = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + // add 'gdpr' only if 'gdprApplies' is defined + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += "?gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + params += "?gdpr_consent=".concat(gdprConsent.consentString); + } + } + + if (uspConsent) { + params += "".concat(params ? '&' : '?', "us_privacy=").concat(encodeURIComponent(uspConsent)); + } + + hasSynced = true; + return { + type: 'iframe', + url: SYNC_ENDPOINT + params + }; + } + }, + + /** + * Covert bid param types for S2S + * @param {Object} params bid params + * @param {Boolean} isOpenRtb boolean to check openrtb2 protocol + * @return {Object} params bid params + */ + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'accountId': 'number', + 'siteId': 'number', + 'zoneId': 'number' + }, params); + } +}; + +function _getScreenResolution() { + return [window.screen.width, window.screen.height].join('x'); +} + +function _getDigiTrustQueryParams() { + var _digiTrustQueryParams; + + var bidRequest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var endpointName = arguments.length > 1 ? arguments[1] : undefined; + + if (!endpointName || !DIGITRUST_PROP_NAMES[endpointName]) { + return null; + } + + var propNames = DIGITRUST_PROP_NAMES[endpointName]; + + function getDigiTrustId() { + var bidRequestDigitrust = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'userId.digitrustid.data'); + + if (bidRequestDigitrust) { + return bidRequestDigitrust; + } + + var digiTrustUser = window.DigiTrust && (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* 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; + } + + var digiTrustQueryParams = (_digiTrustQueryParams = {}, _defineProperty(_digiTrustQueryParams, propNames.id, digiTrustId.id), _defineProperty(_digiTrustQueryParams, propNames.keyv, digiTrustId.keyv), _digiTrustQueryParams); + + if (propNames.pref) { + digiTrustQueryParams[propNames.pref] = 0; + } + + return digiTrustQueryParams; +} +/** + * @param {BidRequest} bidRequest + * @param bidderRequest + * @returns {string} + */ + + +function _getPageUrl(bidRequest, bidderRequest) { + var pageUrl = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl'); + + if (bidRequest.params.referrer) { + pageUrl = bidRequest.params.referrer; + } else if (!pageUrl) { + pageUrl = bidderRequest.refererInfo.referer; + } + + return bidRequest.params.secure ? pageUrl.replace(/^http:/i, 'https:') : pageUrl; +} + +function _renderCreative(script, impId) { + return "\n\n\n\n
\n\n
\n\n"); +} + +function parseSizes(bid, mediaType) { + var params = bid.params; + + if (mediaType === 'video') { + var size = []; + + if (params.video && params.video.playerWidth && params.video.playerHeight) { + size = [params.video.playerWidth, params.video.playerHeight]; + } else if (Array.isArray(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize')) && bid.mediaTypes.video.playerSize.length === 1) { + size = bid.mediaTypes.video.playerSize[0]; + } 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; + } // deprecated: temp legacy support + + + var sizes = []; + + if (Array.isArray(params.sizes)) { + sizes = params.sizes; + } else if (typeof __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') !== 'undefined') { + sizes = mapSizes(bid.mediaTypes.banner.sizes); + } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) { + sizes = mapSizes(bid.sizes); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Rubicon: no sizes are setup or found'); + } + + return masSizeOrdering(sizes); +} +/** + * @param {Object} data + * @param bidRequest + * @param bidderRequest + */ + + +function appendSiteAppDevice(data, bidRequest, bidderRequest) { + if (!data) return; // ORTB specifies app OR site + + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + data.app = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app'); + } else { + data.site = { + page: _getPageUrl(bidRequest, bidderRequest) + }; + } + + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device')) === 'object') { + data.device = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device'); + } // Add language to site and device objects if there + + + if (bidRequest.params.video.language) { + ['site', 'device'].forEach(function (param) { + if (data[param]) { + data[param].content = _extends({ + language: bidRequest.params.video.language + }, data[param].content); + } + }); + } +} +/** + * @param {Object} data + * @param {BidRequest} bidRequest + */ + + +function addVideoParameters(data, bidRequest) { + if (_typeof(data.imp[0].video) === 'object' && data.imp[0].video.skip === undefined) { + data.imp[0].video.skip = bidRequest.params.video.skip; + } + + if (_typeof(data.imp[0].video) === 'object' && data.imp[0].video.skipafter === undefined) { + data.imp[0].video.skipafter = bidRequest.params.video.skipdelay; + } // video.pos can already be specified by adunit.mediatypes.video.pos. + // but if not, it might be specified in the params + + + if (_typeof(data.imp[0].video) === 'object' && data.imp[0].video.pos === undefined) { + if (bidRequest.params.position === 'atf') { + data.imp[0].video.pos = 1; + } else if (bidRequest.params.position === 'btf') { + data.imp[0].video.pos = 3; + } + } + + var size = parseSizes(bidRequest, 'video'); + data.imp[0].video.w = size[0]; + data.imp[0].video.h = size[1]; +} +/** + * @param sizes + * @returns {*} + */ + + +function mapSizes(sizes) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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; + }, []); +} +/** + * Test if bid has mediaType or mediaTypes set for video. + * Also makes sure the video object is present in the rubicon bidder params + * @param {BidRequest} bidRequest + * @returns {boolean} + */ + + +function hasVideoMediaType(bidRequest) { + if (_typeof(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.video')) !== 'object') { + return false; + } + + return typeof __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */])) !== 'undefined'; +} +/** + * Determine bidRequest mediaType + * @param bid the bid to test + * @param log whether we should log errors/warnings for invalid bids + * @returns {string|undefined} Returns 'video' or 'banner' if resolves to a type, or undefined otherwise (invalid). + */ + +function bidType(bid) { + var log = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + // Is it considered video ad unit by rubicon + if (hasVideoMediaType(bid)) { + // Removed legacy mediaType support. new way using mediaTypes.video object is now required + // We require either context as instream or outstream + if (['outstream', 'instream'].indexOf(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], ".context"))) === -1) { + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: mediaTypes.video.context must be outstream or instream'); + } + + return; + } // we require playerWidth and playerHeight to come from one of params.playerWidth/playerHeight or mediaTypes.video.playerSize or adUnit.sizes + + + if (parseSizes(bid, 'video').length < 2) { + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: could not determine the playerSize of the video'); + } + + return; + } + + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('Rubicon: making video request for adUnit', bid.adUnitCode); + } + + return 'video'; + } else { + // we require banner sizes to come from one of params.sizes or mediaTypes.banner.sizes or adUnit.sizes, in that order + // if we cannot determine them, we reject it! + if (parseSizes(bid, 'banner').length === 0) { + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: could not determine the sizes for banner request'); + } + + return; + } // everything looks good for banner so lets do it + + + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('Rubicon: making banner request for adUnit', bid.adUnitCode); + } + + return 'banner'; + } +} + +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; + }); +} +function determineRubiconVideoSizeId(bid) { + // If we have size_id in the bid then use it + var rubiconSizeId = parseInt(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.size_id')); + + if (!isNaN(rubiconSizeId)) { + return rubiconSizeId; + } // otherwise 203 for outstream and 201 for instream + // When this function is used we know it has to be one of outstream or instream + + + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], ".context")) === 'outstream' ? 203 : 201; +} +/** + * @param {PrebidConfig} config + * @returns {{ranges: {ranges: Object[]}}} + */ + +function getPriceGranularity(config) { + return { + ranges: { + low: [{ + max: 5.00, + increment: 0.50 + }], + medium: [{ + max: 20.00, + increment: 0.10 + }], + high: [{ + max: 20.00, + increment: 0.01 + }], + auto: [{ + max: 5.00, + increment: 0.05 + }, { + min: 5.00, + max: 10.00, + increment: 0.10 + }, { + min: 10.00, + max: 20.00, + increment: 0.50 + }], + dense: [{ + max: 3.00, + increment: 0.01 + }, { + min: 3.00, + max: 8.00, + increment: 0.05 + }, { + min: 8.00, + max: 20.00, + increment: 0.50 + }], + custom: config.getConfig('customPriceBucket') && config.getConfig('customPriceBucket').buckets + }[config.getConfig('priceGranularity')] + }; +} // Function to validate the required video params + +function hasValidVideoParams(bid) { + var isValid = true; // incase future javascript changes the string represenation of the array or number classes! + + var arrayType = Object.prototype.toString.call([]); + var numberType = Object.prototype.toString.call(0); // required params and their associated object type + + var requiredParams = { + mimes: arrayType, + protocols: arrayType, + maxduration: numberType, + linearity: numberType, + api: arrayType + }; // loop through each param and verify it has the correct + + Object.keys(requiredParams).forEach(function (param) { + if (Object.prototype.toString.call(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.' + param)) !== requiredParams[param]) { + isValid = false; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: mediaTypes.video.' + param + ' is required and must be of type: ' + requiredParams[param]); + } + }); + return isValid; +} +/** + * Make sure the required params are present + * @param {Object} schain + * @param {Bool} + */ + +function hasValidSupplyChainParams(schain) { + var isValid = false; + var requiredFields = ['asi', 'sid', 'hp']; + if (!schain.nodes) return isValid; + isValid = schain.nodes.reduce(function (status, node) { + if (!status) return status; + return requiredFields.every(function (field) { + return node[field]; + }); + }, true); + if (!isValid) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: required schain params missing'); + return isValid; +} +/** + * Creates a URL key value param, encoding the + * param unless the key is schain + * @param {String} key + * @param {String} param + * @returns {String} + */ + +function encodeParam(key, param) { + if (key === 'rp_schain') return "rp_schain=".concat(param); + return "".concat(key, "=").concat(encodeURIComponent(param)); +} +/** + * split array into multiple arrays of defined size + * @param {Array} array + * @param {number} size + * @returns {Array} + */ + +function partitionArray(array, size) { + return array.map(function (e, i) { + return i % size === 0 ? array.slice(i, i + size) : null; + }).filter(function (e) { + return e; + }); +} + +var hasSynced = false; +function resetUserSync() { + hasSynced = false; +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[664]); +pbjsChunk([80],{ + +/***/ 754: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(755); + + +/***/ }), + +/***/ 755: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tripleliftAdapterSpec", function() { return tripleliftAdapterSpec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + +var BIDDER_CODE = 'triplelift'; +var STR_ENDPOINT = 'https://tlx.3lift.com/header/auction?'; +var gdprApplies = true; +var consentString = null; +var tripleliftAdapterSpec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return typeof bid.params.inventoryCode !== 'undefined'; + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var tlCall = STR_ENDPOINT; + + var data = _buildPostBody(bidRequests); + + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'lib', 'prebid'); + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'v', "4.2.0"); + + if (bidderRequest && bidderRequest.refererInfo) { + var referrer = bidderRequest.refererInfo.referer; + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'referrer', referrer); + } + + if (bidderRequest && bidderRequest.timeout) { + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'tmax', bidderRequest.timeout); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + if (typeof bidderRequest.gdprConsent.gdprApplies !== 'undefined') { + gdprApplies = bidderRequest.gdprConsent.gdprApplies; + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'gdpr', gdprApplies.toString()); + } + + if (typeof bidderRequest.gdprConsent.consentString !== 'undefined') { + consentString = bidderRequest.gdprConsent.consentString; + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'cmp_cs', consentString); + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'us_privacy', bidderRequest.uspConsent); + } + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') === true) { + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'coppa', true); + } + + if (tlCall.lastIndexOf('&') === tlCall.length - 1) { + tlCall = tlCall.substring(0, tlCall.length - 1); + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]('tlCall request built: ' + tlCall); + return { + method: 'POST', + url: tlCall, + data: data, + bidderRequest: bidderRequest + }; + }, + interpretResponse: function interpretResponse(serverResponse, _ref) { + var bidderRequest = _ref.bidderRequest; + var bids = serverResponse.body.bids || []; + return bids.map(function (bid) { + return _buildResponseObject(bidderRequest, bid); + }); + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, usPrivacy) { + var syncType = _getSyncType(syncOptions); + + if (!syncType) return; + var syncEndpoint = 'https://eb2.3lift.com/sync?'; + + if (syncType === 'image') { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'px', 1); + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'src', 'prebid'); + } + + if (consentString !== null) { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'gdpr', gdprApplies); + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'cmp_cs', consentString); + } + + if (usPrivacy) { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'us_privacy', usPrivacy); + } + + return [{ + type: syncType, + url: syncEndpoint + }]; + } +}; + +function _getSyncType(syncOptions) { + if (!syncOptions) return; + if (syncOptions.iframeEnabled) return 'iframe'; + if (syncOptions.pixelEnabled) return 'image'; +} + +function _buildPostBody(bidRequests) { + var data = {}; + var schain = bidRequests[0].schain; + data.imp = bidRequests.map(function (bid, index) { + return { + id: index, + tagid: bid.params.inventoryCode, + floor: _getFloor(bid), + banner: { + format: _sizes(bid.sizes) + } + }; + }); + var eids = [].concat(_toConsumableArray(getUnifiedIdEids(bidRequests)), _toConsumableArray(getIdentityLinkEids(bidRequests)), _toConsumableArray(getCriteoEids(bidRequests))); + + if (eids.length > 0) { + data.user = { + ext: { + eids: eids + } + }; + } + + if (schain) { + data.ext = { + schain: schain + }; + } + + return data; +} + +function _getFloor(bid) { + var floor = null; + + if (typeof bid.getFloor === 'function') { + var floorInfo = bid.getFloor({ + currency: 'USD', + mediaType: 'banner', + size: _sizes(bid.sizes) + }); + + if (_typeof(floorInfo) === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) { + floor = parseFloat(floorInfo.floor); + } + } + + return floor !== null ? floor : bid.params.floor; +} + +function getUnifiedIdEids(bidRequests) { + return getEids(bidRequests, 'tdid', 'adserver.org', 'TDID'); +} + +function getIdentityLinkEids(bidRequests) { + return getEids(bidRequests, 'idl_env', 'liveramp.com', 'idl'); +} + +function getCriteoEids(bidRequests) { + return getEids(bidRequests, 'criteoId', 'criteo.com', 'criteoId'); +} + +function getEids(bidRequests, type, source, rtiPartner) { + return bidRequests.map(getUserId(type)) // bids -> userIds of a certain type + .filter(function (x) { + return !!x; + }) // filter out null userIds + .map(formatEid(source, rtiPartner)); // userIds -> eid objects +} + +function getUserId(type) { + return function (bid) { + return bid && bid.userId && bid.userId[type]; + }; +} + +function formatEid(source, rtiPartner) { + return function (id) { + return { + source: source, + uids: [{ + id: id, + ext: { + rtiPartner: rtiPartner + } + }] + }; + }; +} + +function _sizes(sizeArray) { + var sizes = sizeArray.filter(_isValidSize); + return sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }); +} + +function _isValidSize(size) { + return size.length === 2 && typeof size[0] === 'number' && typeof size[1] === 'number'; +} + +function _buildResponseObject(bidderRequest, bid) { + var bidResponse = {}; + var width = bid.width || 1; + var height = bid.height || 1; + var dealId = bid.deal_id || ''; + var creativeId = bid.crid || ''; + + if (bid.cpm != 0 && bid.ad) { + bidResponse = { + requestId: bidderRequest.bids[bid.imp_id].bidId, + cpm: bid.cpm, + width: width, + height: height, + netRevenue: true, + ad: bid.ad, + creativeId: creativeId, + dealId: dealId, + currency: 'USD', + ttl: 300, + tl_source: bid.tl_source + }; + } + + ; + return bidResponse; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(tripleliftAdapterSpec); + +/***/ }) + +},[754]); +pbjsChunk([74],{ + +/***/ 768: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(769); + + +/***/ }), + +/***/ 769: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/** + * Adapter to send bids to Undertone + */ + + + +var BIDDER_CODE = 'undertone'; +var URL = 'https://hb.undertone.com/hb'; +var FRAME_USER_SYNC = 'https://cdn.undertone.com/js/usersync.html'; +var PIXEL_USER_SYNC_1 = 'https://usr.undertone.com/userPixel/syncOne?id=1&of=2'; +var PIXEL_USER_SYNC_2 = 'https://usr.undertone.com/userPixel/syncOne?id=2&of=2'; + +function getCanonicalUrl() { + try { + var doc = window.top.document; + var element = doc.querySelector("link[rel='canonical']"); + + if (element !== null) { + return element.href; + } + } catch (e) {} + + return null; +} + +function extractDomainFromHost(pageHost) { + var domain = null; + + try { + var domains = /[-\w]+\.([-\w]+|[-\w]{3,}|[-\w]{1,3}\.[-\w]{2})$/i.exec(pageHost); + + if (domains != null && domains.length > 0) { + domain = domains[0]; + + for (var i = 1; i < domains.length; i++) { + if (domains[i].length > domain.length) { + domain = domains[i]; + } + } + } + } catch (e) { + domain = null; + } + + return domain; +} + +function getGdprQueryParams(gdprConsent) { + if (!gdprConsent) { + return null; + } + + var gdpr = gdprConsent.gdprApplies ? '1' : '0'; + var gdprstr = gdprConsent.consentString ? gdprConsent.consentString : ''; + return "gdpr=".concat(gdpr, "&gdprstr=").concat(gdprstr); +} + +function getBannerCoords(id) { + var element = document.getElementById(id); + var left = -1; + var top = -1; + + if (element) { + left = element.offsetLeft; + top = element.offsetTop; + var parent = element.offsetParent; + + if (parent) { + left += parent.offsetLeft; + top += parent.offsetTop; + } + + return [left, top]; + } else { + return null; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (bid && bid.params && bid.params.publisherId) { + bid.params.publisherId = parseInt(bid.params.publisherId); + return true; + } + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var vw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); + var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); + var pageSizeArray = vw == 0 || vh == 0 ? null : [vw, vh]; + var payload = { + 'x-ut-hb-params': [], + 'commons': { + 'adapterVersion': "4.2.0", + 'uids': validBidRequests[0].userId, + 'pageSize': pageSizeArray + } + }; + var referer = bidderRequest.refererInfo.referer; + var hostname = Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"])(referer).hostname; + var domain = extractDomainFromHost(hostname); + var pageUrl = getCanonicalUrl() || referer; + var pubid = validBidRequests[0].params.publisherId; + var reqUrl = "".concat(URL, "?pid=").concat(pubid, "&domain=").concat(domain); + var gdprParams = getGdprQueryParams(bidderRequest.gdprConsent); + + if (gdprParams) { + reqUrl += "&".concat(gdprParams); + } + + if (bidderRequest.uspConsent) { + reqUrl += "&ccpa=".concat(bidderRequest.uspConsent); + } + + validBidRequests.map(function (bidReq) { + var bid = { + bidRequestId: bidReq.bidId, + coordinates: getBannerCoords(bidReq.adUnitCode), + hbadaptor: 'prebid', + url: pageUrl, + domain: domain, + placementId: bidReq.params.placementId != undefined ? bidReq.params.placementId : null, + publisherId: bidReq.params.publisherId, + sizes: bidReq.sizes, + params: bidReq.params + }; + var videoMediaType = Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'mediaTypes.video'); + + if (videoMediaType) { + bid.video = { + playerSize: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'mediaTypes.video.playerSize') || null, + streamType: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'mediaTypes.video.context') || null, + playbackMethod: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'params.video.playbackMethod') || null, + maxDuration: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'params.video.maxDuration') || null, + skippable: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'params.video.skippable') || null + }; + bid.mediaType = 'video'; + } + + payload['x-ut-hb-params'].push(bid); + }); + return { + method: 'POST', + url: reqUrl, + withCredentials: true, + data: JSON.stringify(payload) + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bids = []; + var body = serverResponse.body; + + if (body && Array.isArray(body) && body.length > 0) { + body.forEach(function (bidRes) { + if (bidRes.ad && bidRes.cpm > 0) { + var bid = { + requestId: bidRes.bidRequestId, + cpm: bidRes.cpm, + width: bidRes.width, + height: bidRes.height, + creativeId: bidRes.adId, + currency: bidRes.currency, + netRevenue: bidRes.netRevenue, + ttl: bidRes.ttl || 360 + }; + + if (bidRes.mediaType && bidRes.mediaType === 'video') { + bid.vastXml = bidRes.ad; + bid.mediaType = bidRes.mediaType; + } else { + bid.ad = bidRes.ad; + } + + bids.push(bid); + } + }); + } + + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, usPrivacy) { + var syncs = []; + var gdprParams = getGdprQueryParams(gdprConsent); + var iframePrivacyParams = ''; + var pixelPrivacyParams = ''; + + if (gdprParams) { + iframePrivacyParams += "?".concat(gdprParams); + pixelPrivacyParams += "&".concat(gdprParams); + } + + if (usPrivacy) { + if (iframePrivacyParams != '') { + iframePrivacyParams += '&'; + } else { + iframePrivacyParams += '?'; + } + + iframePrivacyParams += "ccpa=".concat(usPrivacy); + pixelPrivacyParams += "&ccpa=".concat(usPrivacy); + } + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: FRAME_USER_SYNC + iframePrivacyParams + }); + } else if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: PIXEL_USER_SYNC_1 + pixelPrivacyParams + }, { + type: 'image', + url: PIXEL_USER_SYNC_2 + pixelPrivacyParams + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[768]); +pbjs.processQueue(); \ No newline at end of file diff --git a/build/dist/prebidServerBidAdapter.js b/build/dist/prebidServerBidAdapter.js new file mode 100644 index 00000000000..1525fbb8256 --- /dev/null +++ b/build/dist/prebidServerBidAdapter.js @@ -0,0 +1,1101 @@ +pbjsChunk([25],{ + +/***/ 591: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(592); + + +/***/ }), + +/***/ 592: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["resetSyncedStatus"] = resetSyncedStatus; +/* harmony export (immutable) */ __webpack_exports__["resetWurlMap"] = resetWurlMap; +/* harmony export (immutable) */ __webpack_exports__["PrebidServer"] = PrebidServer; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapter_js__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9__src_events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__config_js__ = __webpack_require__(593); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js__); +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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + + + + + + + + + +var getConfig = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig; +var TYPE = __WEBPACK_IMPORTED_MODULE_3__src_constants_json__["S2S"].SRC; +var _synced = false; +var DEFAULT_S2S_TTL = 60; +var DEFAULT_S2S_CURRENCY = 'USD'; +var DEFAULT_S2S_NETREVENUE = true; + +var _s2sConfig; +/** + * @typedef {Object} AdapterOptions + * @summary s2sConfig parameter that adds arguments to resulting OpenRTB payload that goes to Prebid Server + * @example + * // example of multiple bidder configuration + * pbjs.setConfig({ + * s2sConfig: { + * adapterOptions: { + * rubicon: {singleRequest: false} + * appnexus: {key: "value"} + * } + * } + * }); + */ + +/** + * @typedef {Object} S2SDefaultConfig + * @property {boolean} enabled + * @property {number} timeout + * @property {number} maxBids + * @property {string} adapter + * @property {AdapterOptions} adapterOptions + */ + +/** + * @type {S2SDefaultConfig} + */ + + +var s2sDefaultConfig = { + enabled: false, + timeout: 1000, + maxBids: 1, + adapter: 'prebidServer', + adapterOptions: {}, + syncUrlModifier: {} +}; +__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].setDefaults({ + 's2sConfig': s2sDefaultConfig +}); +/** + * 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 {number} [defaultTtl] ttl for S2S bidders when pbs does not return a ttl on the response - defaults to 60` + * @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 {Object} [extPrebid] properties will be merged into request.ext.prebid + * @property {AdapterOptions} [adapterOptions] adds arguments to resulting OpenRTB payload to Prebid Server + */ + +function setS2sConfig(options) { + if (options.defaultVendor) { + var vendor = options.defaultVendor; + var optionKeys = Object.keys(options); + + if (__WEBPACK_IMPORTED_MODULE_11__config_js__["a" /* S2S_VENDORS */][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(__WEBPACK_IMPORTED_MODULE_11__config_js__["a" /* S2S_VENDORS */][vendor]).forEach(function (vendorKey) { + if (s2sDefaultConfig[vendorKey] === options[vendorKey] || !__WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default()(optionKeys, vendorKey)) { + options[vendorKey] = __WEBPACK_IMPORTED_MODULE_11__config_js__["a" /* S2S_VENDORS */][vendor][vendorKey]; + } + }); + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["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 (!__WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default()(keys, key)) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](key + ' missing in server to server config'); + return true; + } + + return false; + }).length > 0) { + return; + } + + _s2sConfig = options; +} + +getConfig('s2sConfig', function (_ref) { + var s2sConfig = _ref.s2sConfig; + return setS2sConfig(s2sConfig); +}); +/** + * resets the _synced variable back to false, primiarily used for testing purposes +*/ + +function resetSyncedStatus() { + _synced = false; +} +/** + * @param {Array} bidderCodes list of bidders to request user syncs for. + */ + +function queueSync(bidderCodes, gdprConsent, uspConsent) { + if (_synced) { + return; + } + + _synced = true; + var payload = { + uuid: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["generateUUID"](), + bidders: bidderCodes, + account: _s2sConfig.accountId + }; + var userSyncLimit = _s2sConfig.userSyncLimit; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isNumber"](userSyncLimit) && userSyncLimit > 0) { + payload['limit'] = userSyncLimit; + } + + if (gdprConsent) { + // only populate gdpr field if we know CMP returned consent information (ie didn't timeout or have an error) + if (typeof gdprConsent.consentString !== 'undefined') { + payload.gdpr = gdprConsent.gdprApplies ? 1 : 0; + } // attempt to populate gdpr_consent if we know gdprApplies or it may apply + + + if (gdprConsent.gdprApplies !== false) { + payload.gdpr_consent = gdprConsent.consentString; + } + } // US Privace (CCPA) support + + + if (uspConsent) { + payload.us_privacy = uspConsent; + } + + var jsonPayload = JSON.stringify(payload); + Object(__WEBPACK_IMPORTED_MODULE_12__src_ajax_js__["a" /* ajax */])(_s2sConfig.syncEndpoint, function (response) { + try { + response = JSON.parse(response); + doAllSyncs(response.bidder_status); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](e); + } + }, jsonPayload, { + contentType: 'text/plain', + withCredentials: true + }); +} + +function doAllSyncs(bidders) { + if (bidders.length === 0) { + return; + } + + var thisSync = bidders.pop(); + + if (thisSync.no_cookie) { + doPreBidderSync(thisSync.usersync.type, thisSync.usersync.url, thisSync.bidder, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["bind"].call(doAllSyncs, null, bidders)); + } else { + doAllSyncs(bidders); + } +} +/** + * Modify the cookie sync url from prebid server to add new params. + * + * @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 + * @param {function} done an exit callback; to signify this pixel has either: finished rendering or something went wrong + */ + + +function doPreBidderSync(type, url, bidder, done) { + if (_s2sConfig.syncUrlModifier && typeof _s2sConfig.syncUrlModifier[bidder] === 'function') { + var newSyncUrl = _s2sConfig.syncUrlModifier[bidder](type, url, bidder); + + doBidderSync(type, newSyncUrl, bidder, done); + } else { + doBidderSync(type, url, bidder, done); + } +} +/** + * 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 + * @param {function} done an exit callback; to signify this pixel has either: finished rendering or something went wrong + */ + + +function doBidderSync(type, url, bidder, done) { + if (!url) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("No sync url for bidder \"".concat(bidder, "\": ").concat(url)); + done(); + } else if (type === 'image' || type === 'redirect') { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]("Invoking image pixel user sync for bidder: \"".concat(bidder, "\"")); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["triggerPixel"](url, done); + } else if (type == 'iframe') { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]("Invoking iframe user sync for bidder: \"".concat(bidder, "\"")); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["insertUserSyncIframe"](url, done); + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("User sync type \"".concat(type, "\" not supported for bidder: \"").concat(bidder, "\"")); + done(); + } +} +/** + * Do client-side syncs for bidders. + * + * @param {Array} bidders a list of bidder names + */ + + +function doClientSideSyncs(bidders) { + bidders.forEach(function (bidder) { + var clientAdapter = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].getBidAdapter(bidder); + + if (clientAdapter && clientAdapter.registerSyncs) { + clientAdapter.registerSyncs([]); + } + }); +} + +function _appendSiteAppDevice(request, pageUrl) { + if (!request) return; // ORTB specifies app OR site + + if (_typeof(__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + request.app = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('app'); + request.app.publisher = { + id: _s2sConfig.accountId + }; + } else { + request.site = {}; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('site'))) { + request.site = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('site'); + } // set publisher.id if not already defined + + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](request.site, 'publisher.id')) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request.site, 'publisher.id', _s2sConfig.accountId); + } // set site.page if not already defined + + + if (!request.site.page) { + request.site.page = pageUrl; + } + } + + if (_typeof(__WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('device')) === 'object') { + request.device = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('device'); + } + + if (!request.device) { + request.device = {}; + } + + if (!request.device.w) { + request.device.w = window.innerWidth; + } + + if (!request.device.h) { + request.device.h = window.innerHeight; + } +} + +function addBidderFirstPartyDataToRequest(request) { + var bidderConfig = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getBidderConfig(); + var fpdConfigs = Object.keys(bidderConfig).reduce(function (acc, bidder) { + var currBidderConfig = bidderConfig[bidder]; + + if (currBidderConfig.fpd) { + var fpd = {}; + + if (currBidderConfig.fpd.context) { + fpd.site = currBidderConfig.fpd.context; + } + + if (currBidderConfig.fpd.user) { + fpd.user = currBidderConfig.fpd.user; + } + + acc.push({ + bidders: [bidder], + config: { + fpd: fpd + } + }); + } + + return acc; + }, []); + + if (fpdConfigs.length) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'ext.prebid.bidderconfig', fpdConfigs); + } +} // https://iabtechlab.com/wp-content/uploads/2016/07/OpenRTB-Native-Ads-Specification-Final-1.2.pdf#page=40 + + +var nativeDataIdMap = { + sponsoredBy: 1, + // sponsored + body: 2, + // desc + rating: 3, + likes: 4, + downloads: 5, + price: 6, + salePrice: 7, + phone: 8, + address: 9, + body2: 10, + // desc2 + cta: 12 // ctatext + +}; +var nativeDataNames = Object.keys(nativeDataIdMap); +var nativeImgIdMap = { + icon: 1, + image: 3 +}; +var nativeEventTrackerEventMap = { + impression: 1, + 'viewable-mrc50': 2, + 'viewable-mrc100': 3, + 'viewable-video50': 4 +}; +var nativeEventTrackerMethodMap = { + img: 1, + js: 2 +}; // enable reverse lookup + +[nativeDataIdMap, nativeImgIdMap, nativeEventTrackerEventMap, nativeEventTrackerMethodMap].forEach(function (map) { + Object.keys(map).forEach(function (key) { + map[map[key]] = key; + }); +}); +/* + * Protocol spec for OpenRTB endpoint + * e.g., https:///v1/openrtb2/auction + */ + +var bidIdMap = {}; +var nativeAssetCache = {}; // store processed native params to preserve + +/** + * map wurl to auction id and adId for use in the BID_WON event + */ + +var wurlMap = {}; +/** + * @param {string} auctionId + * @param {string} adId generated value set to bidObject.adId by bidderFactory Bid() + * @param {string} wurl events.winurl passed from prebidServer as wurl + */ + +function addWurl(auctionId, adId, wurl) { + if ([auctionId, adId].every(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])) { + wurlMap["".concat(auctionId).concat(adId)] = wurl; + } +} +/** + * @param {string} auctionId + * @param {string} adId generated value set to bidObject.adId by bidderFactory Bid() + */ + + +function removeWurl(auctionId, adId) { + if ([auctionId, adId].every(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])) { + wurlMap["".concat(auctionId).concat(adId)] = undefined; + } +} +/** + * @param {string} auctionId + * @param {string} adId generated value set to bidObject.adId by bidderFactory Bid() + * @return {(string|undefined)} events.winurl which was passed as wurl + */ + + +function getWurl(auctionId, adId) { + if ([auctionId, adId].every(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])) { + return wurlMap["".concat(auctionId).concat(adId)]; + } +} +/** + * remove all cached wurls + */ + + +function resetWurlMap() { + wurlMap = {}; +} +var OPEN_RTB_PROTOCOL = { + buildRequest: function buildRequest(s2sBidRequest, bidRequests, adUnits) { + var imps = []; + var aliases = {}; + var firstBidRequest = bidRequests[0]; // transform ad unit into array of OpenRTB impression objects + + adUnits.forEach(function (adUnit) { + var nativeParams = Object(__WEBPACK_IMPORTED_MODULE_7__src_native_js__["g" /* processNativeAdUnitParams */])(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'mediaTypes.native')); + var nativeAssets; + + if (nativeParams) { + try { + nativeAssets = nativeAssetCache[adUnit.code] = Object.keys(nativeParams).reduce(function (assets, type) { + var params = nativeParams[type]; + + function newAsset(obj) { + return _extends({ + required: params.required ? 1 : 0 + }, obj ? __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"](obj) : {}); + } + + switch (type) { + case 'image': + case 'icon': + var imgTypeId = nativeImgIdMap[type]; + var asset = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"]({ + type: imgTypeId, + w: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'sizes.0'), + h: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'sizes.1'), + wmin: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'aspect_ratios.0.min_width'), + hmin: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](params, 'aspect_ratios.0.min_height') + }); + + if (!(asset.w && asset.h || asset.hmin && asset.wmin)) { + throw 'invalid img sizes (must provide sizes or min_height & min_width if using aspect_ratios)'; + } + + if (Array.isArray(params.aspect_ratios)) { + // pass aspect_ratios as ext data I guess? + asset.ext = { + aspectratios: params.aspect_ratios.map(function (ratio) { + return "".concat(ratio.ratio_width, ":").concat(ratio.ratio_height); + }) + }; + } + + assets.push(newAsset({ + img: asset + })); + break; + + case 'title': + if (!params.len) { + throw 'invalid title.len'; + } + + assets.push(newAsset({ + title: { + len: params.len + } + })); + break; + + default: + var dataAssetTypeId = nativeDataIdMap[type]; + + if (dataAssetTypeId) { + assets.push(newAsset({ + data: { + type: dataAssetTypeId, + len: params.len + } + })); + } + + } + + return assets; + }, []); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('error creating native request: ' + String(e)); + } + } + + var videoParams = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'mediaTypes.video'); + var bannerParams = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'mediaTypes.banner'); + adUnit.bids.forEach(function (bid) { + // 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 + bidIdMap["".concat(adUnit.code).concat(bid.bidder)] = bid.bid_id; // check for and store valid aliases to add to the request + + if (__WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].aliasRegistry[bid.bidder]) { + aliases[bid.bidder] = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].aliasRegistry[bid.bidder]; + } + }); + var mediaTypes = {}; + + if (bannerParams && bannerParams.sizes) { + var sizes = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseSizesInput"](bannerParams.sizes); // get banner sizes in form [{ w: , h: }, ...] + + 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 + }; + }); + mediaTypes['banner'] = { + format: format + }; + } + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](videoParams)) { + if (videoParams.context === 'outstream' && !adUnit.renderer) { + // Don't push oustream w/o renderer to request object. + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('Outstream bid without renderer cannot be sent to Prebid Server.'); + } else { + mediaTypes['video'] = videoParams; + } + } + + if (nativeAssets) { + try { + mediaTypes['native'] = { + request: JSON.stringify({ + // TODO: determine best way to pass these and if we allow defaults + context: 1, + plcmttype: 1, + eventtrackers: [{ + event: 1, + methods: [1] + }], + // TODO: figure out how to support privacy field + // privacy: int + assets: nativeAssets + }), + ver: '1.2' + }; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('error creating native request: ' + String(e)); + } + } // get bidder params in form { : {...params} } + + + var ext = adUnit.bids.reduce(function (acc, bid) { + var adapter = __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].bidderRegistry[bid.bidder]; + + if (adapter && adapter.getSpec().transformBidParams) { + bid.params = adapter.getSpec().transformBidParams(bid.params, true); + } + + acc[bid.bidder] = _s2sConfig.adapterOptions && _s2sConfig.adapterOptions[bid.bidder] ? _extends({}, bid.params, _s2sConfig.adapterOptions[bid.bidder]) : bid.params; + return acc; + }, {}); + var imp = { + id: adUnit.code, + ext: ext, + secure: _s2sConfig.secure + }; + /** + * Prebid AdSlot + * @type {(string|undefined)} + */ + + var pbAdSlot = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'fpd.context.pbAdSlot'); + + if (typeof pbAdSlot === 'string' && pbAdSlot) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](imp, 'ext.context.data.pbadslot', pbAdSlot); + } + /** + * GAM Ad Unit + * @type {(string|undefined)} + */ + + + var gamAdUnit = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adUnit, 'fpd.context.adServer.adSlot'); + + if (typeof gamAdUnit === 'string' && gamAdUnit) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](imp, 'ext.context.data.adslot', gamAdUnit); + } + + _extends(imp, mediaTypes); // if storedAuctionResponse has been set, pass SRID + + + var storedAuctionResponseBid = __WEBPACK_IMPORTED_MODULE_13_core_js_pure_features_array_find_js___default()(firstBidRequest.bids, function (bid) { + return bid.adUnitCode === adUnit.code && bid.storedAuctionResponse; + }); + + if (storedAuctionResponseBid) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](imp, 'ext.prebid.storedauctionresponse.id', storedAuctionResponseBid.storedAuctionResponse.toString()); + } + + if (imp.banner || imp.video || imp.native) { + imps.push(imp); + } + }); + + if (!imps.length) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('Request to Prebid Server rejected due to invalid media type(s) in adUnit.'); + return; + } + + var request = { + id: s2sBidRequest.tid, + source: { + tid: s2sBidRequest.tid + }, + tmax: _s2sConfig.timeout, + imp: imps, + test: getConfig('debug') ? 1 : 0, + ext: { + prebid: { + // set ext.prebid.auctiontimestamp with the auction timestamp. Data type is long integer. + auctiontimestamp: firstBidRequest.auctionStart, + targeting: { + // includewinners is always true for openrtb + includewinners: true, + // includebidderkeys always false for openrtb + includebidderkeys: false + } + } + } + }; // s2sConfig video.ext.prebid is passed through openrtb to PBS + + if (_s2sConfig.extPrebid && _typeof(_s2sConfig.extPrebid) === 'object') { + request.ext.prebid = _extends(request.ext.prebid, _s2sConfig.extPrebid); + } + /** + * @type {(string[]|string|undefined)} - OpenRTB property 'cur', currencies available for bids + */ + + + var adServerCur = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'); + + if (adServerCur && typeof adServerCur === 'string') { + // if the value is a string, wrap it with an array + request.cur = [adServerCur]; + } else if (Array.isArray(adServerCur) && adServerCur.length) { + // if it's an array, get the first element + request.cur = [adServerCur[0]]; + } + + _appendSiteAppDevice(request, firstBidRequest.refererInfo.referer); // pass schain object if it is present + + + var schain = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequests, '0.bids.0.schain'); + + if (schain) { + request.source.ext = { + schain: schain + }; + } + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](aliases)) { + request.ext.prebid.aliases = aliases; + } + + var bidUserIdAsEids = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bidRequests, '0.bids.0.userIdAsEids'); + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](bidUserIdAsEids) && bidUserIdAsEids.length > 0) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.eids', bidUserIdAsEids); + } + + if (bidRequests) { + if (firstBidRequest.gdprConsent) { + // note - gdprApplies & consentString may be undefined in certain use-cases for consentManagement module + var gdprApplies; + + if (typeof firstBidRequest.gdprConsent.gdprApplies === 'boolean') { + gdprApplies = firstBidRequest.gdprConsent.gdprApplies ? 1 : 0; + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.ext.gdpr', gdprApplies); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.consent', firstBidRequest.gdprConsent.consentString); + } // US Privacy (CCPA) support + + + if (firstBidRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.ext.us_privacy', firstBidRequest.uspConsent); + } + } + + if (getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.coppa', 1); + } + + var commonFpd = getConfig('fpd') || {}; + + if (commonFpd.context) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'site.ext.data', commonFpd.context); + } + + if (commonFpd.user) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.data', commonFpd.user); + } + + addBidderFirstPartyDataToRequest(request); + return request; + }, + interpretResponse: function interpretResponse(response, bidderRequests) { + 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; + var key = "".concat(bid.impid).concat(seatbid.seat); + + if (bidIdMap[key]) { + bidRequest = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getBidRequest"](bidIdMap[key], bidderRequests); + } + + var cpm = bid.price; + var status = cpm !== 0 ? __WEBPACK_IMPORTED_MODULE_3__src_constants_json__["STATUS"].GOOD : __WEBPACK_IMPORTED_MODULE_3__src_constants_json__["STATUS"].NO_BID; + var bidObject = Object(__WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__["a" /* createBid */])(status, bidRequest || { + bidder: seatbid.seat, + src: TYPE + }); + bidObject.cpm = cpm; + var serverResponseTimeMs = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](response, ['ext', 'responsetimemillis', seatbid.seat].join('.')); + + if (bidRequest && serverResponseTimeMs) { + bidRequest.serverResponseTimeMs = serverResponseTimeMs; + } // Look for seatbid[].bid[].ext.prebid.bidid and place it in the bidResponse object for use in analytics adapters as 'pbsBidId' + + + var bidId = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.bidid'); + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](bidId)) { + bidObject.pbsBidId = bidId; + } // store wurl by auctionId and adId so it can be accessed from the BID_WON event handler + + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.events.win'))) { + addWurl(bidRequest.auctionId, bidObject.adId, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.events.win')); + } + + var extPrebidTargeting = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.targeting'); // If ext.prebid.targeting exists, add it as a property value named 'adserverTargeting' + // The removal of hb_winurl and hb_bidid targeting values is temporary + // once we get through the transition, this block will be removed. + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](extPrebidTargeting)) { + // If wurl exists, remove hb_winurl and hb_bidid targeting attributes + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.events.win'))) { + extPrebidTargeting = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getDefinedParams"](extPrebidTargeting, Object.keys(extPrebidTargeting).filter(function (i) { + return i.indexOf('hb_winurl') === -1 && i.indexOf('hb_bidid') === -1; + })); + } + + bidObject.adserverTargeting = extPrebidTargeting; + } + + bidObject.seatBidId = bid.id; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.type') === __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["d" /* VIDEO */]) { + bidObject.mediaType = __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["d" /* VIDEO */]; + var sizes = bidRequest.sizes && bidRequest.sizes[0]; + bidObject.playerHeight = sizes[0]; + bidObject.playerWidth = sizes[1]; // try to get cache values from 'response.ext.prebid.cache.js' + // else try 'bid.ext.prebid.targeting' as fallback + + if (bid.ext.prebid.cache && _typeof(bid.ext.prebid.cache.vastXml) === 'object' && bid.ext.prebid.cache.vastXml.cacheId && bid.ext.prebid.cache.vastXml.url) { + bidObject.videoCacheKey = bid.ext.prebid.cache.vastXml.cacheId; + bidObject.vastUrl = bid.ext.prebid.cache.vastXml.url; + } else if (extPrebidTargeting && extPrebidTargeting.hb_uuid && extPrebidTargeting.hb_cache_host && extPrebidTargeting.hb_cache_path) { + bidObject.videoCacheKey = extPrebidTargeting.hb_uuid; // build url using key and cache host + + bidObject.vastUrl = "https://".concat(extPrebidTargeting.hb_cache_host).concat(extPrebidTargeting.hb_cache_path, "?uuid=").concat(extPrebidTargeting.hb_uuid); + } + + if (bid.adm) { + bidObject.vastXml = bid.adm; + } + + if (!bidObject.vastUrl && bid.nurl) { + bidObject.vastUrl = bid.nurl; + } + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'ext.prebid.type') === __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["c" /* NATIVE */]) { + var _trackers; + + bidObject.mediaType = __WEBPACK_IMPORTED_MODULE_6__src_mediaTypes_js__["c" /* NATIVE */]; + var adm; + + if (typeof bid.adm === 'string') { + adm = bidObject.adm = JSON.parse(bid.adm); + } else { + adm = bidObject.adm = bid.adm; + } + + var trackers = (_trackers = {}, _defineProperty(_trackers, nativeEventTrackerMethodMap.img, adm.imptrackers || []), _defineProperty(_trackers, nativeEventTrackerMethodMap.js, adm.jstracker ? [adm.jstracker] : []), _trackers); + + if (adm.eventtrackers) { + adm.eventtrackers.forEach(function (tracker) { + switch (tracker.method) { + case nativeEventTrackerMethodMap.img: + trackers[nativeEventTrackerMethodMap.img].push(tracker.url); + break; + + case nativeEventTrackerMethodMap.js: + trackers[nativeEventTrackerMethodMap.js].push(tracker.url); + break; + } + }); + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](adm) && Array.isArray(adm.assets)) { + var origAssets = nativeAssetCache[bidRequest.adUnitCode]; + bidObject.native = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"](adm.assets.reduce(function (native, asset) { + var origAsset = origAssets[asset.id]; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](asset.img)) { + native[origAsset.img.type ? nativeImgIdMap[origAsset.img.type] : 'image'] = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["pick"](asset.img, ['url', 'w as width', 'h as height']); + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](asset.title)) { + native['title'] = asset.title.text; + } else if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"](asset.data)) { + nativeDataNames.forEach(function (dataType) { + if (nativeDataIdMap[dataType] === origAsset.data.type) { + native[dataType] = asset.data.value; + } + }); + } + + return native; + }, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["cleanObj"]({ + clickUrl: adm.link, + clickTrackers: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](adm, 'link.clicktrackers'), + impressionTrackers: trackers[nativeEventTrackerMethodMap.img], + javascriptTrackers: trackers[nativeEventTrackerMethodMap.js] + }))); + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('prebid server native response contained no assets'); + } + } else { + // banner + if (bid.adm && bid.nurl) { + bidObject.ad = bid.adm; + bidObject.ad += __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["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 = bidRequest.bidId || bidRequest.bid_Id; + bidObject.creative_id = bid.crid; + bidObject.creativeId = bid.crid; + + if (bid.burl) { + bidObject.burl = bid.burl; + } + + bidObject.currency = response.cur ? response.cur : DEFAULT_S2S_CURRENCY; + bidObject.meta = bidObject.meta || {}; + + if (bid.adomain) { + bidObject.meta.advertiserDomains = bid.adomain; + } // TODO: Remove when prebid-server returns ttl and netRevenue + + + var configTtl = _s2sConfig.defaultTtl || DEFAULT_S2S_TTL; + bidObject.ttl = bid.ttl ? bid.ttl : configTtl; + bidObject.netRevenue = bid.netRevenue ? bid.netRevenue : DEFAULT_S2S_NETREVENUE; + bids.push({ + adUnit: bid.impid, + bid: bidObject + }); + }); + }); + } + + return bids; + } +}; +/** + * BID_WON event to request the wurl + * @param {Bid} bid the winning bid object + */ + +function bidWonHandler(bid) { + var wurl = getWurl(bid.auctionId, bid.adId); + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"](wurl)) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]("Invoking image pixel for wurl on BID_WIN: \"".concat(wurl, "\"")); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["triggerPixel"](wurl); // remove from wurl cache, since the wurl url was called + + removeWurl(bid.auctionId, bid.adId); + } +} +/** + * Bidder adapter for Prebid Server + */ + + +function PrebidServer() { + var baseAdapter = new __WEBPACK_IMPORTED_MODULE_0__src_adapter_js__["a" /* 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 = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepClone"](s2sBidRequest.ad_units); // at this point ad units should have a size array either directly or mapped so filter for that + + var validAdUnits = adUnits.filter(function (unit) { + return unit.mediaTypes && (unit.mediaTypes.native || unit.mediaTypes.banner && unit.mediaTypes.banner.sizes || unit.mediaTypes.video && unit.mediaTypes.video.playerSize); + }); // in case config.bidders contains invalid bidders, we only process those we sent requests for + + var requestedBidders = validAdUnits.map(function (adUnit) { + return adUnit.bids.map(function (bid) { + return bid.bidder; + }).filter(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["uniques"]); + }).reduce(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["flatten"]).filter(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["uniques"]); + + if (_s2sConfig && _s2sConfig.syncEndpoint) { + var gdprConsent, uspConsent; + + if (Array.isArray(bidRequests) && bidRequests.length > 0) { + gdprConsent = bidRequests[0].gdprConsent; + uspConsent = bidRequests[0].uspConsent; + } + + var syncBidders = _s2sConfig.bidders.map(function (bidder) { + return __WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].aliasRegistry[bidder] || bidder; + }).filter(function (bidder, index, array) { + return array.indexOf(bidder) === index; + }); + + queueSync(syncBidders, gdprConsent, uspConsent); + } + + var request = OPEN_RTB_PROTOCOL.buildRequest(s2sBidRequest, bidRequests, validAdUnits); + var requestJson = request && JSON.stringify(request); + + if (request && requestJson) { + ajax(_s2sConfig.endpoint, { + success: function success(response) { + return handleResponse(response, requestedBidders, bidRequests, addBidResponse, done); + }, + error: done + }, requestJson, { + contentType: 'text/plain', + withCredentials: true + }); + } + }; + /* Notify Prebid of bid responses so bids can get in the auction */ + + + function handleResponse(response, requestedBidders, bidderRequests, addBidResponse, done) { + var result; + var bids = []; + + try { + result = JSON.parse(response); + bids = OPEN_RTB_PROTOCOL.interpretResponse(result, bidderRequests, requestedBidders); + bids.forEach(function (_ref2) { + var adUnit = _ref2.adUnit, + bid = _ref2.bid; + + if (Object(__WEBPACK_IMPORTED_MODULE_8__src_adapters_bidderFactory_js__["isValid"])(adUnit, bid, bidderRequests)) { + addBidResponse(adUnit, bid); + } + }); + bidderRequests.forEach(function (bidderRequest) { + return __WEBPACK_IMPORTED_MODULE_9__src_events_js___default.a.emit(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__["EVENTS"].BIDDER_DONE, bidderRequest); + }); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](error); + } + + if (!result || result.status && __WEBPACK_IMPORTED_MODULE_10_core_js_pure_features_array_includes_js___default()(result.status, 'Error')) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('error parsing response: ', result.status); + } + + done(); + doClientSideSyncs(requestedBidders); + } // Listen for bid won to call wurl + + + __WEBPACK_IMPORTED_MODULE_9__src_events_js___default.a.on(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__["EVENTS"].BID_WON, bidWonHandler); + return _extends(this, { + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode, + type: TYPE + }); +} +__WEBPACK_IMPORTED_MODULE_4__src_adapterManager_js__["default"].registerBidAdapter(new PrebidServer(), 'prebidServer'); + +/***/ }), + +/***/ 593: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return S2S_VENDORS; }); +// accountId and bidders params are not included here, should be configured by end-user +var S2S_VENDORS = { + 'appnexus': { + adapter: 'prebidServer', + enabled: true, + endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', + syncEndpoint: 'https://prebid.adnxs.com/pbs/v1/cookie_sync', + timeout: 1000 + }, + 'rubicon': { + adapter: 'prebidServer', + enabled: true, + endpoint: 'https://prebid-server.rubiconproject.com/openrtb2/auction', + syncEndpoint: 'https://prebid-server.rubiconproject.com/cookie_sync', + timeout: 500 + } +}; + +/***/ }) + +},[591]); \ No newline at end of file diff --git a/build/dist/prebidmanagerAnalyticsAdapter.js b/build/dist/prebidmanagerAnalyticsAdapter.js new file mode 100644 index 00000000000..ed9bf7f7700 --- /dev/null +++ b/build/dist/prebidmanagerAnalyticsAdapter.js @@ -0,0 +1,535 @@ +pbjsChunk([24],{ + +/***/ 594: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(595); + + +/***/ }), + +/***/ 595: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + +/** + * prebidmanagerAnalyticsAdapter.js - analytics adapter for prebidmanager + */ + +var DEFAULT_EVENT_URL = 'https://endpoint.prebidmanager.com/endpoint'; +var analyticsType = 'endpoint'; +var analyticsName = 'Prebid Manager Analytics: '; + +var utils = __webpack_require__(0); + +var CONSTANTS = __webpack_require__(5); + +var ajax = Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["b" /* ajaxBuilder */])(0); +var _VERSION = 1; +var initOptions = null; + +var _pageViewId = utils.generateUUID(); + +var _startAuction = 0; +var _bidRequestTimeout = 0; +var flushInterval; +var pmAnalyticsEnabled = false; +var utmTags = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; +var w = window; +var d = document; +var e = d.documentElement; +var g = d.getElementsByTagName('body')[0]; +var x = w.innerWidth || e.clientWidth || g.clientWidth; +var y = w.innerHeight || e.clientHeight || g.clientHeight; +var _pageView = { + eventType: 'pageView', + userAgent: window.navigator.userAgent, + timestamp: Date.now(), + timezoneOffset: new Date().getTimezoneOffset(), + language: window.navigator.language, + vendor: window.navigator.vendor, + screenWidth: x, + screenHeight: y +}; +var _eventQueue = [_pageView]; + +var prebidmanagerAnalytics = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + url: DEFAULT_EVENT_URL, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + handleEvent(eventType, args); + } +}); + +prebidmanagerAnalytics.originEnableAnalytics = prebidmanagerAnalytics.enableAnalytics; + +prebidmanagerAnalytics.enableAnalytics = function (config) { + initOptions = config.options || {}; + initOptions.url = initOptions.url || DEFAULT_EVENT_URL; + pmAnalyticsEnabled = true; + prebidmanagerAnalytics.originEnableAnalytics(config); + flushInterval = setInterval(flush, 1000); +}; + +prebidmanagerAnalytics.originDisableAnalytics = prebidmanagerAnalytics.disableAnalytics; + +prebidmanagerAnalytics.disableAnalytics = function () { + if (!pmAnalyticsEnabled) { + return; + } + + flush(); + clearInterval(flushInterval); + prebidmanagerAnalytics.originDisableAnalytics(); +}; + +function collectUtmTagData() { + var newUtm = false; + var pmUtmTags = {}; + + try { + utmTags.forEach(function (utmKey) { + var utmValue = utils.getParameterByName(utmKey); + + if (utmValue !== '') { + newUtm = true; + } + + pmUtmTags[utmKey] = utmValue; + }); + + if (newUtm === false) { + utmTags.forEach(function (utmKey) { + var itemValue = localStorage.getItem("pm_".concat(utmKey)); + + if (itemValue.length !== 0) { + pmUtmTags[utmKey] = itemValue; + } + }); + } else { + utmTags.forEach(function (utmKey) { + localStorage.setItem("pm_".concat(utmKey), pmUtmTags[utmKey]); + }); + } + } catch (e) { + utils.logError("".concat(analyticsName, "Error"), e); + pmUtmTags['error_utm'] = 1; + } + + return pmUtmTags; +} + +function flush() { + if (!pmAnalyticsEnabled) { + return; + } + + if (_eventQueue.length > 1) { + var data = { + pageViewId: _pageViewId, + ver: _VERSION, + bundleId: initOptions.bundleId, + events: _eventQueue, + utmTags: collectUtmTagData() + }; + ajax(initOptions.url, function () { + return utils.logInfo("".concat(analyticsName, " sent events batch")); + }, _VERSION + ':' + JSON.stringify(data), { + contentType: 'text/plain', + method: 'POST', + withCredentials: true + }); + _eventQueue = [_pageView]; + } +} + +function handleEvent(eventType, eventArgs) { + eventArgs = eventArgs ? JSON.parse(JSON.stringify(eventArgs)) : {}; + var pmEvent = {}; + + switch (eventType) { + case CONSTANTS.EVENTS.AUCTION_INIT: + { + pmEvent = eventArgs; + _startAuction = pmEvent.timestamp; + _bidRequestTimeout = pmEvent.timeout; + break; + } + + case CONSTANTS.EVENTS.AUCTION_END: + { + pmEvent = eventArgs; + pmEvent.start = _startAuction; + pmEvent.end = Date.now(); + break; + } + + case CONSTANTS.EVENTS.BID_ADJUSTMENT: + { + pmEvent.bidders = eventArgs; + break; + } + + case CONSTANTS.EVENTS.BID_TIMEOUT: + { + pmEvent.bidders = eventArgs; + pmEvent.duration = _bidRequestTimeout; + break; + } + + case CONSTANTS.EVENTS.BID_REQUESTED: + { + pmEvent = eventArgs; + break; + } + + case CONSTANTS.EVENTS.BID_RESPONSE: + { + pmEvent = eventArgs; + delete pmEvent.ad; + break; + } + + case CONSTANTS.EVENTS.BID_WON: + { + pmEvent = eventArgs; + delete pmEvent.ad; + delete pmEvent.adUrl; + break; + } + + case CONSTANTS.EVENTS.BIDDER_DONE: + { + pmEvent = eventArgs; + break; + } + + case CONSTANTS.EVENTS.SET_TARGETING: + { + pmEvent.targetings = eventArgs; + break; + } + + case CONSTANTS.EVENTS.REQUEST_BIDS: + { + pmEvent = eventArgs; + break; + } + + case CONSTANTS.EVENTS.ADD_AD_UNITS: + { + pmEvent = eventArgs; + break; + } + + case CONSTANTS.EVENTS.AD_RENDER_FAILED: + { + pmEvent = eventArgs; + break; + } + + default: + return; + } + + pmEvent.eventType = eventType; + pmEvent.timestamp = pmEvent.timestamp || Date.now(); + sendEvent(pmEvent); +} + +function sendEvent(event) { + _eventQueue.push(event); + + utils.logInfo("".concat(analyticsName, "Event ").concat(event.eventType, ":"), event); + + if (event.eventType === CONSTANTS.EVENTS.AUCTION_END) { + flush(); + } +} + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: prebidmanagerAnalytics, + code: 'prebidmanager' +}); + +prebidmanagerAnalytics.getOptions = function () { + return initOptions; +}; + +prebidmanagerAnalytics.flush = flush; +/* harmony default export */ __webpack_exports__["default"] = (prebidmanagerAnalytics); + +/***/ }), + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }) + +},[594]); \ No newline at end of file diff --git a/build/dist/priceFloors.js b/build/dist/priceFloors.js new file mode 100644 index 00000000000..b4b09a25ca4 --- /dev/null +++ b/build/dist/priceFloors.js @@ -0,0 +1,878 @@ +pbjsChunk([141],{ + +/***/ 596: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(597); + + +/***/ }), + +/***/ 597: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "allowedFields", function() { return allowedFields; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_floorDataForAuction", function() { return _floorDataForAuction; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fieldMatchingFunctions", function() { return fieldMatchingFunctions; }); +/* harmony export (immutable) */ __webpack_exports__["getFirstMatchingFloor"] = getFirstMatchingFloor; +/* harmony export (immutable) */ __webpack_exports__["getBiddersCpmAdjustment"] = getBiddersCpmAdjustment; +/* harmony export (immutable) */ __webpack_exports__["calculateAdjustedFloor"] = calculateAdjustedFloor; +/* harmony export (immutable) */ __webpack_exports__["getFloor"] = getFloor; +/* harmony export (immutable) */ __webpack_exports__["getFloorsDataForAuction"] = getFloorsDataForAuction; +/* harmony export (immutable) */ __webpack_exports__["getFloorDataFromAdUnits"] = getFloorDataFromAdUnits; +/* harmony export (immutable) */ __webpack_exports__["updateAdUnitsForAuction"] = updateAdUnitsForAuction; +/* harmony export (immutable) */ __webpack_exports__["pickRandomModel"] = pickRandomModel; +/* harmony export (immutable) */ __webpack_exports__["createFloorsDataForAuction"] = createFloorsDataForAuction; +/* harmony export (immutable) */ __webpack_exports__["continueAuction"] = continueAuction; +/* harmony export (immutable) */ __webpack_exports__["isFloorsDataValid"] = isFloorsDataValid; +/* harmony export (immutable) */ __webpack_exports__["parseFloorData"] = parseFloorData; +/* harmony export (immutable) */ __webpack_exports__["requestBidsHook"] = requestBidsHook; +/* harmony export (immutable) */ __webpack_exports__["handleFetchResponse"] = handleFetchResponse; +/* harmony export (immutable) */ __webpack_exports__["generateAndHandleFetch"] = generateAndHandleFetch; +/* harmony export (immutable) */ __webpack_exports__["handleSetFloorsConfig"] = handleSetFloorsConfig; +/* harmony export (immutable) */ __webpack_exports__["addBidResponseHook"] = addBidResponseHook; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__src_events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_refererDetection_js__ = __webpack_require__(30); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } + +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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; } + + + + + + + + + + + +/** + * @summary This Module is intended to provide users with the ability to dynamically set and enforce price floors on a per auction basis. + */ + +var MODULE_NAME = 'Price Floors'; +/** + * @summary Instantiate Ajax so we control the timeout + */ + +var ajax = Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["b" /* ajaxBuilder */])(10000); +/** + * @summary Allowed fields for rules to have + */ + +var allowedFields = ['gptSlot', 'adUnitCode', 'size', 'domain', 'mediaType']; +/** + * @summary This is a flag to indicate if a AJAX call is processing for a floors request +*/ + +var fetching = false; +/** + * @summary so we only register for our hooks once +*/ + +var addedFloorsHook = false; +/** + * @summary The config to be used. Can be updated via: setConfig or a real time fetch + */ + +var _floorsConfig = {}; +/** + * @summary If a auction is to be delayed by an ongoing fetch we hold it here until it can be resumed + */ + +var _delayedAuctions = []; +/** + * @summary Each auction can have differing floors data depending on execution time or per adunit setup + * So we will be saving each auction offset by it's auctionId in order to make sure data is not changed + * Once the auction commences + */ + +var _floorDataForAuction = {}; +/** + * @summary Simple function to round up to a certain decimal degree + */ + +function roundUp(number, precision) { + return Math.ceil(parseFloat(number) * Math.pow(10, precision)) / Math.pow(10, precision); +} + +var referrerHostname; + +function getHostNameFromReferer(referer) { + referrerHostname = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseUrl"](referer, { + noDecodeWholeURL: true + }).hostname; + return referrerHostname; +} +/** + * @summary floor field types with their matching functions to resolve the actual matched value + */ + + +var fieldMatchingFunctions = { + 'size': function size(bidRequest, bidResponse) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseGPTSingleSizeArray"](bidResponse.size) || '*'; + }, + 'mediaType': function mediaType(bidRequest, bidResponse) { + return bidResponse.mediaType || 'banner'; + }, + 'gptSlot': function gptSlot(bidRequest, bidResponse) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getGptSlotInfoForAdUnitCode"](bidRequest.adUnitCode).gptSlot; + }, + 'domain': function domain(bidRequest, bidResponse) { + return referrerHostname || getHostNameFromReferer(Object(__WEBPACK_IMPORTED_MODULE_9__src_refererDetection_js__["a" /* getRefererInfo */])().referer); + }, + 'adUnitCode': function adUnitCode(bidRequest, bidResponse) { + return bidRequest.adUnitCode; + } +}; +/** + * @summary Based on the fields array in floors data, it enumerates all possible matches based on exact match coupled with + * a "*" catch-all match + * Returns array of Tuple [exact match, catch all] for each field in rules file + */ + +function enumeratePossibleFieldValues(floorFields, bidObject, responseObject) { + // generate combination of all exact matches and catch all for each field type + return floorFields.reduce(function (accum, field) { + var exactMatch = fieldMatchingFunctions[field](bidObject, responseObject) || '*'; // storing exact matches as lowerCase since we want to compare case insensitively + + accum.push(exactMatch === '*' ? ['*'] : [exactMatch.toLowerCase(), '*']); + return accum; + }, []); +} +/** + * @summary get's the first matching floor based on context provided. + * Generates all possible rule matches and picks the first matching one. + */ + + +function getFirstMatchingFloor(floorData, bidObject) { + var responseObject = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var fieldValues = enumeratePossibleFieldValues(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](floorData, 'schema.fields') || [], bidObject, responseObject); + if (!fieldValues.length) return { + matchingFloor: floorData.default + }; // look to see iof a request for this context was made already + + var matchingInput = fieldValues.map(function (field) { + return field[0]; + }).join('-'); // if we already have gotten the matching rule from this matching input then use it! No need to look again + + var previousMatch = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](floorData, "matchingInputs.".concat(matchingInput)); + + if (previousMatch) { + return previousMatch; + } + + var allPossibleMatches = generatePossibleEnumerations(fieldValues, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](floorData, 'schema.delimiter') || '|'); + var matchingRule = __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(allPossibleMatches, function (hashValue) { + return floorData.values.hasOwnProperty(hashValue); + }); + var matchingData = { + matchingFloor: floorData.values[matchingRule] || floorData.default, + matchingData: allPossibleMatches[0], + // the first possible match is an "exact" so contains all data relevant for anlaytics adapters + matchingRule: matchingRule + }; // save for later lookup if needed + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](floorData, "matchingInputs.".concat(matchingInput), _objectSpread({}, matchingData)); + return matchingData; +} +/** + * @summary Generates all possible rule hash's based on input array of array's + * The generated list is of all possible key matches based on fields input + * The list is sorted by least amount of * in rule to most with left most fields taking precedence + */ + +function generatePossibleEnumerations(arrayOfFields, delimiter) { + return arrayOfFields.reduce(function (accum, currentVal) { + var ret = []; + accum.map(function (obj) { + currentVal.map(function (obj1) { + ret.push(obj + delimiter + obj1); + }); + }); + return ret; + }).sort(function (left, right) { + return left.split('*').length - right.split('*').length; + }); +} +/** + * @summary If a the input bidder has a registered cpmadjustment it returns the input CPM after being adjusted + */ + + +function getBiddersCpmAdjustment(bidderName, inputCpm) { + var adjustmentFunction = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])(), "bidderSettings.".concat(bidderName, ".bidCpmAdjustment")); + + if (adjustmentFunction) { + return parseFloat(adjustmentFunction(inputCpm)); + } + + return parseFloat(inputCpm); +} +/** + * @summary This function takes the original floor and the adjusted floor in order to determine the bidders actual floor + * With js rounding errors with decimal division we utilize similar method as shown in cpmBucketManager.js + */ + +function calculateAdjustedFloor(oldFloor, newFloor) { + var pow = Math.pow(10, 10); + return oldFloor * pow / (newFloor * pow) * (oldFloor * pow) / pow; +} +/** + * @summary gets the prebid set sizes depending on the input mediaType + */ + +var getMediaTypesSizes = { + banner: function banner(bid) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') || []; + }, + video: function video(bid) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize') || []; + }, + native: function native(bid) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.native.image.sizes') ? [__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](bid, 'mediaTypes.native.image.sizes')] : []; + } +}; +/** + * @summary for getFloor only, before selecting a rule, if a bidAdapter asks for * in their getFloor params + * Then we may be able to get a better rule than the * ones depending on context of the adUnit + */ + +function updateRequestParamsFromContext(bidRequest, requestParams) { + // if adapter asks for *'s then we can do some logic to infer if we can get a more specific rule based on context of bid + var mediaTypesOnBid = Object.keys(bidRequest.mediaTypes || {}); // if there is only one mediaType then we can just use it + + if (requestParams.mediaType === '*' && mediaTypesOnBid.length === 1) { + requestParams.mediaType = mediaTypesOnBid[0]; + } // if they asked for * size, but for the given mediaType there is only one size, we can just use it + + + if (requestParams.size === '*' && mediaTypesOnBid.indexOf(requestParams.mediaType) !== -1 && getMediaTypesSizes[requestParams.mediaType] && getMediaTypesSizes[requestParams.mediaType](bidRequest).length === 1) { + requestParams.size = getMediaTypesSizes[requestParams.mediaType](bidRequest)[0]; + } + + return requestParams; +} +/** + * @summary This is the function which will return a single floor based on the input requests + * and matching it to a rule for the current auction + */ + + +function getFloor() { + var requestParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { + currency: 'USD', + mediaType: '*', + size: '*' + }; + var bidRequest = this; + var floorData = _floorDataForAuction[bidRequest.auctionId]; + if (!floorData || floorData.skipped) return {}; + requestParams = updateRequestParamsFromContext(bidRequest, requestParams); + var floorInfo = getFirstMatchingFloor(floorData.data, _objectSpread({}, bidRequest), { + mediaType: requestParams.mediaType, + size: requestParams.size + }); + var currency = requestParams.currency || floorData.data.currency; // if bidder asked for a currency which is not what floors are set in convert + + if (floorInfo.matchingFloor && currency !== floorData.data.currency) { + try { + floorInfo.matchingFloor = Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().convertCurrency(floorInfo.matchingFloor, floorData.data.currency, currency); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]("".concat(MODULE_NAME, ": Unable to get currency conversion for getFloor for bidder ").concat(bidRequest.bidder, ". You must have currency module enabled with defaultRates in your currency config")); // since we were unable to convert to the bidders requested currency, we send back just the actual floors currency to them + + currency = floorData.data.currency; + } + } // if cpmAdjustment flag is true and we have a valid floor then run the adjustment on it + + + if (floorData.enforcement.bidAdjustment && floorInfo.matchingFloor) { + var cpmAdjustment = getBiddersCpmAdjustment(bidRequest.bidder, floorInfo.matchingFloor); + floorInfo.matchingFloor = cpmAdjustment ? calculateAdjustedFloor(floorInfo.matchingFloor, cpmAdjustment) : floorInfo.matchingFloor; + } + + if (floorInfo.matchingFloor) { + return { + floor: roundUp(floorInfo.matchingFloor, 4), + currency: currency + }; + } + + return {}; +} +/** + * @summary Takes a floorsData object and converts it into a hash map with appropriate keys + */ + +function getFloorsDataForAuction(floorData, adUnitCode) { + var auctionFloorData = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepClone"](floorData); + auctionFloorData.schema.delimiter = floorData.schema.delimiter || '|'; + auctionFloorData.values = normalizeRulesForAuction(auctionFloorData, adUnitCode); // default the currency to USD if not passed in + + auctionFloorData.currency = auctionFloorData.currency || 'USD'; + return auctionFloorData; +} +/** + * @summary if adUnitCode needs to be added to the offset then it will add it else just return the values + */ + +function normalizeRulesForAuction(floorData, adUnitCode) { + var fields = floorData.schema.fields; + var delimiter = floorData.schema.delimiter; // if we are building the floor data form an ad unit, we need to append adUnit code as to not cause collisions + + var prependAdUnitCode = adUnitCode && fields.indexOf('adUnitCode') === -1 && fields.unshift('adUnitCode'); + return Object.keys(floorData.values).reduce(function (rulesHash, oldKey) { + var newKey = prependAdUnitCode ? "".concat(adUnitCode).concat(delimiter).concat(oldKey) : oldKey; // we store the rule keys as lower case for case insensitive compare + + rulesHash[newKey.toLowerCase()] = floorData.values[oldKey]; + return rulesHash; + }, {}); +} +/** + * @summary This function will take the adUnits and generate a floor data object to be used during the auction + * Only called if no set config or fetch level data has returned + */ + + +function getFloorDataFromAdUnits(adUnits) { + return adUnits.reduce(function (accum, adUnit) { + if (isFloorsDataValid(adUnit.floors)) { + // if values already exist we want to not overwrite them + if (!accum.values) { + accum = getFloorsDataForAuction(adUnit.floors, adUnit.code); + accum.location = 'adUnit'; + } else { + var newRules = getFloorsDataForAuction(adUnit.floors, adUnit.code).values; // copy over the new rules into our values object + + _extends(accum.values, newRules); + } + } + + return accum; + }, {}); +} +/** + * @summary This function takes the adUnits for the auction and update them accordingly as well as returns the rules hashmap for the auction + */ + +function updateAdUnitsForAuction(adUnits, floorData, auctionId) { + adUnits.forEach(function (adUnit) { + adUnit.bids.forEach(function (bid) { + if (floorData.skipped) { + delete bid.getFloor; + } else { + bid.getFloor = getFloor; + } // information for bid and analytics adapters + + + bid.auctionId = auctionId; + bid.floorData = { + skipped: floorData.skipped, + skipRate: floorData.skipRate, + modelVersion: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](floorData, 'data.modelVersion'), + location: __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](floorData, 'data.location', 'noData'), + floorProvider: floorData.floorProvider, + fetchStatus: _floorsConfig.fetchStatus + }; + }); + }); +} +function pickRandomModel(modelGroups, weightSum) { + // we loop through the models subtracting the current model weight from our random number + // once we are at or below zero, we return the associated model + var random = Math.floor(Math.random() * weightSum + 1); + + for (var i = 0; i < modelGroups.length; i++) { + random -= modelGroups[i].modelWeight; + + if (random <= 0) { + return modelGroups[i]; + } + } +} +; +/** + * @summary Updates the adUnits accordingly and returns the necessary floorsData for the current auction + */ + +function createFloorsDataForAuction(adUnits, auctionId) { + var resolvedFloorsData = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepClone"](_floorsConfig); // if using schema 2 pick a model here: + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](resolvedFloorsData, 'data.floorsSchemaVersion') === 2) { + // merge the models specific stuff into the top level data settings (now it looks like floorsSchemaVersion 1!) + var _resolvedFloorsData$d = resolvedFloorsData.data, + modelGroups = _resolvedFloorsData$d.modelGroups, + rest = _objectWithoutProperties(_resolvedFloorsData$d, ["modelGroups"]); + + resolvedFloorsData.data = _extends(rest, pickRandomModel(modelGroups, rest.modelWeightSum)); + } // if we do not have a floors data set, we will try to use data set on adUnits + + + var useAdUnitData = Object.keys(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](resolvedFloorsData, 'data.values') || {}).length === 0; + + if (useAdUnitData) { + resolvedFloorsData.data = getFloorDataFromAdUnits(adUnits); + } else { + resolvedFloorsData.data = getFloorsDataForAuction(resolvedFloorsData.data); + } // if we still do not have a valid floor data then floors is not on for this auction, so skip + + + if (Object.keys(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](resolvedFloorsData, 'data.values') || {}).length === 0) { + resolvedFloorsData.skipped = true; + } else { + // determine the skip rate now + var auctionSkipRate = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["getParameterByName"]('pbjs_skipRate') || resolvedFloorsData.skipRate; + var isSkipped = Math.random() * 100 < parseFloat(auctionSkipRate); + resolvedFloorsData.skipped = isSkipped; + } // add floorData to bids + + + updateAdUnitsForAuction(adUnits, resolvedFloorsData, auctionId); + return resolvedFloorsData; +} +/** + * @summary This is the function which will be called to exit our module and continue the auction. + */ + +function continueAuction(hookConfig) { + // only run if hasExited + if (!hookConfig.hasExited) { + // if this current auction is still fetching, remove it from the _delayedAuctions + _delayedAuctions = _delayedAuctions.filter(function (auctionConfig) { + return auctionConfig.timer !== hookConfig.timer; + }); // We need to know the auctionId at this time. So we will use the passed in one or generate and set it ourselves + + hookConfig.reqBidsConfigObj.auctionId = hookConfig.reqBidsConfigObj.auctionId || __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["generateUUID"](); // now we do what we need to with adUnits and save the data object to be used for getFloor and enforcement calls + + _floorDataForAuction[hookConfig.reqBidsConfigObj.auctionId] = createFloorsDataForAuction(hookConfig.reqBidsConfigObj.adUnits || Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().adUnits, hookConfig.reqBidsConfigObj.auctionId); + hookConfig.nextFn.apply(hookConfig.context, [hookConfig.reqBidsConfigObj]); + hookConfig.hasExited = true; + } +} + +function validateSchemaFields(fields) { + if (Array.isArray(fields) && fields.length > 0 && fields.every(function (field) { + return allowedFields.indexOf(field) !== -1; + })) { + return true; + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("".concat(MODULE_NAME, ": Fields recieved do not match allowed fields")); + return false; +} + +function isValidRule(key, floor, numFields, delimiter) { + if (typeof key !== 'string' || key.split(delimiter).length !== numFields) { + return false; + } + + return typeof floor === 'number'; +} + +function validateRules(floorsData, numFields, delimiter) { + if (_typeof(floorsData.values) !== 'object') { + return false; + } // if an invalid rule exists we remove it + + + floorsData.values = Object.keys(floorsData.values).reduce(function (filteredRules, key) { + if (isValidRule(key, floorsData.values[key], numFields, delimiter)) { + filteredRules[key] = floorsData.values[key]; + } + + return filteredRules; + }, {}); // rules is only valid if at least one rule remains + + return Object.keys(floorsData.values).length > 0; +} + +function modelIsValid(model) { + // schema.fields has only allowed attributes + if (!validateSchemaFields(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](model, 'schema.fields'))) { + return false; + } + + return validateRules(model, model.schema.fields.length, model.schema.delimiter || '|'); +} +/** + * @summary Mapping of floor schema version to it's corresponding validation + */ + + +var floorsSchemaValidation = { + 1: function _(data) { + return modelIsValid(data); + }, + 2: function _(data) { + // model groups should be an array with at least one element + if (!Array.isArray(data.modelGroups) || data.modelGroups.length === 0) { + return false; + } // every model should have valid schema, as well as an accompanying modelWeight + + + data.modelWeightSum = 0; + return data.modelGroups.every(function (model) { + if (typeof model.modelWeight === 'number' && modelIsValid(model)) { + data.modelWeightSum += model.modelWeight; + return true; + } + + return false; + }); + } +}; +/** + * @summary Fields array should have at least one entry and all should match allowed fields + * Each rule in the values array should have a 'key' and 'floor' param + * And each 'key' should have the correct number of 'fields' after splitting + * on the delim. If rule does not match remove it. return if still at least 1 rule + */ + +function isFloorsDataValid(floorsData) { + if (_typeof(floorsData) !== 'object') { + return false; + } + + floorsData.floorsSchemaVersion = floorsData.floorsSchemaVersion || 1; + + if (typeof floorsSchemaValidation[floorsData.floorsSchemaVersion] !== 'function') { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("".concat(MODULE_NAME, ": Unknown floorsSchemaVersion: "), floorsData.floorsSchemaVersion); + return false; + } + + return floorsSchemaValidation[floorsData.floorsSchemaVersion](floorsData); +} +/** + * @summary This function updates the global Floors Data field based on the new one passed in if it is valid + */ + +function parseFloorData(floorsData, location) { + if (floorsData && _typeof(floorsData) === 'object' && isFloorsDataValid(floorsData)) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"]("".concat(MODULE_NAME, ": A ").concat(location, " set the auction floor data set to "), floorsData); + return _objectSpread(_objectSpread({}, floorsData), {}, { + location: location + }); + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("".concat(MODULE_NAME, ": The floors data did not contain correct values"), floorsData); +} +/** + * + * @param {Object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids. + * @param {function} fn required; The next function in the chain, used by hook.js + */ + +function requestBidsHook(fn, reqBidsConfigObj) { + // preserves all module related variables for the current auction instance (used primiarily for concurrent auctions) + var hookConfig = { + reqBidsConfigObj: reqBidsConfigObj, + context: this, + nextFn: fn, + haveExited: false, + timer: null + }; // If auction delay > 0 AND we are fetching -> Then wait until it finishes + + if (_floorsConfig.auctionDelay > 0 && fetching) { + hookConfig.timer = setTimeout(function () { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]("".concat(MODULE_NAME, ": Fetch attempt did not return in time for auction")); + _floorsConfig.fetchStatus = 'timeout'; + continueAuction(hookConfig); + }, _floorsConfig.auctionDelay); + + _delayedAuctions.push(hookConfig); + } else { + continueAuction(hookConfig); + } +} +/** + * @summary If an auction was queued to be delayed (waiting for a fetch) then this function will resume + * those delayed auctions when delay is hit or success return or fail return + */ + +function resumeDelayedAuctions() { + _delayedAuctions.forEach(function (auctionConfig) { + // clear the timeout + clearTimeout(auctionConfig.timer); + continueAuction(auctionConfig); + }); + + _delayedAuctions = []; +} +/** + * This function handles the ajax response which comes from the user set URL to fetch floors data from + * @param {object} fetchResponse The floors data response which came back from the url configured in config.floors + */ + + +function handleFetchResponse(fetchResponse) { + fetching = false; + _floorsConfig.fetchStatus = 'success'; + var floorResponse; + + try { + floorResponse = JSON.parse(fetchResponse); + } catch (ex) { + floorResponse = fetchResponse; + } // Update the global floors object according to the fetched data + + + var fetchData = parseFloorData(floorResponse, 'fetch'); + + if (fetchData) { + // set .data to it + _floorsConfig.data = fetchData; // set skipRate override if necessary + + _floorsConfig.skipRate = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isNumber"](fetchData.skipRate) ? fetchData.skipRate : _floorsConfig.skipRate; + _floorsConfig.floorProvider = fetchData.floorProvider || _floorsConfig.floorProvider; + } // if any auctions are waiting for fetch to finish, we need to continue them! + + + resumeDelayedAuctions(); +} + +function handleFetchError(status) { + fetching = false; + _floorsConfig.fetchStatus = 'error'; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("".concat(MODULE_NAME, ": Fetch errored with: "), status); // if any auctions are waiting for fetch to finish, we need to continue them! + + resumeDelayedAuctions(); +} +/** + * This function handles sending and recieving the AJAX call for a floors fetch + * @param {object} floorsConfig the floors config coming from setConfig + */ + + +function generateAndHandleFetch(floorEndpoint) { + // if a fetch url is defined and one is not already occuring, fire it! + if (floorEndpoint.url && !fetching) { + // default to GET and we only support GET for now + var requestMethod = floorEndpoint.method || 'GET'; + + if (requestMethod !== 'GET') { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("".concat(MODULE_NAME, ": 'GET' is the only request method supported at this time!")); + } else { + ajax(floorEndpoint.url, { + success: handleFetchResponse, + error: handleFetchError + }, null, { + method: 'GET' + }); + fetching = true; + } + } else if (fetching) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]("".concat(MODULE_NAME, ": A fetch is already occuring. Skipping.")); + } +} +/** + * @summary Updates our allowedFields and fieldMatchingFunctions with the publisher defined new ones + */ + +function addFieldOverrides(overrides) { + Object.keys(overrides).forEach(function (override) { + // we only add it if it is not already in the allowed fields and if the passed in value is a function + if (allowedFields.indexOf(override) === -1 && typeof overrides[override] === 'function') { + allowedFields.push(override); + fieldMatchingFunctions[override] = overrides[override]; + } + }); +} +/** + * @summary This is the function which controls what happens during a pbjs.setConfig({...floors: {}}) is called + */ + + +function handleSetFloorsConfig(config) { + _floorsConfig = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["pick"](config, ['enabled', function (enabled) { + return enabled !== false; + }, // defaults to true + 'auctionDelay', function (auctionDelay) { + return auctionDelay || 0; + }, 'floorProvider', function (floorProvider) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](config, 'data.floorProvider', floorProvider); + }, 'endpoint', function (endpoint) { + return endpoint || {}; + }, 'skipRate', function () { + return !isNaN(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](config, 'data.skipRate')) ? config.data.skipRate : config.skipRate || 0; + }, 'enforcement', function (enforcement) { + return __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["pick"](enforcement || {}, ['enforceJS', function (enforceJS) { + return enforceJS !== false; + }, // defaults to true + 'enforcePBS', function (enforcePBS) { + return enforcePBS === true; + }, // defaults to false + 'floorDeals', function (floorDeals) { + return floorDeals === true; + }, // defaults to false + 'bidAdjustment', function (bidAdjustment) { + return bidAdjustment !== false; + } // defaults to true + ]); + }, 'additionalSchemaFields', function (additionalSchemaFields) { + return _typeof(additionalSchemaFields) === 'object' && Object.keys(additionalSchemaFields).length > 0 ? addFieldOverrides(additionalSchemaFields) : undefined; + }, 'data', function (data) { + return data && parseFloorData(data, 'setConfig') || _floorsConfig.data; + } // do not overwrite if passed in data not valid + ]); // if enabled then do some stuff + + if (_floorsConfig.enabled) { + // handle the floors fetch + generateAndHandleFetch(_floorsConfig.endpoint); + + if (!addedFloorsHook) { + // register hooks / listening events + // when auction finishes remove it's associated floor data after 3 seconds so we stil have it for latent responses + __WEBPACK_IMPORTED_MODULE_4__src_events_js___default.a.on(__WEBPACK_IMPORTED_MODULE_5__src_constants_json___default.a.EVENTS.AUCTION_END, function (args) { + setTimeout(function () { + return delete _floorDataForAuction[args.auctionId]; + }, 3000); + }); // we want our hooks to run after the currency hooks + + Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().requestBids.before(requestBidsHook, 50); // if user has debug on then we want to allow the debugging module to run before this, assuming they are testing priceFloors + // debugging is currently set at 5 priority + + Object(__WEBPACK_IMPORTED_MODULE_6__src_hook_js__["a" /* getHook */])('addBidResponse').before(addBidResponseHook, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["debugTurnedOn"]() ? 4 : 50); + addedFloorsHook = true; + } + } else { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"]("".concat(MODULE_NAME, ": Turning off module")); + _floorsConfig = {}; + _floorDataForAuction = {}; + Object(__WEBPACK_IMPORTED_MODULE_6__src_hook_js__["a" /* getHook */])('addBidResponse').getHooks({ + hook: addBidResponseHook + }).remove(); + Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().requestBids.getHooks({ + hook: requestBidsHook + }).remove(); + addedFloorsHook = false; + } +} +/** + * @summary Analytics adapters especially need context of what the floors module is doing in order + * to best create informed models. This function attaches necessary information to the bidResponse object for processing + */ + +function addFloorDataToBid(floorData, floorInfo, bid, adjustedCpm) { + bid.floorData = { + floorValue: floorInfo.matchingFloor, + floorRule: floorInfo.matchingRule, + floorCurrency: floorData.data.currency, + cpmAfterAdjustments: adjustedCpm, + enforcements: _objectSpread({}, floorData.enforcement), + matchedFields: {} + }; + floorData.data.schema.fields.forEach(function (field, index) { + var matchedValue = floorInfo.matchingData.split(floorData.data.schema.delimiter)[index]; + bid.floorData.matchedFields[field] = matchedValue; + }); +} +/** + * @summary takes the enforcement flags and the bid itself and determines if it should be floored + */ + + +function shouldFloorBid(floorData, floorInfo, bid) { + var enforceJS = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](floorData, 'enforcement.enforceJS') !== false; + var shouldFloorDeal = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](floorData, 'enforcement.floorDeals') === true || !bid.dealId; + var bidBelowFloor = bid.floorData.cpmAfterAdjustments < floorInfo.matchingFloor; + return enforceJS && bidBelowFloor && shouldFloorDeal; +} +/** + * @summary The main driving force of floors. On bidResponse we hook in and intercept bidResponses. + * And if the rule we find determines a bid should be floored we will do so. + */ + + +function addBidResponseHook(fn, adUnitCode, bid) { + var floorData = _floorDataForAuction[this.bidderRequest.auctionId]; // if no floor data or associated bidRequest then bail + + var matchingBidRequest = __WEBPACK_IMPORTED_MODULE_8_core_js_pure_features_array_find_js___default()(this.bidderRequest.bids, function (bidRequest) { + return bidRequest.bidId && bidRequest.bidId === bid.requestId; + }); + + if (!floorData || !bid || floorData.skipped || !matchingBidRequest) { + return fn.call(this, adUnitCode, bid); + } // get the matching rule + + + var floorInfo = getFirstMatchingFloor(floorData.data, _objectSpread({}, matchingBidRequest), _objectSpread(_objectSpread({}, bid), {}, { + size: [bid.width, bid.height] + })); + + if (!floorInfo.matchingFloor) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]("".concat(MODULE_NAME, ": unable to determine a matching price floor for bidResponse"), bid); + return fn.call(this, adUnitCode, bid); + } // determine the base cpm to use based on if the currency matches the floor currency + + + var adjustedCpm; + var floorCurrency = floorData.data.currency.toUpperCase(); + var bidResponseCurrency = bid.currency || 'USD'; // if an adapter does not set a bid currency and currency module not on it may come in as undefined + + if (floorCurrency === bidResponseCurrency.toUpperCase()) { + adjustedCpm = bid.cpm; + } else if (bid.originalCurrency && floorCurrency === bid.originalCurrency.toUpperCase()) { + adjustedCpm = bid.originalCpm; + } else { + try { + adjustedCpm = Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().convertCurrency(bid.cpm, bidResponseCurrency.toUpperCase(), floorCurrency); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("".concat(MODULE_NAME, ": Unable do get currency conversion for bidResponse to Floor Currency. Do you have Currency module enabled? ").concat(bid)); + return fn.call(this, adUnitCode, bid); + } + } // ok we got the bid response cpm in our desired currency. Now we need to run the bidders CPMAdjustment function if it exists + + + adjustedCpm = getBiddersCpmAdjustment(bid.bidderCode, adjustedCpm); // add necessary data information for analytics adapters / floor providers would possibly need + + addFloorDataToBid(floorData, floorInfo, bid, adjustedCpm); // now do the compare! + + if (shouldFloorBid(floorData, floorInfo, bid)) { + // bid fails floor -> throw it out + // create basic bid no-bid with necessary data fro analytics adapters + var flooredBid = Object(__WEBPACK_IMPORTED_MODULE_7__src_bidfactory_js__["a" /* createBid */])(__WEBPACK_IMPORTED_MODULE_5__src_constants_json___default.a.STATUS.NO_BID, matchingBidRequest); + + _extends(flooredBid, __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["pick"](bid, ['floorData', 'width', 'height', 'mediaType', 'currency', 'originalCpm', 'originalCurrency', 'getCpmInNewCurrency'])); + + flooredBid.status = __WEBPACK_IMPORTED_MODULE_5__src_constants_json___default.a.BID_STATUS.BID_REJECTED; // if floor not met update bid with 0 cpm so it is not included downstream and marked as no-bid + + flooredBid.cpm = 0; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"]("".concat(MODULE_NAME, ": ").concat(flooredBid.bidderCode, "'s Bid Response for ").concat(adUnitCode, " was rejected due to floor not met"), bid); + return fn.call(this, adUnitCode, flooredBid); + } + + return fn.call(this, adUnitCode, bid); +} +__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('floors', function (config) { + return handleSetFloorsConfig(config.floors); +}); + +/***/ }) + +},[596]); \ No newline at end of file diff --git a/build/dist/projectLimeLightBidAdapter.js b/build/dist/projectLimeLightBidAdapter.js new file mode 100644 index 00000000000..068127b1015 --- /dev/null +++ b/build/dist/projectLimeLightBidAdapter.js @@ -0,0 +1,156 @@ +pbjsChunk([140],{ + +/***/ 598: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(599); + + +/***/ }), + +/***/ 599: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); + + + + +var BIDDER_CODE = 'project-limelight'; +/** + * Determines whether or not the given bid response is valid. + * + * @param {object} bid The bid to validate. + * @return boolean True if this is a valid bid, and false otherwise. + */ + +function isBidResponseValid(bid) { + if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { + return false; + } + + switch (bid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastXml || bid.vastUrl); + } + + return false; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* 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 Boolean(bid.bidId && bid.params); + }, + + /** + * Make a server request from the list of BidRequests. + * + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var winTop; + + try { + winTop = window.top; + winTop.location.toString(); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logMessage"](e); + winTop = window; + } + + var placements = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["groupBy"](validBidRequests.map(function (bidRequest) { + return buildPlacement(bidRequest); + }), 'host'); + return Object.keys(placements).map(function (host) { + return buildRequest(winTop, host, placements[host].map(function (placement) { + return placement.adUnit; + })); + }); + }, + onBidWon: function onBidWon(bid) { + var cpm = bid.pbMg; + + if (bid.nurl !== '') { + bid.nurl = bid.nurl.replace(/\$\{AUCTION_PRICE\}/, cpm); + Object(__WEBPACK_IMPORTED_MODULE_2__src_ajax_js__["a" /* ajax */])(bid.nurl, null); + } + + ; + }, + + /** + * 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(bidResponses) { + var res = []; + var bidResponsesBody = bidResponses.body; + var len = bidResponsesBody.length; + + for (var i = 0; i < len; i++) { + var bid = bidResponsesBody[i]; + + if (isBidResponseValid(bid)) { + res.push(bid); + } + } + + return res; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function buildRequest(winTop, host, adUnits) { + return { + method: 'POST', + url: "https://".concat(host, "/hb"), + data: { + secure: location.protocol === 'https:', + deviceWidth: winTop.screen.width, + deviceHeight: winTop.screen.height, + adUnits: adUnits + } + }; +} + +function buildPlacement(bidRequest) { + return { + host: bidRequest.params.host, + adUnit: { + id: bidRequest.params.adUnitId, + bidId: bidRequest.bidId, + transactionId: bidRequest.transactionId, + sizes: bidRequest.sizes.map(function (size) { + return { + width: size[0], + height: size[1] + }; + }), + type: bidRequest.params.adUnitType.toUpperCase() + } + }; +} + +/***/ }) + +},[598]); \ No newline at end of file diff --git a/build/dist/proxistoreBidAdapter.js b/build/dist/proxistoreBidAdapter.js new file mode 100644 index 00000000000..e35b6e97f54 --- /dev/null +++ b/build/dist/proxistoreBidAdapter.js @@ -0,0 +1,186 @@ +pbjsChunk([139],{ + +/***/ 600: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(601); + + +/***/ }), + +/***/ 601: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_storageManager_js__ = __webpack_require__(9); + + +var BIDDER_CODE = 'proxistore'; +var storage = Object(__WEBPACK_IMPORTED_MODULE_1__src_storageManager_js__["b" /* getStorageManager */])(); +var PROXISTORE_VENDOR_ID = 418; + +function _createServerRequest(bidRequests, bidderRequest) { + var sizeIds = []; + bidRequests.forEach(function (bid) { + var sizeId = { + id: bid.bidId, + sizes: bid.sizes.map(function (size) { + return { + width: size[0], + height: size[1] + }; + }) + }; + sizeIds.push(sizeId); + }); + var payload = { + auctionId: bidRequests[0].auctionId, + transactionId: bidRequests[0].auctionId, + bids: sizeIds, + website: bidRequests[0].params.website, + language: bidRequests[0].params.language, + gdpr: { + applies: false + } + }; + var options = { + contentType: 'application/json', + withCredentials: true + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' && bidderRequest.gdprConsent.gdprApplies) { + payload.gdpr.applies = true; + } + + if (typeof bidderRequest.gdprConsent.consentString === 'string' && bidderRequest.gdprConsent.consentString) { + payload.gdpr.consentString = bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest.gdprConsent.vendorData && bidderRequest.gdprConsent.vendorData.vendorConsents && typeof bidderRequest.gdprConsent.vendorData.vendorConsents[PROXISTORE_VENDOR_ID.toString(10)] !== 'undefined') { + payload.gdpr.consentGiven = !!bidderRequest.gdprConsent.vendorData.vendorConsents[PROXISTORE_VENDOR_ID.toString(10)]; + } + } + + return { + method: 'POST', + url: bidRequests[0].params.url || 'https://abs.proxistore.com/' + payload.language + '/v3/rtb/prebid/multi', + data: JSON.stringify(payload), + options: options + }; +} + +function _createBidResponse(response) { + return { + requestId: response.requestId, + cpm: response.cpm, + width: response.width, + height: response.height, + ad: response.ad, + ttl: response.ttl, + creativeId: response.creativeId, + currency: response.currency, + netRevenue: response.netRevenue, + vastUrl: response.vastUrl, + vastXml: response.vastXml, + dealId: response.dealId + }; +} +/** + * Determines whether or not the given bid request is valid. + * + * @param bid The bid params to validate. + * @return boolean True if this is a valid bid, and false otherwise. + */ + + +function isBidRequestValid(bid) { + var hasNoAd = function hasNoAd() { + if (!storage.hasLocalStorage()) { + return false; + } + + var pxNoAds = storage.getDataFromLocalStorage("PX_NoAds_".concat(bid.params.website)); + + if (!pxNoAds) { + return false; + } else { + var storedDate = new Date(pxNoAds); + var now = new Date(); + var diff = Math.abs(storedDate.getTime() - now.getTime()) / 60000; + return diff <= 5; + } + }; + + return !!(bid.params.website && bid.params.language) && !hasNoAd(); +} +/** + * Make a server request from the list of BidRequests. + * + * @param bidRequests - an array of bids + * @param bidderRequest + * @return ServerRequest Info describing the request to the server. + */ + + +function buildRequests(bidRequests, bidderRequest) { + var request = _createServerRequest(bidRequests, bidderRequest); + + return request; +} +/** + * Unpack the response from the server into a list of bids. + * + * @param serverResponse A successful response from the server. + * @param bidRequest Request original server request + * @return An array of bids which were nested inside the server. + */ + + +function interpretResponse(serverResponse, bidRequest) { + var itemName = "PX_NoAds_".concat(websiteFromBidRequest(bidRequest)); + + if (serverResponse.body.length > 0) { + storage.removeDataFromLocalStorage(itemName, true); + return serverResponse.body.map(_createBidResponse); + } else { + storage.setDataInLocalStorage(itemName, new Date()); + return []; + } +} + +var websiteFromBidRequest = function websiteFromBidRequest(bidR) { + if (bidR.data) { + return JSON.parse(bidR.data).website; + } else if (bidR.params.website) { + return bidR.params.website; + } +}; +/** + * Register the user sync pixels which should be dropped after the auction. + * + * @param syncOptions Which user syncs are allowed? + * @param serverResponses List of server's responses. + * @return The user syncs which should be dropped. + */ + + +function getUserSyncs(syncOptions, serverResponses) { + return []; +} + +var spec = { + code: BIDDER_CODE, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[600]); \ No newline at end of file diff --git a/build/dist/pubCommonId.js b/build/dist/pubCommonId.js new file mode 100644 index 00000000000..247bfc45e6e --- /dev/null +++ b/build/dist/pubCommonId.js @@ -0,0 +1,369 @@ +pbjsChunk([138],{ + +/***/ 602: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(603); + + +/***/ }), + +/***/ 603: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["setStorageItem"] = setStorageItem; +/* harmony export (immutable) */ __webpack_exports__["getStorageItem"] = getStorageItem; +/* harmony export (immutable) */ __webpack_exports__["removeStorageItem"] = removeStorageItem; +/* harmony export (immutable) */ __webpack_exports__["isPubcidEnabled"] = isPubcidEnabled; +/* harmony export (immutable) */ __webpack_exports__["getExpInterval"] = getExpInterval; +/* harmony export (immutable) */ __webpack_exports__["getPubcidConfig"] = getPubcidConfig; +/* harmony export (immutable) */ __webpack_exports__["requestBidHook"] = requestBidHook; +/* harmony export (immutable) */ __webpack_exports__["setCookie"] = setCookie; +/* harmony export (immutable) */ __webpack_exports__["getCookie"] = getCookie; +/* harmony export (immutable) */ __webpack_exports__["setConfig"] = setConfig; +/* harmony export (immutable) */ __webpack_exports__["initPubcid"] = initPubcid; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _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. + */ + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); +var ID_NAME = '_pubcid'; +var OPTOUT_NAME = '_pubcid_optout'; +var DEFAULT_EXPIRES = 525600; // 1-year worth of minutes + +var PUB_COMMON = 'PublisherCommonId'; +var EXP_SUFFIX = '_exp'; +var COOKIE = 'cookie'; +var LOCAL_STORAGE = 'html5'; +var pubcidConfig = { + enabled: true, + interval: DEFAULT_EXPIRES, + typeEnabled: LOCAL_STORAGE, + create: true, + extend: true, + pixelUrl: '' +}; +/** + * Set an item in the storage with expiry time. + * @param {string} key Key of the item to be stored + * @param {string} val Value of the item to be stored + * @param {number} expires Expiry time in minutes + */ + +function setStorageItem(key, val, expires) { + try { + if (expires !== undefined && expires != null) { + var expStr = new Date(Date.now() + expires * 60 * 1000).toUTCString(); + storage.setDataInLocalStorage(key + EXP_SUFFIX, expStr); + } + + storage.setDataInLocalStorage(key, val); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"](e); + } +} +/** + * Retrieve an item from storage if it exists and hasn't expired. + * @param {string} key Key of the item. + * @returns {string|null} Value of the item. + */ + +function getStorageItem(key) { + var val = null; + + try { + var expVal = storage.getDataFromLocalStorage(key + EXP_SUFFIX); + + if (!expVal) { + // If there is no expiry time, then just return the item + val = storage.getDataFromLocalStorage(key); + } else { + // Only return the item if it hasn't expired yet. + // Otherwise delete the item. + var expDate = new Date(expVal); + var isValid = expDate.getTime() - Date.now() > 0; + + if (isValid) { + val = storage.getDataFromLocalStorage(key); + } else { + removeStorageItem(key); + } + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"](e); + } + + return val; +} +/** + * Remove an item from storage + * @param {string} key Key of the item to be removed + */ + +function removeStorageItem(key) { + try { + storage.removeDataFromLocalStorage(key + EXP_SUFFIX); + storage.removeDataFromLocalStorage(key); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"](e); + } +} +/** + * Read a value either from cookie or local storage + * @param {string} name Name of the item + * @param {string} type storage type override + * @returns {string|null} a string if item exists + */ + +function readValue(name, type) { + var value; + + if (!type) { + type = pubcidConfig.typeEnabled; + } + + if (type === COOKIE) { + value = storage.getCookie(name); + } else if (type === LOCAL_STORAGE) { + value = getStorageItem(name); + } + + if (value === 'undefined' || value === 'null') { + return null; + } + + return value; +} +/** + * Write a value to either cookies or local storage + * @param {string} name Name of the item + * @param {string} value Value to be stored + * @param {number} expInterval Expiry time in minutes + */ + + +function writeValue(name, value, expInterval) { + if (name && value) { + if (pubcidConfig.typeEnabled === COOKIE) { + setCookie(name, value, expInterval, 'Lax'); + } else if (pubcidConfig.typeEnabled === LOCAL_STORAGE) { + setStorageItem(name, value, expInterval); + } + } +} +/** + * Add a callback at end of auction to fetch a pixel + * @param {string} pixelUrl Pixel URL + * @param {string} id pubcid + * @returns {boolean} True if callback is queued + */ + + +function queuePixelCallback(pixelUrl, id) { + if (!pixelUrl) { + return false; + } + + id = id || ''; // Use pubcid as a cache buster + + var urlInfo = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](pixelUrl); + urlInfo.search.id = encodeURIComponent('pubcid:' + id); + var targetUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["buildUrl"](urlInfo); + __WEBPACK_IMPORTED_MODULE_2__src_events_js___default.a.on(__WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_END, function auctionEndHandler() { + __WEBPACK_IMPORTED_MODULE_2__src_events_js___default.a.off(__WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_END, auctionEndHandler); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](targetUrl); + }); + return true; +} + +function isPubcidEnabled() { + return pubcidConfig.enabled; +} +function getExpInterval() { + return pubcidConfig.interval; +} +function getPubcidConfig() { + return pubcidConfig; +} +/** + * 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(next, config) { + var adUnits = config.adUnits || pbjs.adUnits; + var pubcid = null; // Pass control to the next function if not enabled + + if (!pubcidConfig.enabled || !pubcidConfig.typeEnabled) { + return next.call(this, config); + } + + if (_typeof(window[PUB_COMMON]) === 'object') { + // If the page includes its own pubcid object, then use that instead. + pubcid = window[PUB_COMMON].getId(); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"](PUB_COMMON + ': pubcid = ' + pubcid); + } else { + // Otherwise get the existing cookie + pubcid = readValue(ID_NAME); + + if (!pubcid) { + if (pubcidConfig.create) { + // Special handling for local storage to retain previously stored id in cookies + if (pubcidConfig.typeEnabled === LOCAL_STORAGE) { + pubcid = readValue(ID_NAME, COOKIE); + } // Generate a new id + + + if (!pubcid) { + pubcid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"](); + } // Update the cookie/storage with the latest expiration date + + + writeValue(ID_NAME, pubcid, pubcidConfig.interval); // Only return pubcid if it is saved successfully + + pubcid = readValue(ID_NAME); + } + + queuePixelCallback(pubcidConfig.pixelUrl, pubcid); + } else if (pubcidConfig.extend) { + // Update the cookie/storage with the latest expiration date + if (!queuePixelCallback(pubcidConfig.pixelUrl, pubcid)) { + writeValue(ID_NAME, pubcid, pubcidConfig.interval); + } + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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.call(this, config); +} // Helper to set a cookie + +function setCookie(name, value, expires, sameSite) { + var expTime = new Date(); + expTime.setTime(expTime.getTime() + expires * 1000 * 60); + storage.setCookie(name, value, expTime.toGMTString(), sameSite); +} // Helper to read a cookie + +function getCookie(name) { + return storage.getCookie(name); +} +/** + * 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. + * @param {string} type Type of storage to use + * @param {boolean} create Create the id if missing. Default is true. + * @param {boolean} extend Extend the stored value when id is retrieved. Default is true. + * @param {string} pixelUrl A pixel URL back to the publisher's own domain that may modify cookie attributes. + */ + +function setConfig() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + enable = _ref.enable, + expInterval = _ref.expInterval, + _ref$type = _ref.type, + type = _ref$type === void 0 ? 'html5,cookie' : _ref$type, + create = _ref.create, + extend = _ref.extend, + pixelUrl = _ref.pixelUrl; + + if (enable !== undefined) { + pubcidConfig.enabled = enable; + } + + if (expInterval !== undefined) { + pubcidConfig.interval = parseInt(expInterval, 10); + } + + if (isNaN(pubcidConfig.interval)) { + pubcidConfig.interval = DEFAULT_EXPIRES; + } + + if (create !== undefined) { + pubcidConfig.create = create; + } + + if (extend !== undefined) { + pubcidConfig.extend = extend; + } + + if (pixelUrl !== undefined) { + pubcidConfig.pixelUrl = pixelUrl; + } // Default is to use local storage. Fall back to + // cookie only if local storage is not supported. + + + pubcidConfig.typeEnabled = null; + var typeArray = type.split(','); + + for (var i = 0; i < typeArray.length; ++i) { + var name = typeArray[i].trim(); + + if (name === COOKIE) { + if (storage.cookiesAreEnabled()) { + pubcidConfig.typeEnabled = COOKIE; + break; + } + } else if (name === LOCAL_STORAGE) { + if (storage.hasLocalStorage()) { + pubcidConfig.typeEnabled = LOCAL_STORAGE; + break; + } + } + } +} +/** + * Initialize module by 1) subscribe to configuration changes and 2) register hook + */ + +function initPubcid() { + __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('pubcid', function (config) { + return setConfig(config.pubcid); + }); + var optout = storage.cookiesAreEnabled() && readValue(OPTOUT_NAME, COOKIE) || storage.hasLocalStorage() && readValue(OPTOUT_NAME, LOCAL_STORAGE); + + if (!optout) { + pbjs.requestBids.before(requestBidHook); + } +} +initPubcid(); + +/***/ }) + +},[602]); \ No newline at end of file diff --git a/build/dist/pubCommonIdSystem.js b/build/dist/pubCommonIdSystem.js new file mode 100644 index 00000000000..d5bf3e7df13 --- /dev/null +++ b/build/dist/pubCommonIdSystem.js @@ -0,0 +1,168 @@ +pbjsChunk([137],{ + +/***/ 604: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(605); + + +/***/ }), + +/***/ 605: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pubCommonIdSubmodule", function() { return pubCommonIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/** + * This module adds PubCommonId to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/pubCommonIdSystem + * @requires module:modules/userId + */ + + + +var PUB_COMMON_ID = 'PublisherCommonId'; +var MODULE_NAME = 'pubCommonId'; +var storage = Object(__WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__["b" /* getStorageManager */])(null, 'pubCommonId'); +/** @type {Submodule} */ + +var pubCommonIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: MODULE_NAME, + + /** + * Return a callback function that calls the pixelUrl with id as a query parameter + * @param pixelUrl + * @param id + * @returns {function} + */ + makeCallback: function makeCallback(pixelUrl) { + var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + + if (!pixelUrl) { + return; + } // Use pubcid as a cache buster + + + var urlInfo = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](pixelUrl); + urlInfo.search.id = encodeURIComponent('pubcid:' + id); + var targetUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["buildUrl"](urlInfo); + return function () { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](targetUrl); + }; + }, + + /** + * decode the stored id value for passing to bid requests + * @function + * @param {string} value + * @returns {{pubcid:string}} + */ + decode: function decode(value) { + return { + 'pubcid': value + }; + }, + + /** + * performs action to obtain id + * @function + * @param {SubmoduleParams} [configParams] + * @returns {IdResponse} + */ + getId: function getId() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$create = _ref.create, + create = _ref$create === void 0 ? true : _ref$create, + pixelUrl = _ref.pixelUrl; + + try { + if (_typeof(window[PUB_COMMON_ID]) === 'object') { + // If the page includes its own pubcid module, then save a copy of id. + return { + id: window[PUB_COMMON_ID].getId() + }; + } + } catch (e) {} + + var newId = create && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["hasDeviceAccess"]() ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"]() : undefined; + return { + id: newId, + callback: this.makeCallback(pixelUrl, newId) + }; + }, + + /** + * performs action to extend an id + * @function + * @param {SubmoduleParams} [configParams] + * @param {Object} storedId existing id + * @returns {IdResponse|undefined} + */ + extendId: function extendId() { + var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref2$extend = _ref2.extend, + extend = _ref2$extend === void 0 ? false : _ref2$extend, + pixelUrl = _ref2.pixelUrl; + + var storedId = arguments.length > 1 ? arguments[1] : undefined; + + try { + if (_typeof(window[PUB_COMMON_ID]) === 'object') { + // If the page includes its onw pubcid module, then there is nothing to do. + return; + } + } catch (e) {} + + if (extend) { + // When extending, only one of response fields is needed + var callback = this.makeCallback(pixelUrl, storedId); + return callback ? { + callback: callback + } : { + id: storedId + }; + } + }, + + /** + * @param {string} domain + * @param {HTMLDocument} document + * @return {(string|undefined)} + */ + domainOverride: function domainOverride() { + var domainElements = document.domain.split('.'); + var cookieName = "_gd".concat(Date.now()); + + for (var i = 0, topDomain; i < domainElements.length; i++) { + var nextDomain = domainElements.slice(i).join('.'); // write test cookie + + storage.setCookie(cookieName, '1', undefined, undefined, nextDomain); // read test cookie to verify domain was valid + + if (storage.getCookie(cookieName) === '1') { + // delete test cookie + storage.setCookie(cookieName, '', 'Thu, 01 Jan 1970 00:00:01 GMT', undefined, nextDomain); // cookie was written successfully using test domain so the topDomain is updated + + topDomain = nextDomain; + } else { + // cookie failed to write using test domain so exit by returning the topDomain + return topDomain; + } + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_hook_js__["e" /* submodule */])('userId', pubCommonIdSubmodule); + +/***/ }) + +},[604]); \ No newline at end of file diff --git a/build/dist/pubgeniusBidAdapter.js b/build/dist/pubgeniusBidAdapter.js new file mode 100644 index 00000000000..45bcdc709d1 --- /dev/null +++ b/build/dist/pubgeniusBidAdapter.js @@ -0,0 +1,251 @@ +pbjsChunk([136],{ + +/***/ 606: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(607); + + +/***/ }), + +/***/ 607: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); + + + + + +var BIDDER_VERSION = '1.0.0'; +var BASE_URL = 'https://ortb.adpearl.io'; +var spec = { + code: 'pubgenius', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + var adUnitId = bid.params.adUnitId; + + if (!Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isStr"])(adUnitId) && !Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isInteger"])(adUnitId)) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"])('pubgenius bidder params: adUnitId must be a string or integer.'); + return false; + } + + var sizes = Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"])(bid, 'mediaTypes.banner.sizes'); + return !!(sizes && sizes.length) && sizes.every(function (size) { + return Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isArrayOfNums"])(size, 2); + }); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var data = { + id: bidderRequest.auctionId, + imp: bidRequests.map(buildImp), + tmax: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout'), + ext: { + pbadapter: { + version: BIDDER_VERSION + } + } + }; + var site = buildSite(bidderRequest); + + if (site) { + data.site = site; + } + + var gdpr = bidderRequest.gdprConsent; + + if (gdpr) { + var applies = gdpr.gdprApplies; + var consent = gdpr.consentString; + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepSetValue"])(data, 'regs.ext.gdpr', numericBoolean(applies)); + + if (applies && consent) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepSetValue"])(data, 'user.ext.consent', consent); + } + } + + var usp = bidderRequest.uspConsent; + + if (usp) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepSetValue"])(data, 'regs.ext.us_privacy', usp); + } + + var schain = bidRequests[0].schain; + + if (schain) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepSetValue"])(data, 'source.ext.schain', schain); + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa')) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepSetValue"])(data, 'regs.coppa', 1); + } + + var bidUserIdAsEids = Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"])(bidRequests, '0.userIdAsEids'); + + if (bidUserIdAsEids && bidUserIdAsEids.length) { + var eids = bidUserIdAsEids.filter(function (eid) { + return eid.source === 'adserver.org'; + }); + + if (eids.length) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepSetValue"])(data, 'user.ext.eids', eids); + } + } + + return { + method: 'POST', + url: "".concat(getBaseUrl(), "/prebid/auction"), + data: data + }; + }, + interpretResponse: function interpretResponse(_ref) { + var body = _ref.body; + var bidResponses = []; + var currency = body.cur || 'USD'; + var seatbids = body.seatbid; + + if (seatbids) { + seatbids.forEach(function (seatbid) { + seatbid.bid.forEach(function (bid) { + var bidResponse = interpretBid(bid); + bidResponse.currency = currency; + bidResponses.push(bidResponse); + }); + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + var params = {}; + + if (gdprConsent) { + params.gdpr = numericBoolean(gdprConsent.gdprApplies); + + if (gdprConsent.consentString) { + params.consent = gdprConsent.consentString; + } + } + + if (uspConsent) { + params.us_privacy = uspConsent; + } + + var qs = Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["parseQueryStringParameters"])(params); + syncs.push({ + type: 'iframe', + url: "".concat(getBaseUrl(), "/usersync/pixels.html?").concat(qs) + }); + } + + return syncs; + }, + onTimeout: function onTimeout(data) { + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])("".concat(getBaseUrl(), "/prebid/events?type=timeout"), null, JSON.stringify(data), { + method: 'POST' + }); + } +}; + +function buildImp(bid) { + var imp = { + id: bid.bidId, + banner: { + format: Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepAccess"])(bid, 'mediaTypes.banner.sizes').map(function (size) { + return { + w: size[0], + h: size[1] + }; + }), + topframe: numericBoolean(!Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["inIframe"])()) + }, + tagid: String(bid.params.adUnitId) + }; + var bidFloor = bid.params.bidFloor; + + if (Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isNumber"])(bidFloor)) { + imp.bidfloor = bidFloor; + } + + var pos = bid.params.position; + + if (Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isInteger"])(pos)) { + imp.banner.pos = pos; + } + + if (bid.params.test) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["deepSetValue"])(imp, 'ext.test', 1); + } + + return imp; +} + +function buildSite(bidderRequest) { + var site = null; + var refererInfo = bidderRequest.refererInfo; + var pageUrl = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl') || refererInfo.canonicalUrl || refererInfo.referer; + + if (pageUrl) { + site = site || {}; + site.page = pageUrl; + } + + if (refererInfo.reachedTop) { + try { + var pageRef = window.top.document.referrer; + + if (pageRef) { + site = site || {}; + site.ref = pageRef; + } + } catch (e) {} + } + + return site; +} + +function interpretBid(bid) { + var bidResponse = { + requestId: bid.impid, + cpm: bid.price, + width: bid.w, + height: bid.h, + ad: bid.adm, + ttl: bid.exp, + creativeId: bid.crid, + netRevenue: true + }; + + if (bid.adomain && bid.adomain.length) { + bidResponse.meta = { + advertiserDomains: bid.adomain + }; + } + + return bidResponse; +} + +function numericBoolean(value) { + return value ? 1 : 0; +} + +function getBaseUrl() { + var pubg = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pubgenius'); + return pubg && pubg.endpoint || BASE_URL; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[606]); \ No newline at end of file diff --git a/build/dist/pubmaticAnalyticsAdapter.js b/build/dist/pubmaticAnalyticsAdapter.js new file mode 100644 index 00000000000..ebb6ab25973 --- /dev/null +++ b/build/dist/pubmaticAnalyticsAdapter.js @@ -0,0 +1,756 @@ +pbjsChunk([23],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 608: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(609); + + +/***/ }), + +/***/ 609: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_prebidGlobal_js__ = __webpack_require__(20); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + + /// /////////// CONSTANTS ////////////// + +var ADAPTER_CODE = 'pubmatic'; +var SEND_TIMEOUT = 2000; +var END_POINT_HOST = 'https://t.pubmatic.com/'; +var END_POINT_BID_LOGGER = END_POINT_HOST + 'wl?'; +var END_POINT_WIN_BID_LOGGER = END_POINT_HOST + 'wt?'; +var LOG_PRE_FIX = 'PubMatic-Analytics: '; +var cache = { + auctions: {} +}; +var SUCCESS = 'success'; +var NO_BID = 'no-bid'; +var ERROR = 'error'; +var REQUEST_ERROR = 'request-error'; +var TIMEOUT_ERROR = 'timeout-error'; +var EMPTY_STRING = ''; +var MEDIA_TYPE_BANNER = 'banner'; +var CURRENCY_USD = 'USD'; +var BID_PRECISION = 2; // todo: input profileId and profileVersionId ; defaults to zero or one + +var DEFAULT_PUBLISHER_ID = 0; +var DEFAULT_PROFILE_ID = 0; +var DEFAULT_PROFILE_VERSION_ID = 0; +var enc = window.encodeURIComponent; /// /////////// VARIABLES ////////////// + +var publisherId = DEFAULT_PUBLISHER_ID; // int: mandatory + +var profileId = DEFAULT_PROFILE_ID; // int: optional + +var profileVersionId = DEFAULT_PROFILE_VERSION_ID; // int: optional + +var s2sBidders = []; /// /////////// HELPER FUNCTIONS ////////////// + +function sizeToDimensions(size) { + return { + width: size.w || size[0], + height: size.h || size[1] + }; +} + +function validMediaType(type) { + return { + 'banner': 1, + 'native': 1, + 'video': 1 + }.hasOwnProperty(type); +} + +function formatSource(src) { + if (typeof src === 'undefined') { + src = 'client'; + } else if (src === 's2s') { + src = 'server'; + } + + return src.toLowerCase(); +} + +function setMediaTypes(types, bid) { + if (bid.mediaType && validMediaType(bid.mediaType)) { + return [bid.mediaType]; + } + + if (Array.isArray(types)) { + return types.filter(validMediaType); + } + + if (_typeof(types) === 'object') { + if (!bid.sizes) { + bid.dimensions = []; + + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_each"](types, function (type) { + return bid.dimensions = bid.dimensions.concat(type.sizes.map(sizeToDimensions)); + }); + } + + return Object.keys(types).filter(validMediaType); + } + + return [MEDIA_TYPE_BANNER]; +} + +function copyRequiredBidDetails(bid) { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['bidder', function (bidder) { + return bidder.toLowerCase(); + }, 'bidId', 'status', function () { + return NO_BID; + }, // default a bid to NO_BID until response is recieved or bid is timed out + 'finalSource as source', 'params', 'adUnit', function () { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['adUnitCode', 'transactionId', 'sizes as dimensions', function (sizes) { + return sizes.map(sizeToDimensions); + }, 'mediaTypes', function (types) { + return setMediaTypes(types, bid); + }]); + }]); +} + +function setBidStatus(bid, args) { + switch (args.getStatusCode()) { + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.STATUS.GOOD: + bid.status = SUCCESS; + delete bid.error; // it's possible for this to be set by a previous timeout + + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.STATUS.NO_BID: + bid.status = NO_BID; + delete bid.error; + break; + + default: + bid.status = ERROR; + bid.error = { + code: REQUEST_ERROR + }; + } +} + +function parseBidResponse(bid) { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['bidPriceUSD', function () { + // todo: check whether currency cases are handled here + if (typeof bid.currency === 'string' && bid.currency.toUpperCase() === CURRENCY_USD) { + return window.parseFloat(Number(bid.cpm).toFixed(BID_PRECISION)); + } // use currency conversion function if present + + + if (typeof bid.getCpmInNewCurrency === 'function') { + return window.parseFloat(Number(bid.getCpmInNewCurrency(CURRENCY_USD)).toFixed(BID_PRECISION)); + } + + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logWarn"](LOG_PRE_FIX + 'Could not determine the Net cpm in USD for the bid thus using bid.cpm', bid); + return bid.cpm; + }, 'bidGrossCpmUSD', function () { + if (typeof bid.originalCurrency === 'string' && bid.originalCurrency.toUpperCase() === CURRENCY_USD) { + return window.parseFloat(Number(bid.originalCpm).toFixed(BID_PRECISION)); + } // use currency conversion function if present + + + if (typeof Object(__WEBPACK_IMPORTED_MODULE_6__src_prebidGlobal_js__["a" /* getGlobal */])().convertCurrency === 'function') { + return window.parseFloat(Number(Object(__WEBPACK_IMPORTED_MODULE_6__src_prebidGlobal_js__["a" /* getGlobal */])().convertCurrency(bid.originalCpm, bid.originalCurrency, CURRENCY_USD)).toFixed(BID_PRECISION)); + } + + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logWarn"](LOG_PRE_FIX + 'Could not determine the Gross cpm in USD for the bid, thus using bid.originalCpm', bid); + return bid.originalCpm; + }, 'dealId', 'currency', 'cpm', function () { + return window.parseFloat(Number(bid.cpm).toFixed(BID_PRECISION)); + }, 'originalCpm', function () { + return window.parseFloat(Number(bid.originalCpm).toFixed(BID_PRECISION)); + }, 'originalCurrency', 'dealChannel', 'meta', 'status', 'error', 'bidId', 'mediaType', 'params', 'mi', 'partnerImpId', // partner impression ID + 'dimensions', function () { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['width', 'height']); + }]); +} + +function getDomainFromUrl(url) { + var a = window.document.createElement('a'); + a.href = url; + return a.hostname; +} + +function gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestBid) { + highestBid = highestBid && highestBid.length > 0 ? highestBid[0] : null; + return Object.keys(adUnit.bids).reduce(function (partnerBids, bidId) { + var bid = adUnit.bids[bidId]; + partnerBids.push({ + 'pn': bid.bidder, + 'bidid': bid.bidId, + 'db': bid.bidResponse ? 0 : 1, + 'kgpv': bid.params.kgpv ? bid.params.kgpv : adUnitId, + 'kgpsv': bid.params.kgpv ? bid.params.kgpv : adUnitId, + 'psz': bid.bidResponse ? bid.bidResponse.dimensions.width + 'x' + bid.bidResponse.dimensions.height : '0x0', + 'eg': bid.bidResponse ? bid.bidResponse.bidGrossCpmUSD : 0, + 'en': bid.bidResponse ? bid.bidResponse.bidPriceUSD : 0, + 'di': bid.bidResponse ? bid.bidResponse.dealId || EMPTY_STRING : EMPTY_STRING, + 'dc': bid.bidResponse ? bid.bidResponse.dealChannel || EMPTY_STRING : EMPTY_STRING, + 'l1': bid.bidResponse ? bid.clientLatencyTimeMs : 0, + 'l2': 0, + 'ss': s2sBidders.indexOf(bid.bidder) > -1 ? 1 : 0, + 't': bid.status == ERROR && bid.error.code == TIMEOUT_ERROR ? 1 : 0, + 'wb': highestBid && highestBid.requestId === bid.bidId ? 1 : 0, + 'mi': bid.bidResponse ? bid.bidResponse.mi || undefined : undefined, + 'af': bid.bidResponse ? bid.bidResponse.mediaType || undefined : undefined, + 'ocpm': bid.bidResponse ? bid.bidResponse.originalCpm || 0 : 0, + 'ocry': bid.bidResponse ? bid.bidResponse.originalCurrency || CURRENCY_USD : CURRENCY_USD, + 'piid': bid.bidResponse ? bid.bidResponse.partnerImpId || EMPTY_STRING : EMPTY_STRING + }); + return partnerBids; + }, []); +} + +function executeBidsLoggerCall(e, highestCpmBids) { + var auctionId = e.auctionId; + var referrer = __WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('pageUrl') || cache.auctions[auctionId].referer || ''; + var auctionCache = cache.auctions[auctionId]; + var outputObj = { + s: [] + }; + var pixelURL = END_POINT_BID_LOGGER; + + if (!auctionCache) { + return; + } + + if (auctionCache.sent) { + return; + } + + pixelURL += 'pubid=' + publisherId; + outputObj['pubid'] = '' + publisherId; + outputObj['iid'] = '' + auctionId; + outputObj['to'] = '' + auctionCache.timeout; + outputObj['purl'] = referrer; + outputObj['orig'] = getDomainFromUrl(referrer); + outputObj['tst'] = Math.round(new window.Date().getTime() / 1000); + outputObj['pid'] = '' + profileId; + outputObj['pdvid'] = '' + profileVersionId; + + outputObj['tgid'] = function () { + var testGroupId = parseInt(__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('testGroupId') || 0); + + if (testGroupId <= 15 && testGroupId >= 0) { + return testGroupId; + } + + return 0; + }(); // GDPR support + + + if (auctionCache.gdprConsent) { + outputObj['cns'] = auctionCache.gdprConsent.consentString || ''; + outputObj['gdpr'] = auctionCache.gdprConsent.gdprApplies === true ? 1 : 0; + pixelURL += '&gdEn=1'; + } + + outputObj.s = Object.keys(auctionCache.adUnitCodes).reduce(function (slotsArray, adUnitId) { + var adUnit = auctionCache.adUnitCodes[adUnitId]; + var slotObject = { + 'sn': adUnitId, + 'sz': adUnit.dimensions.map(function (e) { + return e[0] + 'x' + e[1]; + }), + 'ps': gatherPartnerBidsForAdUnitForLogger(adUnit, adUnitId, highestCpmBids.filter(function (bid) { + return bid.adUnitCode === adUnitId; + })) + }; + slotsArray.push(slotObject); + return slotsArray; + }, []); + auctionCache.sent = true; + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(pixelURL, null, 'json=' + enc(JSON.stringify(outputObj)), { + contentType: 'application/x-www-form-urlencoded', + withCredentials: true, + method: 'POST' + }); +} + +function executeBidWonLoggerCall(auctionId, adUnitId) { + var winningBidId = cache.auctions[auctionId].adUnitCodes[adUnitId].bidWon; + var winningBid = cache.auctions[auctionId].adUnitCodes[adUnitId].bids[winningBidId]; + var pixelURL = END_POINT_WIN_BID_LOGGER; + pixelURL += 'pubid=' + publisherId; + pixelURL += '&purl=' + enc(__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('pageUrl') || cache.auctions[auctionId].referer || ''); + pixelURL += '&tst=' + Math.round(new window.Date().getTime() / 1000); + pixelURL += '&iid=' + enc(auctionId); + pixelURL += '&bidid=' + enc(winningBidId); + pixelURL += '&pid=' + enc(profileId); + pixelURL += '&pdvid=' + enc(profileVersionId); + pixelURL += '&slot=' + enc(adUnitId); + pixelURL += '&pn=' + enc(winningBid.bidder); + pixelURL += '&en=' + enc(winningBid.bidResponse.bidPriceUSD); + pixelURL += '&eg=' + enc(winningBid.bidResponse.bidGrossCpmUSD); + pixelURL += '&kgpv=' + enc(winningBid.params.kgpv || adUnitId); + pixelURL += '&piid=' + enc(winningBid.bidResponse.partnerImpId || EMPTY_STRING); + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(pixelURL, null, null, { + contentType: 'application/x-www-form-urlencoded', + withCredentials: true, + method: 'GET' + }); +} /// /////////// ADAPTER EVENT HANDLER FUNCTIONS ////////////// + + +function auctionInitHandler(args) { + s2sBidders = function () { + var s2sConf = __WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('s2sConfig'); + return s2sConf && __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["isArray"](s2sConf.bidders) ? s2sConf.bidders : []; + }(); + + var cacheEntry = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](args, ['timestamp', 'timeout', 'bidderDonePendingCount', function () { + return args.bidderRequests.length; + }]); + cacheEntry.adUnitCodes = {}; + cacheEntry.referer = args.bidderRequests[0].refererInfo.referer; + cache.auctions[args.auctionId] = cacheEntry; +} + +function bidRequestedHandler(args) { + cache.auctions[args.auctionId].gdprConsent = args.gdprConsent || undefined; + args.bids.forEach(function (bid) { + if (!cache.auctions[args.auctionId].adUnitCodes.hasOwnProperty(bid.adUnitCode)) { + cache.auctions[args.auctionId].adUnitCodes[bid.adUnitCode] = { + bids: {}, + bidWon: false, + dimensions: bid.sizes + }; + } + + cache.auctions[args.auctionId].adUnitCodes[bid.adUnitCode].bids[bid.bidId] = copyRequiredBidDetails(bid); + }); +} + +function bidResponseHandler(args) { + var bid = cache.auctions[args.auctionId].adUnitCodes[args.adUnitCode].bids[args.requestId]; + + if (!bid) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"](LOG_PRE_FIX + 'Could not find associated bid request for bid response with requestId: ', args.requestId); + return; + } + + bid.source = formatSource(bid.source || args.source); + setBidStatus(bid, args); + bid.clientLatencyTimeMs = Date.now() - cache.auctions[args.auctionId].timestamp; + bid.bidResponse = parseBidResponse(args); +} + +function bidderDoneHandler(args) { + cache.auctions[args.auctionId].bidderDonePendingCount--; + args.bids.forEach(function (bid) { + var cachedBid = cache.auctions[bid.auctionId].adUnitCodes[bid.adUnitCode].bids[bid.bidId || bid.requestId]; + + if (typeof bid.serverResponseTimeMs !== 'undefined') { + cachedBid.serverLatencyTimeMs = bid.serverResponseTimeMs; + } + + if (!cachedBid.status) { + cachedBid.status = NO_BID; + } + + if (!cachedBid.clientLatencyTimeMs) { + cachedBid.clientLatencyTimeMs = Date.now() - cache.auctions[bid.auctionId].timestamp; + } + }); +} + +function bidWonHandler(args) { + var auctionCache = cache.auctions[args.auctionId]; + auctionCache.adUnitCodes[args.adUnitCode].bidWon = args.requestId; + executeBidWonLoggerCall(args.auctionId, args.adUnitCode); +} + +function auctionEndHandler(args) { + var _this = this; + + // if for the given auction bidderDonePendingCount == 0 then execute logger call sooners + var highestCpmBids = Object(__WEBPACK_IMPORTED_MODULE_6__src_prebidGlobal_js__["a" /* getGlobal */])().getHighestCpmBids() || []; + setTimeout(function () { + executeBidsLoggerCall.call(_this, args, highestCpmBids); + }, cache.auctions[args.auctionId].bidderDonePendingCount === 0 ? 500 : SEND_TIMEOUT); +} + +function bidTimeoutHandler(args) { + // db = 1 and t = 1 means bidder did NOT respond with a bid but we got a timeout notification + // db = 0 and t = 1 means bidder did respond with a bid but post timeout + args.forEach(function (badBid) { + var auctionCache = cache.auctions[badBid.auctionId]; + var bid = auctionCache.adUnitCodes[badBid.adUnitCode].bids[badBid.bidId || badBid.requestId]; + + if (bid) { + bid.status = ERROR; + bid.error = { + code: TIMEOUT_ERROR + }; + } else { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logWarn"](LOG_PRE_FIX + 'bid not found'); + } + }); +} /// /////////// ADAPTER DEFINITION ////////////// + + +var baseAdapter = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: 'endpoint' +}); + +var pubmaticAdapter = _extends({}, baseAdapter, { + enableAnalytics: function enableAnalytics() { + var conf = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var error = false; + + if (_typeof(conf.options) === 'object') { + if (conf.options.publisherId) { + publisherId = Number(conf.options.publisherId); + } + + profileId = Number(conf.options.profileId) || DEFAULT_PROFILE_ID; + profileVersionId = Number(conf.options.profileVersionId) || DEFAULT_PROFILE_VERSION_ID; + } else { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"](LOG_PRE_FIX + 'Config not found.'); + error = true; + } + + if (!publisherId) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"](LOG_PRE_FIX + 'Missing publisherId(Number).'); + error = true; + } + + if (error) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"](LOG_PRE_FIX + 'Not collecting data due to error(s).'); + } else { + baseAdapter.enableAnalytics.call(this, conf); + } + }, + disableAnalytics: function disableAnalytics() { + publisherId = DEFAULT_PUBLISHER_ID; + profileId = DEFAULT_PROFILE_ID; + profileVersionId = DEFAULT_PROFILE_VERSION_ID; + s2sBidders = []; + baseAdapter.disableAnalytics.apply(this, arguments); + }, + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + switch (eventType) { + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_INIT: + auctionInitHandler(args); + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_REQUESTED: + bidRequestedHandler(args); + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_RESPONSE: + bidResponseHandler(args); + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BIDDER_DONE: + bidderDoneHandler(args); + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_WON: + bidWonHandler(args); + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_END: + auctionEndHandler(args); + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_TIMEOUT: + bidTimeoutHandler(args); + break; + } + } +}); /// /////////// ADAPTER REGISTRATION ////////////// + + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: pubmaticAdapter, + code: ADAPTER_CODE +}); +/* harmony default export */ __webpack_exports__["default"] = (pubmaticAdapter); + +/***/ }) + +},[608]); \ No newline at end of file diff --git a/build/dist/pubmaticBidAdapter.js b/build/dist/pubmaticBidAdapter.js new file mode 100644 index 00000000000..98866c6989b --- /dev/null +++ b/build/dist/pubmaticBidAdapter.js @@ -0,0 +1,1295 @@ +pbjsChunk([135],{ + +/***/ 610: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(611); + + +/***/ }), + +/***/ 611: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'pubmatic'; +var LOG_WARN_PREFIX = 'PubMatic: '; +var ENDPOINT = 'https://hbopenbid.pubmatic.com/translator?source=prebid-client'; +var USER_SYNC_URL_IFRAME = 'https://ads.pubmatic.com/AdServer/js/showad.js#PIX&kdntuid=1&p='; +var USER_SYNC_URL_IMAGE = 'https://image8.pubmatic.com/AdServer/ImgSync?p='; +var DEFAULT_CURRENCY = 'USD'; +var AUCTION_TYPE = 1; +var UNDEFINED = undefined; +var DEFAULT_WIDTH = 0; +var DEFAULT_HEIGHT = 0; +var PREBID_NATIVE_HELP_LINK = 'http://prebid.org/dev-docs/show-native-ads.html'; +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 DATA_TYPES = { + 'NUMBER': 'number', + 'STRING': 'string', + 'BOOLEAN': 'boolean', + 'ARRAY': 'array', + 'OBJECT': 'object' +}; +var VIDEO_CUSTOM_PARAMS = { + 'mimes': DATA_TYPES.ARRAY, + 'minduration': DATA_TYPES.NUMBER, + 'maxduration': DATA_TYPES.NUMBER, + 'startdelay': DATA_TYPES.NUMBER, + 'playbackmethod': DATA_TYPES.ARRAY, + 'api': DATA_TYPES.ARRAY, + 'protocols': DATA_TYPES.ARRAY, + 'w': DATA_TYPES.NUMBER, + 'h': DATA_TYPES.NUMBER, + 'battr': DATA_TYPES.ARRAY, + 'linearity': DATA_TYPES.NUMBER, + 'placement': DATA_TYPES.NUMBER, + 'minbitrate': DATA_TYPES.NUMBER, + 'maxbitrate': DATA_TYPES.NUMBER +}; +var NATIVE_ASSETS = { + 'TITLE': { + ID: 1, + KEY: 'title', + TYPE: 0 + }, + 'IMAGE': { + ID: 2, + KEY: 'image', + TYPE: 0 + }, + 'ICON': { + ID: 3, + KEY: 'icon', + TYPE: 0 + }, + 'SPONSOREDBY': { + ID: 4, + KEY: 'sponsoredBy', + TYPE: 1 + }, + // please note that type of SPONSORED is also 1 + 'BODY': { + ID: 5, + KEY: 'body', + TYPE: 2 + }, + // please note that type of DESC is also set to 2 + 'CLICKURL': { + ID: 6, + KEY: 'clickUrl', + TYPE: 0 + }, + 'VIDEO': { + ID: 7, + KEY: 'video', + TYPE: 0 + }, + 'EXT': { + ID: 8, + KEY: 'ext', + TYPE: 0 + }, + 'DATA': { + ID: 9, + KEY: 'data', + TYPE: 0 + }, + 'LOGO': { + ID: 10, + KEY: 'logo', + TYPE: 0 + }, + 'SPONSORED': { + ID: 11, + KEY: 'sponsored', + TYPE: 1 + }, + // please note that type of SPONSOREDBY is also set to 1 + 'DESC': { + ID: 12, + KEY: 'data', + TYPE: 2 + }, + // please note that type of BODY is also set to 2 + 'RATING': { + ID: 13, + KEY: 'rating', + TYPE: 3 + }, + 'LIKES': { + ID: 14, + KEY: 'likes', + TYPE: 4 + }, + 'DOWNLOADS': { + ID: 15, + KEY: 'downloads', + TYPE: 5 + }, + 'PRICE': { + ID: 16, + KEY: 'price', + TYPE: 6 + }, + 'SALEPRICE': { + ID: 17, + KEY: 'saleprice', + TYPE: 7 + }, + 'PHONE': { + ID: 18, + KEY: 'phone', + TYPE: 8 + }, + 'ADDRESS': { + ID: 19, + KEY: 'address', + TYPE: 9 + }, + 'DESC2': { + ID: 20, + KEY: 'desc2', + TYPE: 10 + }, + 'DISPLAYURL': { + ID: 21, + KEY: 'displayurl', + TYPE: 11 + }, + 'CTA': { + ID: 22, + KEY: 'cta', + TYPE: 12 + } +}; +var NATIVE_ASSET_IMAGE_TYPE = { + 'ICON': 1, + 'LOGO': 2, + 'IMAGE': 3 +}; // check if title, image can be added with mandatory field default values + +var NATIVE_MINIMUM_REQUIRED_IMAGE_ASSETS = [{ + id: NATIVE_ASSETS.SPONSOREDBY.ID, + required: true, + data: { + type: 1 + } +}, { + id: NATIVE_ASSETS.TITLE.ID, + required: true +}, { + id: NATIVE_ASSETS.IMAGE.ID, + required: true +}]; +var NET_REVENUE = false; +var dealChannelValues = { + 1: 'PMP', + 5: 'PREF', + 6: 'PMPG' +}; +var publisherId = 0; +var isInvalidNativeRequest = false; +var NATIVE_ASSET_ID_TO_KEY_MAP = {}; +var NATIVE_ASSET_KEY_TO_ASSET_MAP = {}; // loading NATIVE_ASSET_ID_TO_KEY_MAP + +__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](NATIVE_ASSETS, function (anAsset) { + NATIVE_ASSET_ID_TO_KEY_MAP[anAsset.ID] = anAsset.KEY; +}); // loading NATIVE_ASSET_KEY_TO_ASSET_MAP + + +__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](NATIVE_ASSETS, function (anAsset) { + NATIVE_ASSET_KEY_TO_ASSET_MAP[anAsset.KEY] = anAsset; +}); + +function _getDomainFromURL(url) { + var anchor = document.createElement('a'); + anchor.href = url; + return anchor.hostname; +} + +function _parseSlotParam(paramName, paramValue) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](paramValue)) { + paramValue && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Ignoring param key: ' + paramName + ', expects string-value, found ' + _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 (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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]; + } // check if size is mentioned in sizes array. in that case do not check for @ in adslot + + + splits = slot.split('@'); + bid.params.adUnit = splits[0]; + + if (splits.length > 1) { + // i.e size is specified in adslot, so consider that and ignore sizes array + splits = splits[1].split('x'); + + if (splits.length != 2) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'AdSlot Error: adSlot not in required format'); + return; + } + + bid.params.width = parseInt(splits[0], 10); + bid.params.height = parseInt(splits[1], 10); + } else if (bid.hasOwnProperty('mediaTypes') && bid.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]) && bid.mediaTypes.banner.hasOwnProperty('sizes')) { + var i = 0; + var sizeArray = []; + + for (; i < bid.mediaTypes.banner.sizes.length; i++) { + if (bid.mediaTypes.banner.sizes[i].length === 2) { + // sizes[i].length will not be 2 in case where size is set as fluid, we want to skip that entry + sizeArray.push(bid.mediaTypes.banner.sizes[i]); + } + } + + bid.mediaTypes.banner.sizes = sizeArray; + + if (bid.mediaTypes.banner.sizes.length >= 1) { + // set the first size in sizes array in bid.params.width and bid.params.height. These will be sent as primary size. + // The rest of the sizes will be sent in format array. + bid.params.width = bid.mediaTypes.banner.sizes[0][0]; + bid.params.height = bid.mediaTypes.banner.sizes[0][1]; + bid.mediaTypes.banner.sizes = bid.mediaTypes.banner.sizes.splice(1, bid.mediaTypes.banner.sizes.length - 1); + } + } +} + +function _initConf(refererInfo) { + return { + pageURL: refererInfo && refererInfo.referer ? refererInfo.referer : window.location.href, + refURL: window.document.referrer + }; +} + +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) === '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 (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value)) { + conf[key] = value; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Ignoring param : ' + key + ' with value : ' + CUSTOM_PARAMS[key] + ', expects string-value, found ' + _typeof(value)); + } + } + } + } + + return conf; +} + +function _createOrtbTemplate(conf) { + return { + id: '' + new Date().getTime(), + at: AUCTION_TYPE, + cur: [DEFAULT_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 _checkParamDataType(key, value, datatype) { + var errMsg = 'Ignoring param key: ' + key + ', expects ' + datatype + ', found ' + _typeof(value); + + var functionToExecute; + + switch (datatype) { + case DATA_TYPES.BOOLEAN: + functionToExecute = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isBoolean"]; + break; + + case DATA_TYPES.NUMBER: + functionToExecute = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"]; + break; + + case DATA_TYPES.STRING: + functionToExecute = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"]; + break; + + case DATA_TYPES.ARRAY: + functionToExecute = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"]; + break; + } + + if (functionToExecute(value)) { + return value; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + errMsg); + return UNDEFINED; +} + +function _commonNativeRequestObject(nativeAsset, params) { + var key = nativeAsset.KEY; + return { + id: nativeAsset.ID, + required: params[key].required ? 1 : 0, + data: { + type: nativeAsset.TYPE, + len: params[key].len, + ext: params[key].ext + } + }; +} + +function _createNativeRequest(params) { + var nativeRequestObject = { + assets: [] + }; + + for (var key in params) { + if (params.hasOwnProperty(key)) { + var assetObj = {}; + + if (!(nativeRequestObject.assets && nativeRequestObject.assets.length > 0 && nativeRequestObject.assets.hasOwnProperty(key))) { + switch (key) { + case NATIVE_ASSETS.TITLE.KEY: + if (params[key].len || params[key].length) { + assetObj = { + id: NATIVE_ASSETS.TITLE.ID, + required: params[key].required ? 1 : 0, + title: { + len: params[key].len || params[key].length, + ext: params[key].ext + } + }; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Title Length is required for native ad: ' + JSON.stringify(params)); + } + + break; + + case NATIVE_ASSETS.IMAGE.KEY: + if (params[key].sizes && params[key].sizes.length > 0) { + assetObj = { + id: NATIVE_ASSETS.IMAGE.ID, + required: params[key].required ? 1 : 0, + img: { + type: NATIVE_ASSET_IMAGE_TYPE.IMAGE, + w: params[key].w || params[key].width || (params[key].sizes ? params[key].sizes[0] : UNDEFINED), + h: params[key].h || params[key].height || (params[key].sizes ? params[key].sizes[1] : UNDEFINED), + wmin: params[key].wmin || params[key].minimumWidth || (params[key].minsizes ? params[key].minsizes[0] : UNDEFINED), + hmin: params[key].hmin || params[key].minimumHeight || (params[key].minsizes ? params[key].minsizes[1] : UNDEFINED), + mimes: params[key].mimes, + ext: params[key].ext + } + }; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Image sizes is required for native ad: ' + JSON.stringify(params)); + } + + break; + + case NATIVE_ASSETS.ICON.KEY: + if (params[key].sizes && params[key].sizes.length > 0) { + assetObj = { + id: NATIVE_ASSETS.ICON.ID, + required: params[key].required ? 1 : 0, + img: { + type: NATIVE_ASSET_IMAGE_TYPE.ICON, + w: params[key].w || params[key].width || (params[key].sizes ? params[key].sizes[0] : UNDEFINED), + h: params[key].h || params[key].height || (params[key].sizes ? params[key].sizes[1] : UNDEFINED) + } + }; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Icon sizes is required for native ad: ' + JSON.stringify(params)); + } + + ; + break; + + case NATIVE_ASSETS.VIDEO.KEY: + assetObj = { + id: NATIVE_ASSETS.VIDEO.ID, + required: params[key].required ? 1 : 0, + video: { + minduration: params[key].minduration, + maxduration: params[key].maxduration, + protocols: params[key].protocols, + mimes: params[key].mimes, + ext: params[key].ext + } + }; + break; + + case NATIVE_ASSETS.EXT.KEY: + assetObj = { + id: NATIVE_ASSETS.EXT.ID, + required: params[key].required ? 1 : 0 + }; + break; + + case NATIVE_ASSETS.LOGO.KEY: + assetObj = { + id: NATIVE_ASSETS.LOGO.ID, + required: params[key].required ? 1 : 0, + img: { + type: NATIVE_ASSET_IMAGE_TYPE.LOGO, + w: params[key].w || params[key].width || (params[key].sizes ? params[key].sizes[0] : UNDEFINED), + h: params[key].h || params[key].height || (params[key].sizes ? params[key].sizes[1] : UNDEFINED) + } + }; + break; + + case NATIVE_ASSETS.SPONSOREDBY.KEY: + case NATIVE_ASSETS.BODY.KEY: + case NATIVE_ASSETS.RATING.KEY: + case NATIVE_ASSETS.LIKES.KEY: + case NATIVE_ASSETS.DOWNLOADS.KEY: + case NATIVE_ASSETS.PRICE.KEY: + case NATIVE_ASSETS.SALEPRICE.KEY: + case NATIVE_ASSETS.PHONE.KEY: + case NATIVE_ASSETS.ADDRESS.KEY: + case NATIVE_ASSETS.DESC2.KEY: + case NATIVE_ASSETS.DISPLAYURL.KEY: + case NATIVE_ASSETS.CTA.KEY: + assetObj = _commonNativeRequestObject(NATIVE_ASSET_KEY_TO_ASSET_MAP[key], params); + break; + } + } + } + + if (assetObj && assetObj.id) { + nativeRequestObject.assets[nativeRequestObject.assets.length] = assetObj; + } + } + + ; // for native image adtype prebid has to have few required assests i.e. title,sponsoredBy, image + // if any of these are missing from the request then request will not be sent + + var requiredAssetCount = NATIVE_MINIMUM_REQUIRED_IMAGE_ASSETS.length; + var presentrequiredAssetCount = 0; + NATIVE_MINIMUM_REQUIRED_IMAGE_ASSETS.forEach(function (ele) { + var lengthOfExistingAssets = nativeRequestObject.assets.length; + + for (var i = 0; i < lengthOfExistingAssets; i++) { + if (ele.id == nativeRequestObject.assets[i].id) { + presentrequiredAssetCount++; + break; + } + } + }); + + if (requiredAssetCount == presentrequiredAssetCount) { + isInvalidNativeRequest = false; + } else { + isInvalidNativeRequest = true; + } + + return nativeRequestObject; +} + +function _createBannerRequest(bid) { + var sizes = bid.mediaTypes.banner.sizes; + var format = []; + var bannerObj; + + if (sizes !== UNDEFINED && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes)) { + bannerObj = {}; + + if (!bid.params.width && !bid.params.height) { + if (sizes.length === 0) { + // i.e. since bid.params does not have width or height, and length of sizes is 0, need to ignore this banner imp + bannerObj = UNDEFINED; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: mediaTypes.banner.size missing for adunit: ' + bid.params.adUnit + '. Ignoring the banner impression in the adunit.'); + return bannerObj; + } else { + bannerObj.w = parseInt(sizes[0][0], 10); + bannerObj.h = parseInt(sizes[0][1], 10); + sizes = sizes.splice(1, sizes.length - 1); + } + } else { + bannerObj.w = bid.params.width; + bannerObj.h = bid.params.height; + } + + if (sizes.length > 0) { + format = []; + sizes.forEach(function (size) { + if (size.length > 1) { + format.push({ + w: size[0], + h: size[1] + }); + } + }); + + if (format.length > 0) { + bannerObj.format = format; + } + } + + bannerObj.pos = 0; + bannerObj.topframe = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"]() ? 0 : 1; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: mediaTypes.banner.size missing for adunit: ' + bid.params.adUnit + '. Ignoring the banner impression in the adunit.'); + bannerObj = UNDEFINED; + } + + return bannerObj; +} + +function _createVideoRequest(bid) { + var videoData = bid.params.video; + var videoObj; + + if (videoData !== UNDEFINED) { + videoObj = {}; + + for (var key in VIDEO_CUSTOM_PARAMS) { + if (videoData.hasOwnProperty(key)) { + videoObj[key] = _checkParamDataType(key, videoData[key], VIDEO_CUSTOM_PARAMS[key]); + } + } // read playersize and assign to h and w. + + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.mediaTypes.video.playerSize[0])) { + videoObj.w = parseInt(bid.mediaTypes.video.playerSize[0][0], 10); + videoObj.h = parseInt(bid.mediaTypes.video.playerSize[0][1], 10); + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.mediaTypes.video.playerSize[0])) { + videoObj.w = parseInt(bid.mediaTypes.video.playerSize[0], 10); + videoObj.h = parseInt(bid.mediaTypes.video.playerSize[1], 10); + } + + if (bid.params.video.hasOwnProperty('skippable')) { + videoObj.ext = { + 'video_skippable': bid.params.video.skippable ? 1 : 0 + }; + } + } else { + videoObj = UNDEFINED; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Video config params missing for adunit: ' + bid.params.adUnit + ' with mediaType set as video. Ignoring video impression in the adunit.'); + } + + return videoObj; +} // support for PMP deals + + +function _addPMPDealsInImpression(impObj, bid) { + if (bid.params.deals) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.params.deals)) { + bid.params.deals.forEach(function (dealId) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](dealId) && dealId.length > 3) { + if (!impObj.pmp) { + impObj.pmp = { + private_auction: 0, + deals: [] + }; + } + + impObj.pmp.deals.push({ + id: dealId + }); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: deal-id present in array bid.params.deals should be a strings with more than 3 charaters length, deal-id ignored: ' + dealId); + } + }); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: bid.params.deals should be an array of strings.'); + } + } +} + +function _createImpressionObject(bid, conf) { + var impObj = {}; + var bannerObj; + var videoObj; + var nativeObj = {}; + var sizes = bid.hasOwnProperty('sizes') ? bid.sizes : []; + var mediaTypes = ''; + var format = []; + impObj = { + id: bid.bidId, + tagid: bid.params.adUnit || undefined, + bidfloor: _parseSlotParam('kadfloor', bid.params.kadfloor), + secure: 1, + ext: { + pmZoneId: _parseSlotParam('pmzoneid', bid.params.pmzoneid) + }, + bidfloorcur: bid.params.currency ? _parseSlotParam('currency', bid.params.currency) : DEFAULT_CURRENCY + }; + + _addPMPDealsInImpression(impObj, bid); + + if (bid.hasOwnProperty('mediaTypes')) { + for (mediaTypes in bid.mediaTypes) { + switch (mediaTypes) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + bannerObj = _createBannerRequest(bid); + + if (bannerObj !== UNDEFINED) { + impObj.banner = bannerObj; + } + + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]: + nativeObj['request'] = JSON.stringify(_createNativeRequest(bid.nativeParams)); + + if (!isInvalidNativeRequest) { + impObj.native = nativeObj; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Error in Native adunit ' + bid.params.adUnit + '. Ignoring the adunit. Refer to ' + PREBID_NATIVE_HELP_LINK + ' for more details.'); + } + + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]: + videoObj = _createVideoRequest(bid); + + if (videoObj !== UNDEFINED) { + impObj.video = videoObj; + } + + break; + } + } + } else { + // mediaTypes is not present, so this is a banner only impression + // this part of code is required for older testcases with no 'mediaTypes' to run succesfully. + bannerObj = { + pos: 0, + w: bid.params.width, + h: bid.params.height, + topframe: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"]() ? 0 : 1 + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes) && sizes.length > 1) { + sizes = sizes.splice(1, sizes.length - 1); + sizes.forEach(function (size) { + format.push({ + w: size[0], + h: size[1] + }); + }); + bannerObj.format = format; + } + + impObj.banner = bannerObj; + } + + _addFloorFromFloorModule(impObj, bid); + + return impObj.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]) || impObj.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]) || impObj.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]) ? impObj : UNDEFINED; +} + +function _addFloorFromFloorModule(impObj, bid) { + var bidFloor = -1; // get lowest floor from floorModule + + if (typeof bid.getFloor === 'function' && !__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('pubmatic.disableFloors')) { + [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]].forEach(function (mediaType) { + if (impObj.hasOwnProperty(mediaType)) { + var floorInfo = bid.getFloor({ + currency: impObj.bidfloorcur, + mediaType: mediaType, + size: '*' + }); + + if (_typeof(floorInfo) === 'object' && floorInfo.currency === impObj.bidfloorcur && !isNaN(parseInt(floorInfo.floor))) { + var mediaTypeFloor = parseFloat(floorInfo.floor); + bidFloor = bidFloor == -1 ? mediaTypeFloor : Math.min(mediaTypeFloor, bidFloor); + } + } + }); + } // get highest from impObj.bidfllor and floor from floor module + // as we are using Math.max, it is ok if we have not got any floor from floorModule, then value of bidFloor will be -1 + + + if (impObj.bidfloor) { + bidFloor = Math.max(bidFloor, impObj.bidfloor); + } // assign value only if bidFloor is > 0 + + + impObj.bidfloor = !isNaN(bidFloor) && bidFloor > 0 ? bidFloor : UNDEFINED; +} + +function _handleEids(payload, validBidRequests) { + var bidUserIdAsEids = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests, '0.userIdAsEids'); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidUserIdAsEids) && bidUserIdAsEids.length > 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'user.eids', bidUserIdAsEids); + } +} + +function _checkMediaType(adm, newBid) { + // Create a regex here to check the strings + var admStr = ''; + var videoRegex = new RegExp(/VAST\s+version/); + + if (adm.indexOf('span class="PubAPIAd"') >= 0) { + newBid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } else if (videoRegex.test(adm)) { + newBid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + } else { + try { + admStr = JSON.parse(adm.replace(/\\/g, '')); + + if (admStr && admStr.native) { + newBid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Cannot parse native reponse for ad response: ' + adm); + } + } +} + +function _parseNativeResponse(bid, newBid) { + newBid.native = {}; + + if (bid.hasOwnProperty('adm')) { + var adm = ''; + + try { + adm = JSON.parse(bid.adm.replace(/\\/g, '')); + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: Cannot parse native reponse for ad response: ' + newBid.adm); + return; + } + + if (adm && adm.native && adm.native.assets && adm.native.assets.length > 0) { + newBid.mediaType = __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]; + + for (var i = 0, len = adm.native.assets.length; i < len; i++) { + switch (adm.native.assets[i].id) { + case NATIVE_ASSETS.TITLE.ID: + newBid.native.title = adm.native.assets[i].title && adm.native.assets[i].title.text; + break; + + case NATIVE_ASSETS.IMAGE.ID: + newBid.native.image = { + url: adm.native.assets[i].img && adm.native.assets[i].img.url, + height: adm.native.assets[i].img && adm.native.assets[i].img.h, + width: adm.native.assets[i].img && adm.native.assets[i].img.w + }; + break; + + case NATIVE_ASSETS.ICON.ID: + newBid.native.icon = { + url: adm.native.assets[i].img && adm.native.assets[i].img.url, + height: adm.native.assets[i].img && adm.native.assets[i].img.h, + width: adm.native.assets[i].img && adm.native.assets[i].img.w + }; + break; + + case NATIVE_ASSETS.SPONSOREDBY.ID: + case NATIVE_ASSETS.BODY.ID: + case NATIVE_ASSETS.LIKES.ID: + case NATIVE_ASSETS.DOWNLOADS.ID: + case NATIVE_ASSETS.PRICE: + case NATIVE_ASSETS.SALEPRICE.ID: + case NATIVE_ASSETS.PHONE.ID: + case NATIVE_ASSETS.ADDRESS.ID: + case NATIVE_ASSETS.DESC2.ID: + case NATIVE_ASSETS.CTA.ID: + case NATIVE_ASSETS.RATING.ID: + case NATIVE_ASSETS.DISPLAYURL.ID: + newBid.native[NATIVE_ASSET_ID_TO_KEY_MAP[adm.native.assets[i].id]] = adm.native.assets[i].data && adm.native.assets[i].data.value; + break; + } + } + + newBid.native.clickUrl = adm.native.link && adm.native.link.url; + newBid.native.clickTrackers = adm.native.link && adm.native.link.clicktrackers || []; + newBid.native.impressionTrackers = adm.native.imptrackers || []; + newBid.native.jstracker = adm.native.jstracker || []; + + if (!newBid.width) { + newBid.width = DEFAULT_WIDTH; + } + + if (!newBid.height) { + newBid.height = DEFAULT_HEIGHT; + } + } + } +} + +function _blockedIabCategoriesValidation(payload, blockedIabCategories) { + blockedIabCategories = blockedIabCategories.filter(function (category) { + if (typeof category === 'string') { + // only strings + return true; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'bcat: Each category should be a string, ignoring category: ' + category); + return false; + } + }).map(function (category) { + return category.trim(); + }) // trim all + .filter(function (category, index, arr) { + // more than 3 charaters length + if (category.length > 3) { + return arr.indexOf(category) === index; // unique value only + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'bcat: Each category should have a value of a length of more than 3 characters, ignoring category: ' + category); + } + }); + + if (blockedIabCategories.length > 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'bcat: Selected: ', blockedIabCategories); + payload.bcat = blockedIabCategories; + } +} + +function _handleDealCustomTargetings(payload, dctrArr, validBidRequests) { + var dctr = ''; + var dctrLen; // set dctr value in site.ext, if present in validBidRequests[0], else ignore + + if (dctrArr.length > 0) { + if (validBidRequests[0].params.hasOwnProperty('dctr')) { + dctr = validBidRequests[0].params.dctr; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](dctr) && dctr.length > 0) { + var arr = dctr.split('|'); + dctr = ''; + arr.forEach(function (val) { + dctr += val.length > 0 ? val.trim() + '|' : ''; + }); + dctrLen = dctr.length; + + if (dctr.substring(dctrLen, dctrLen - 1) === '|') { + dctr = dctr.substring(0, dctrLen - 1); + } + + payload.site.ext = { + key_val: dctr.trim() + }; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Ignoring param : dctr with value : ' + dctr + ', expects string-value, found empty or non-string value'); + } + + if (dctrArr.length > 1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'dctr value found in more than 1 adunits. Value from 1st adunit will be picked. Ignoring values from subsequent adunits'); + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'dctr value not found in 1st adunit, ignoring values from subsequent adunits'); + } + } +} + +var spec = { + code: BIDDER_CODE, + gvlid: 76, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]], + + /** + * 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 (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.publisherId)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: publisherId is mandatory and cannot be numeric. Call to OpenBid will not be sent for ad unit: ' + JSON.stringify(bid)); + return false; + } // video ad validation + + + if (bid.params.hasOwnProperty('video')) { + if (!bid.params.video.hasOwnProperty('mimes') || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.params.video.mimes) || bid.params.video.mimes.length === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Error: For video ads, mimes is mandatory and must specify atlease 1 mime value. Call to OpenBid will not be sent for ad unit:' + JSON.stringify(bid)); + 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, bidderRequest) { + var refererInfo; + + if (bidderRequest && bidderRequest.refererInfo) { + refererInfo = bidderRequest.refererInfo; + } + + var conf = _initConf(refererInfo); + + var payload = _createOrtbTemplate(conf); + + var bidCurrency = ''; + var dctrArr = []; + var bid; + var blockedIabCategories = []; + validBidRequests.forEach(function (originalBid) { + bid = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](originalBid); + bid.params.adSlot = bid.params.adSlot || ''; + + _parseAdSlot(bid); + + if (bid.params.hasOwnProperty('video')) {// Nothing to do + } else { + // If we have a native mediaType configured alongside banner, its ok if the banner size is not set in width and height + // The corresponding banner imp object will not be generated, but we still want the native object to be sent, hence the following check + if (!(bid.hasOwnProperty('mediaTypes') && bid.mediaTypes.hasOwnProperty(__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */])) && bid.params.width === 0 && bid.params.height === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Skipping the non-standard adslot: ', bid.params.adSlot, JSON.stringify(bid)); + return; + } + } + + conf.pubId = conf.pubId || bid.params.publisherId; + conf = _handleCustomParams(bid.params, conf); + conf.transactionId = bid.transactionId; + + if (bidCurrency === '') { + bidCurrency = bid.params.currency || UNDEFINED; + } else if (bid.params.hasOwnProperty('currency') && bidCurrency !== bid.params.currency) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"](LOG_WARN_PREFIX + 'Currency specifier ignored. Only one currency permitted.'); + } + + bid.params.currency = bidCurrency; // check if dctr is added to more than 1 adunit + + if (bid.params.hasOwnProperty('dctr') && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.dctr)) { + dctrArr.push(bid.params.dctr); + } + + if (bid.params.hasOwnProperty('bcat') && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.params.bcat)) { + blockedIabCategories = blockedIabCategories.concat(bid.params.bcat); + } + + var impObj = _createImpressionObject(bid, conf); + + if (impObj) { + payload.imp.push(impObj); + } + }); + + if (payload.imp.length == 0) { + return; + } + + payload.site.publisher.id = conf.pubId.trim(); + publisherId = conf.pubId.trim(); + payload.ext.wrapper = {}; + payload.ext.wrapper.profile = parseInt(conf.profId) || UNDEFINED; + payload.ext.wrapper.version = parseInt(conf.verId) || UNDEFINED; + payload.ext.wrapper.wiid = conf.wiid || UNDEFINED; // eslint-disable-next-line no-undef + + payload.ext.wrapper.wv = "Genius_prebid_4.2.0"; + 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.user.geo; + payload.site.page = conf.kadpageurl.trim() || payload.site.page.trim(); + payload.site.domain = _getDomainFromURL(payload.site.page); // merge the device from config.getConfig('device') + + if (_typeof(__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('device')) === 'object') { + payload.device = _extends(payload.device, __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('device')); + } // passing transactionId in source.tid + + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'source.tid', conf.transactionId); // test bids + + if (window.location.href.indexOf('pubmaticTest=true') !== -1) { + payload.test = 1; + } // adding schain object + + + if (validBidRequests[0].schain) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'source.ext.schain', validBidRequests[0].schain); + } // Attaching GDPR Consent Params + + + if (bidderRequest && bidderRequest.gdprConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } // CCPA + + + if (bidderRequest && bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } // coppa compliance + + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](payload, 'regs.coppa', 1); + } + + _handleDealCustomTargetings(payload, dctrArr, validBidRequests); + + _handleEids(payload, validBidRequests); + + _blockedIabCategoriesValidation(payload, blockedIabCategories); // Note: Do not move this block up + // if site object is set in Prebid config then we need to copy required fields from site into app and unset the site object + + + if (_typeof(__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + payload.app = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('app'); // not copying domain from site as it is a derived value from page + + payload.app.publisher = payload.site.publisher; + payload.app.ext = payload.site.ext || UNDEFINED; + delete payload.site; + } + + 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 = []; + var respCur = DEFAULT_CURRENCY; + var parsedRequest = JSON.parse(request.data); + var parsedReferrer = parsedRequest.site && parsedRequest.site.ref ? parsedRequest.site.ref : ''; + + try { + if (response.body && response.body.seatbid && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](response.body.seatbid)) { + // Supporting multiple bid responses for same adSize + respCur = response.body.cur || respCur; + response.body.seatbid.forEach(function (seatbidder) { + seatbidder.bid && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](seatbidder.bid) && seatbidder.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: respCur, + netRevenue: NET_REVENUE, + ttl: 300, + referrer: parsedReferrer, + ad: bid.adm, + pm_seat: seatbidder.seat || null, + pm_dspid: bid.ext && bid.ext.dspid ? bid.ext.dspid : null, + partnerImpId: bid.id || '' // partner impression Id + + }; + + if (parsedRequest.imp && parsedRequest.imp.length > 0) { + parsedRequest.imp.forEach(function (req) { + if (bid.impid === req.id) { + _checkMediaType(bid.adm, newBid); + + switch (newBid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]: + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]: + newBid.width = bid.hasOwnProperty('w') ? bid.w : req.video.w; + newBid.height = bid.hasOwnProperty('h') ? bid.h : req.video.h; + newBid.vastXml = bid.adm; + break; + + case __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["c" /* NATIVE */]: + _parseNativeResponse(bid, newBid); + + break; + } + } + }); + } + + if (bid.ext && bid.ext.deal_channel) { + newBid['dealChannel'] = dealChannelValues[bid.ext.deal_channel] || null; + } + + newBid.meta = {}; + + if (bid.ext && bid.ext.dspid) { + newBid.meta.networkId = bid.ext.dspid; + } + + if (bid.ext && bid.ext.advid) { + newBid.meta.buyerId = bid.ext.advid; + } + + if (bid.adomain && bid.adomain.length > 0) { + newBid.meta.advertiserDomains = bid.adomain; + newBid.meta.clickUrl = bid.adomain[0]; + } // adserverTargeting + + + if (seatbidder.ext && seatbidder.ext.buyid) { + newBid.adserverTargeting = { + 'hb_buyid_pubmatic': seatbidder.ext.buyid + }; + } + + bidResponses.push(newBid); + }); + }); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + + return bidResponses; + }, + + /** + * Register User Sync. + */ + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + var syncurl = '' + publisherId; // Attaching GDPR Consent Params in UserSync url + + if (gdprConsent) { + syncurl += '&gdpr=' + (gdprConsent.gdprApplies ? 1 : 0); + syncurl += '&gdpr_consent=' + encodeURIComponent(gdprConsent.consentString || ''); + } // CCPA + + + if (uspConsent) { + syncurl += '&us_privacy=' + encodeURIComponent(uspConsent); + } // coppa compliance + + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') === true) { + syncurl += '&coppa=1'; + } + + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: USER_SYNC_URL_IFRAME + syncurl + }]; + } else { + return [{ + type: 'image', + url: USER_SYNC_URL_IMAGE + syncurl + }]; + } + }, + + /** + * Covert bid param types for S2S + * @param {Object} params bid params + * @param {Boolean} isOpenRtb boolean to check openrtb2 protocol + * @return {Object} params bid params + */ + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'publisherId': 'string', + 'adSlot': 'string' + }, params); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[610]); \ No newline at end of file diff --git a/build/dist/pubperfAnalyticsAdapter.js b/build/dist/pubperfAnalyticsAdapter.js new file mode 100644 index 00000000000..27a609a3158 --- /dev/null +++ b/build/dist/pubperfAnalyticsAdapter.js @@ -0,0 +1,313 @@ +pbjsChunk([22],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 612: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(613); + + +/***/ }), + +/***/ 613: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/** + * Analytics Adapter for Pubperf + */ + + + +var pubperfAdapter = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + global: 'pubperf_pbjs', + analyticsType: 'bundle', + handler: 'on' +}); +pubperfAdapter.originEnableAnalytics = pubperfAdapter.enableAnalytics; + +pubperfAdapter.enableAnalytics = function (config) { + if (!config || !config.provider || config.provider !== 'pubperf') { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]('expected config.provider to equal pubperf'); + return; + } + + if (!window['pubperf_pbjs']) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"]("Make sure that Pubperf tag from https://www.pubperf.com is included before the Prebid configuration."); + return; + } + + pubperfAdapter.originEnableAnalytics(config); +}; + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: pubperfAdapter, + code: 'pubperf' +}); +/* harmony default export */ __webpack_exports__["default"] = (pubperfAdapter); + +/***/ }) + +},[612]); \ No newline at end of file diff --git a/build/dist/pubstackAnalyticsAdapter.js b/build/dist/pubstackAnalyticsAdapter.js new file mode 100644 index 00000000000..095242fc80d --- /dev/null +++ b/build/dist/pubstackAnalyticsAdapter.js @@ -0,0 +1,292 @@ +pbjsChunk([21],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 614: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(615); + + +/***/ }), + +/***/ 615: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); + + +var pubstackAnalytics = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + global: 'PubstackAnalytics', + handler: 'on', + analyticsType: 'bundle' +}); +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: pubstackAnalytics, + code: 'pubstack' +}); +/* harmony default export */ __webpack_exports__["default"] = (pubstackAnalytics); + +/***/ }) + +},[614]); \ No newline at end of file diff --git a/build/dist/pubwiseAnalyticsAdapter.js b/build/dist/pubwiseAnalyticsAdapter.js new file mode 100644 index 00000000000..c33e5594d45 --- /dev/null +++ b/build/dist/pubwiseAnalyticsAdapter.js @@ -0,0 +1,431 @@ +pbjsChunk([20],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 616: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(617); + + +/***/ }), + +/***/ 617: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + +var utils = __webpack_require__(0); + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); +/**** + * PubWise.io Analytics + * Contact: support@pubwise.io + * 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("".concat(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 = storage.getDataFromLocalStorage("pw-".concat(_prop)); + + if (itemValue.length !== 0) { + dataBag[_prop] = itemValue; + } + } + } else { + for (var _prop2 in utmKeys) { + storage.setDataInLocalStorage("pw-".concat(_prop2), utmKeys[_prop2]); + } + } + } catch (e) { + utils.logInfo("".concat(analyticsName, "Error"), e); + dataBag['error_utm'] = 1; + } + + return dataBag; +} + +function sendEvent(eventType, data) { + utils.logInfo("".concat(analyticsName, "Event ").concat(eventType, " ").concat(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 + }; + dataBag = enrichWithMetrics(dataBag); // for certain events, track additional info + + if (eventType == __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_INIT) { + dataBag = enrichWithUTM(dataBag); + } + + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(configOptions.endpoint, function (result) { + return utils.logInfo("".concat(analyticsName, "Result"), result); + }, JSON.stringify(dataBag)); +} + +var pubwiseAnalytics = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* 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); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: pubwiseAnalytics, + code: 'pubwise' +}); +/* harmony default export */ __webpack_exports__["default"] = (pubwiseAnalytics); + +/***/ }) + +},[616]); \ No newline at end of file diff --git a/build/dist/pulsepointAnalyticsAdapter.js b/build/dist/pulsepointAnalyticsAdapter.js new file mode 100644 index 00000000000..49aa3192739 --- /dev/null +++ b/build/dist/pulsepointAnalyticsAdapter.js @@ -0,0 +1,295 @@ +pbjsChunk([19],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 618: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(619); + + +/***/ }), + +/***/ 619: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/** + * pulsepoint.js - Analytics Adapter for PulsePoint + */ + + +var pulsepointAdapter = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + global: 'PulsePointPrebidAnalytics', + handler: 'on', + analyticsType: 'bundle' +}); +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: pulsepointAdapter, + code: 'pulsepoint' +}); +/* harmony default export */ __webpack_exports__["default"] = (pulsepointAdapter); + +/***/ }) + +},[618]); \ No newline at end of file diff --git a/build/dist/pulsepointBidAdapter.js b/build/dist/pulsepointBidAdapter.js new file mode 100644 index 00000000000..d2abf217a85 --- /dev/null +++ b/build/dist/pulsepointBidAdapter.js @@ -0,0 +1,618 @@ +pbjsChunk([134],{ + +/***/ 620: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(621); + + +/***/ }), + +/***/ 621: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/* 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; +var KNOWN_PARAMS = ['cp', 'ct', 'cf', 'video', 'battr', 'bcat', 'badv', 'bidfloor']; +/** + * PulsePoint Bid Adapter. + * Contact: ExchangeTeam@pulsepoint.com + * + * Aliases - pulseLite and pulsepointLite are supported for backwards compatibility. + * Formats - Display/Native/Video formats supported. + * + */ + +var spec = { + code: 'pulsepoint', + gvlid: 81, + aliases: ['pulseLite', 'pulsepointLite'], + supportedMediaTypes: ['banner', 'native', 'video'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.cp && bid.params.ct); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var request = { + id: bidRequests[0].bidderRequestId, + imp: bidRequests.map(function (slot) { + return impression(slot); + }), + site: site(bidRequests, bidderRequest), + app: app(bidRequests), + device: device(), + bcat: bidRequests[0].params.bcat, + badv: bidRequests[0].params.badv, + user: user(bidRequests[0], bidderRequest), + regs: regs(bidderRequest), + source: source(bidRequests[0].schain) + }; + return { + method: 'POST', + url: 'https://bid.contextweb.com/header/ortb?src=prebid', + data: request, + bidderRequest: bidderRequest + }; + }, + interpretResponse: function interpretResponse(response, request) { + return bidResponseAvailable(request, response); + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: 'https://bh.contextweb.com/visitormatch' + }]; + } else if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: 'https://bh.contextweb.com/visitormatch/prebid' + }]; + } + }, + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'cf': 'string', + 'cp': 'number', + 'ct': 'number' + }, params); + } +}; +/** + * Callback for bids, after the call to PulsePoint completes. + */ + +function bidResponseAvailable(request, response) { + var idToImpMap = {}; + var idToBidMap = {}; + var idToSlotConfig = {}; + var bidResponse = response.body; // extract the request bids and the response bids, keyed by impr-id + + var ortbRequest = request.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; + }); + }); + } + + if (request.bidderRequest && request.bidderRequest.bids) { + request.bidderRequest.bids.forEach(function (bid) { + idToSlotConfig[bid.bidId] = bid; + }); + } + + var bids = []; + Object.keys(idToImpMap).forEach(function (id) { + if (idToBidMap[id]) { + var bid = { + requestId: id, + cpm: idToBidMap[id].price, + creative_id: idToBidMap[id].crid, + creativeId: idToBidMap[id].crid, + adId: id, + ttl: idToBidMap[id].exp || DEFAULT_BID_TTL, + netRevenue: DEFAULT_NET_REVENUE, + currency: bidResponse.cur || DEFAULT_CURRENCY + }; + + if (idToImpMap[id]['native']) { + bid['native'] = nativeResponse(idToImpMap[id], idToBidMap[id]); + bid.mediaType = 'native'; + } else if (idToImpMap[id].video) { + // for outstream, a renderer is specified + if (idToSlotConfig[id] && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](idToSlotConfig[id], 'mediaTypes.video.context') === 'outstream') { + bid.renderer = outstreamRenderer(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](idToSlotConfig[id], 'renderer.options'), __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](idToBidMap[id], 'ext.outstream')); + } + + bid.vastXml = idToBidMap[id].adm; + bid.mediaType = 'video'; + bid.width = idToBidMap[id].w; + bid.height = idToBidMap[id].h; + } else { + bid.ad = idToBidMap[id].adm; + bid.width = idToBidMap[id].w || idToImpMap[id].banner.w; + bid.height = idToBidMap[id].h || idToImpMap[id].banner.h; + } + + bids.push(bid); + } + }); + return bids; +} +/** + * 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(), + video: video(slot), + bidfloor: slot.params.bidfloor, + ext: ext(slot) + }; +} +/** + * Produces an OpenRTB Banner object for the slot given. + */ + + +function banner(slot) { + var sizes = parseSizes(slot); + var size = adSize(slot, sizes); + return slot.nativeParams || slot.params.video ? null : { + w: size[0], + h: size[1], + battr: slot.params.battr, + format: sizes + }; +} +/** + * Produce openrtb format objects based on the sizes configured for the slot. + */ + + +function parseSizes(slot) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.banner.sizes'); + + if (sizes && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes)) { + return sizes.filter(function (sz) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sz) && sz.length === 2; + }).map(function (sz) { + return { + w: sz[0], + h: sz[1] + }; + }); + } + + return null; +} +/** + * Produces an OpenRTB Video object for the slot given + */ + + +function video(slot) { + if (slot.params.video) { + return _extends({}, slot.params.video, { + battr: slot.params.battr + }); + } + + return null; +} +/** + * Unknown params are captured and sent on ext + */ + + +function ext(slot) { + var ext = {}; + var knownParamsMap = {}; + KNOWN_PARAMS.forEach(function (value) { + return knownParamsMap[value] = 1; + }); + Object.keys(slot.params).forEach(function (key) { + if (!knownParamsMap[key]) { + ext[key] = slot.params[key]; + } + }); + return Object.keys(ext).length > 0 ? { + prebid: ext + } : null; +} +/** + * Sets up the renderer on the bid, for outstream bid responses. + */ + + +function outstreamRenderer(rendererOptions, outstreamExtOptions) { + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + url: outstreamExtOptions.rendererUrl, + config: { + defaultOptions: outstreamExtOptions.config, + rendererOptions: rendererOptions, + type: outstreamExtOptions.type + }, + loaded: false + }); + renderer.setRender(function (bid) { + bid.renderer.push(function () { + var config = bid.renderer.getConfig(); + new window.PulsePointOutstreamRenderer().render({ + adUnitCode: bid.adUnitCode, + vastXml: bid.vastXml, + type: config.type, + defaultOptions: config.defaultOptions, + rendererOptions: rendererOptions + }); + }); + }); + return renderer; +} +/** + * 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', + battr: slot.params.battr + }; + } + + 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(bidRequests, bidderRequest) { + var pubId = bidRequests && bidRequests.length > 0 ? bidRequests[0].params.cp : '0'; + var appParams = bidRequests[0].params.app; + + if (!appParams) { + return { + publisher: { + id: pubId.toString() + }, + ref: referrer(), + page: bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : '' + }; + } + + 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('pulsepointLite.safeParse', 'ERROR', ex); + } + + return null; +} +/** + * Determines the AdSize for the slot. + */ + + +function adSize(slot, sizes) { + 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]; + } else if (sizes && sizes.length > 0) { + return [sizes[0].w, sizes[0].h]; + } + + return [1, 1]; +} +/** + * Handles the user level attributes and produces + * an openrtb User object. + */ + + +function user(bidRequest, bidderRequest) { + var ext = {}; + + if (bidderRequest) { + if (bidderRequest.gdprConsent) { + ext.consent = bidderRequest.gdprConsent.consentString; + } + } + + if (bidRequest) { + if (bidRequest.userId) { + ext.eids = []; + addExternalUserId(ext.eids, bidRequest.userId.pubcid, 'pubcommon'); + addExternalUserId(ext.eids, bidRequest.userId.britepoolid, 'britepool.com'); + addExternalUserId(ext.eids, bidRequest.userId.criteoId, 'criteo'); + addExternalUserId(ext.eids, bidRequest.userId.idl_env, 'identityLink'); + addExternalUserId(ext.eids, bidRequest.userId.id5id, 'id5-sync.com'); + addExternalUserId(ext.eids, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'userId.parrableId.eid'), 'parrable.com'); // liveintent + + if (bidRequest.userId.lipb && bidRequest.userId.lipb.lipbid) { + addExternalUserId(ext.eids, bidRequest.userId.lipb.lipbid, 'liveintent.com'); + } // TTD + + + addExternalUserId(ext.eids, bidRequest.userId.tdid, 'adserver.org', { + rtiPartner: 'TDID' + }); // digitrust + + var digitrustResponse = bidRequest.userId.digitrustid; + + if (digitrustResponse && digitrustResponse.data) { + var digitrust = {}; + + if (digitrustResponse.data.id) { + digitrust.id = digitrustResponse.data.id; + } + + if (digitrustResponse.data.keyv) { + digitrust.keyv = digitrustResponse.data.keyv; + } + + ext.digitrust = digitrust; + } + } + } + + return { + ext: ext + }; +} +/** + * Produces external userid object in ortb 3.0 model. + */ + + +function addExternalUserId(eids, id, source, uidExt) { + if (id) { + var uid = { + id: id + }; + + if (uidExt) { + uid.ext = uidExt; + } + + eids.push({ + source: source, + uids: [uid] + }); + } +} +/** + * Produces the regulations ortb object + */ + + +function regs(bidderRequest) { + if (bidderRequest.gdprConsent || bidderRequest.uspConsent) { + var ext = {}; // GDPR applies attribute (actual consent value is in user object) + + if (bidderRequest.gdprConsent) { + ext.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } // CCPA + + + if (bidderRequest.uspConsent) { + ext.us_privacy = bidderRequest.uspConsent; + } + + return { + ext: ext + }; + } + + return null; +} +/** + * Creates source object with supply chain + */ + + +function source(schain) { + if (schain) { + return { + ext: { + schain: schain + } + }; + } + + return null; +} +/** + * 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; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[620]); \ No newline at end of file diff --git a/build/dist/pxyzBidAdapter.js b/build/dist/pxyzBidAdapter.js new file mode 100644 index 00000000000..6897f5e4252 --- /dev/null +++ b/build/dist/pxyzBidAdapter.js @@ -0,0 +1,222 @@ +pbjsChunk([133],{ + +/***/ 622: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(623); + + +/***/ }), + +/***/ 623: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'pxyz'; +var URL = 'https://ads.playground.xyz/host-config/prebid?v=2'; +var DEFAULT_CURRENCY = 'USD'; +var spec = { + code: BIDDER_CODE, + // This adapter was previously named playgroundxyz - this alias ensures + // backwards compatibility for publishers + aliases: ['playgroundxyz'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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; + }, + + /** + * 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 referer = bidderRequest.refererInfo.referer; + var parts = referer.split('/'); + var protocol, hostname; + + if (parts.length >= 3) { + protocol = parts[0]; + hostname = parts[2]; + } + + var payload = { + id: bidRequests[0].auctionId, + site: { + domain: protocol + '//' + hostname, + name: hostname, + page: referer + }, + device: { + ua: navigator.userAgent, + language: navigator.language, + devicetype: isMobile() ? 1 : isConnectedTV() ? 3 : 2 + }, + imp: bidRequests.map(mapImpression), + Regs: { + ext: {} + } + }; // GDPR + + if (bidderRequest && bidderRequest.gdprConsent) { + var gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + var consentString = bidderRequest.gdprConsent.consentString; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"]("PXYZ: GDPR applies ".concat(gdpr)); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"]("PXYZ: GDPR consent string ".concat(consentString)); + payload.Regs.ext.gdpr = gdpr; + payload.User = { + ext: { + consent: consentString + } + }; + } // CCPA + + + if (bidderRequest && bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"]("PXYZ: USP Consent ".concat(bidderRequest.uspConsent)); + payload.Regs.ext['us_privacy'] = bidderRequest.uspConsent; + } + + return { + method: 'POST', + url: URL, + data: JSON.stringify(payload), + 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 bidderRequest = _ref.bidderRequest; + serverResponse = serverResponse.body; + var bids = []; + + if (!serverResponse || serverResponse.error) { + var errorMessage = "in response for ".concat(bidderRequest.bidderCode, " adapter"); + + if (serverResponse && serverResponse.error) { + errorMessage += ": ".concat(serverResponse.error); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](errorMessage); + } + + return bids; + } + + if (!__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"](serverResponse.seatbid)) { + var _errorMessage = "in response for ".concat(bidderRequest.bidderCode, " adapter "); + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"](_errorMessage += 'Malformed seatbid response'); + return bids; + } + + if (!serverResponse.seatbid) { + return bids; + } + + var currency = serverResponse.cur || DEFAULT_CURRENCY; + serverResponse.seatbid.forEach(function (sBid) { + if (sBid.hasOwnProperty('bid')) { + sBid.bid.forEach(function (iBid) { + if (iBid.price !== 0) { + var bid = newBid(iBid, currency); + bids.push(bid); + } + }); + } + }); + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + return [{ + type: 'image', + url: '//ib.adnxs.com/getuidnb?https://ads.playground.xyz/usersync?partner=appnexus&uid=$UID' + }]; + } +}; + +function newBid(bid, currency) { + return { + requestId: bid.impid, + mediaType: __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], + cpm: bid.price, + creativeId: bid.adid, + ad: bid.adm, + width: bid.w, + height: bid.h, + ttl: 300, + netRevenue: true, + currency: currency + }; +} + +function mapImpression(bid) { + return { + id: bid.bidId, + banner: mapBanner(bid), + ext: { + appnexus: { + placement_id: parseInt(bid.params.placementId, 10) + }, + pxyz: { + adapter: { + vendor: 'prebid', + prebid: "4.2.0" + } + } + } + }; +} + +function mapBanner(bid) { + return { + w: parseInt(bid.sizes[0][0], 10), + h: parseInt(bid.sizes[0][1], 10), + format: mapSizes(bid.sizes) + }; +} + +function mapSizes(bidSizes) { + var format = []; + bidSizes.forEach(function (size) { + format.push({ + w: parseInt(size[0], 10), + h: parseInt(size[1], 10) + }); + }); + return format; +} + +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); +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[622]); \ No newline at end of file diff --git a/build/dist/quantcastBidAdapter.js b/build/dist/quantcastBidAdapter.js new file mode 100644 index 00000000000..ae7009a0690 --- /dev/null +++ b/build/dist/quantcastBidAdapter.js @@ -0,0 +1,333 @@ +pbjsChunk([132],{ + +/***/ 624: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(625); + + +/***/ }), + +/***/ 625: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QUANTCAST_DOMAIN", function() { return QUANTCAST_DOMAIN; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QUANTCAST_TEST_DOMAIN", function() { return QUANTCAST_TEST_DOMAIN; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QUANTCAST_NET_REVENUE", function() { return QUANTCAST_NET_REVENUE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QUANTCAST_TEST_PUBLISHER", function() { return QUANTCAST_TEST_PUBLISHER; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QUANTCAST_TTL", function() { return QUANTCAST_TTL; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QUANTCAST_PROTOCOL", function() { return QUANTCAST_PROTOCOL; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QUANTCAST_PORT", function() { return QUANTCAST_PORT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__); + + + + + +var BIDDER_CODE = 'quantcast'; +var DEFAULT_BID_FLOOR = 0.0000000001; +var QUANTCAST_VENDOR_ID = '11'; // Check other required purposes on server + +var PURPOSE_DATA_COLLECT = '1'; +var QUANTCAST_DOMAIN = 'qcx.quantserve.com'; +var QUANTCAST_TEST_DOMAIN = 's2s-canary.quantserve.com'; +var QUANTCAST_NET_REVENUE = true; +var QUANTCAST_TEST_PUBLISHER = 'test-publisher'; +var QUANTCAST_TTL = 4; +var QUANTCAST_PROTOCOL = 'https'; +var QUANTCAST_PORT = '8443'; + +function makeVideoImp(bid) { + var video = {}; + + if (bid.params.video) { + video['mimes'] = bid.params.video.mimes; + video['minduration'] = bid.params.video.minduration; + video['maxduration'] = bid.params.video.maxduration; + video['protocols'] = bid.params.video.protocols; + video['startdelay'] = bid.params.video.startdelay; + video['linearity'] = bid.params.video.linearity; + video['battr'] = bid.params.video.battr; + video['maxbitrate'] = bid.params.video.maxbitrate; + video['playbackmethod'] = bid.params.video.playbackmethod; + video['delivery'] = bid.params.video.delivery; + video['placement'] = bid.params.video.placement; + video['api'] = bid.params.video.api; + } + + if (bid.mediaTypes.video.mimes) { + video['mimes'] = bid.mediaTypes.video.mimes; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.mediaTypes.video.playerSize[0])) { + video['w'] = bid.mediaTypes.video.playerSize[0][0]; + video['h'] = bid.mediaTypes.video.playerSize[0][1]; + } else { + video['w'] = bid.mediaTypes.video.playerSize[0]; + video['h'] = bid.mediaTypes.video.playerSize[1]; + } + + return { + video: video, + placementCode: bid.placementCode, + bidFloor: bid.params.bidFloor || DEFAULT_BID_FLOOR + }; +} + +function makeBannerImp(bid) { + var sizes = bid.sizes || bid.mediaTypes.banner.sizes; + return { + banner: { + battr: bid.params.battr, + sizes: sizes.map(function (size) { + return { + width: size[0], + height: size[1] + }; + }) + }, + placementCode: bid.placementCode, + bidFloor: bid.params.bidFloor || DEFAULT_BID_FLOOR + }; +} + +function getDomain(url) { + if (!url) { + return url; + } + + return url.replace('http://', '').replace('https://', '').replace('www.', '').split(/[/?#]/)[0]; +} + +function checkTCFv1(vendorData) { + var vendorConsent = vendorData.vendorConsents && vendorData.vendorConsents[QUANTCAST_VENDOR_ID]; + var purposeConsent = vendorData.purposeConsents && vendorData.purposeConsents[PURPOSE_DATA_COLLECT]; + return !!(vendorConsent && purposeConsent); +} + +function checkTCFv2(tcData) { + if (tcData.purposeOneTreatment && tcData.publisherCC === 'DE') { + // special purpose 1 treatment for Germany + return true; + } + + var restrictions = tcData.publisher ? tcData.publisher.restrictions : {}; + var qcRestriction = restrictions && restrictions[PURPOSE_DATA_COLLECT] ? restrictions[PURPOSE_DATA_COLLECT][QUANTCAST_VENDOR_ID] : null; + + if (qcRestriction === 0 || qcRestriction === 2) { + // Not allowed by publisher, or requires legitimate interest + return false; + } + + var vendorConsent = tcData.vendor && tcData.vendor.consents && tcData.vendor.consents[QUANTCAST_VENDOR_ID]; + var purposeConsent = tcData.purpose && tcData.purpose.consents && tcData.purpose.consents[PURPOSE_DATA_COLLECT]; + return !!(vendorConsent && purposeConsent); +} +/** + * 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 = { + code: BIDDER_CODE, + GVLID: 11, + supportedMediaTypes: ['banner', 'video'], + hasUserSynced: false, + + /** + * 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) { + return !!bid.params.publisherId; + }, + + /** + * 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 + * @param bidderRequest + * @return ServerRequest information describing the request to the server. + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var bids = bidRequests || []; + var gdprConsent = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent') || {}; + var uspConsent = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'uspConsent'); + var referrer = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.referer'); + var page = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.canonicalUrl') || __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](window, 'location.href'); + var domain = getDomain(page); // Check for GDPR consent for purpose 1, and drop request if consent has not been given + // Remaining consent checks are performed server-side. + + if (gdprConsent.gdprApplies) { + if (gdprConsent.vendorData) { + if (gdprConsent.apiVersion === 1 && !checkTCFv1(gdprConsent.vendorData)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("".concat(BIDDER_CODE, ": No purpose 1 consent for TCF v1")); + return; + } + + if (gdprConsent.apiVersion === 2 && !checkTCFv2(gdprConsent.vendorData)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("".concat(BIDDER_CODE, ": No purpose 1 consent for TCF v2")); + return; + } + } + } + + var bidRequestsList = []; + bids.forEach(function (bid) { + var imp; + + if (bid.mediaTypes) { + if (bid.mediaTypes.video && bid.mediaTypes.video.context === 'instream') { + imp = makeVideoImp(bid); + } else if (bid.mediaTypes.banner) { + imp = makeBannerImp(bid); + } else { + // Unsupported mediaType + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("".concat(BIDDER_CODE, ": No supported mediaTypes found in ").concat(JSON.stringify(bid.mediaTypes))); + return; + } + } else { + // Parse as banner by default + imp = makeBannerImp(bid); + } // Request Data Format can be found at https://wiki.corp.qc/display/adinf/QCX + + + var requestData = { + publisherId: bid.params.publisherId, + requestId: bid.bidId, + imp: [imp], + site: { + page: page, + referrer: referrer, + domain: domain + }, + bidId: bid.bidId, + gdprSignal: gdprConsent.gdprApplies ? 1 : 0, + gdprConsent: gdprConsent.consentString, + uspSignal: uspConsent ? 1 : 0, + uspConsent: uspConsent, + coppa: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true ? 1 : 0, + prebidJsVersion: "4.2.0" + }; + var data = JSON.stringify(requestData); + var qcDomain = bid.params.publisherId === QUANTCAST_TEST_PUBLISHER ? QUANTCAST_TEST_DOMAIN : QUANTCAST_DOMAIN; + var url = "".concat(QUANTCAST_PROTOCOL, "://").concat(qcDomain, ":").concat(QUANTCAST_PORT, "/qchb"); + bidRequestsList.push({ + 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Server Response is undefined'); + return []; + } + + var response = serverResponse['body']; + + if (response === undefined || !response.hasOwnProperty('bids')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Sub-optimal JSON received from Quantcast server'); + return []; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](response.bids)) { + // Shortcut response handling if no bids are present + 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, + videoUrl = bid.videoUrl, + dealId = bid.dealId; + var result = { + requestId: response.requestId, + cpm: cpm, + width: width, + height: height, + ad: ad, + ttl: QUANTCAST_TTL, + creativeId: creativeId, + netRevenue: QUANTCAST_NET_REVENUE, + currency: currency + }; + + if (videoUrl !== undefined && videoUrl) { + result['vastUrl'] = videoUrl; + result['mediaType'] = 'video'; + } + + if (dealId !== undefined && dealId) { + result['dealId'] = dealId; + } + + return result; + }); + return bidResponsesList; + }, + onTimeout: function onTimeout(timeoutData) { + var url = "".concat(QUANTCAST_PROTOCOL, "://").concat(QUANTCAST_DOMAIN, ":").concat(QUANTCAST_PORT, "/qchb_notify?type=timeout"); + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(url, null, null); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (!this.hasUserSynced && syncOptions.pixelEnabled) { + var responseWithUrl = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(serverResponses, function (serverResponse) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverResponse.body, 'userSync.url'); + }); + + if (responseWithUrl) { + var url = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](responseWithUrl.body, 'userSync.url'); + syncs.push({ + type: 'image', + url: url + }); + } + + this.hasUserSynced = true; + } + + return syncs; + }, + resetUserSync: function resetUserSync() { + this.hasUserSynced = false; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[624]); \ No newline at end of file diff --git a/build/dist/quantumdexBidAdapter.js b/build/dist/quantumdexBidAdapter.js new file mode 100644 index 00000000000..da70933d65a --- /dev/null +++ b/build/dist/quantumdexBidAdapter.js @@ -0,0 +1,278 @@ +pbjsChunk([131],{ + +/***/ 626: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(627); + + +/***/ }), + +/***/ 627: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var BIDDER_CODE = 'quantumdex'; +var CONFIG = { + 'quantumdex': { + 'ENDPOINT': 'https://useast.quantumdex.io/auction/quantumdex', + 'USERSYNC': 'https://sync.quantumdex.io/usersync/quantumdex' + }, + 'valueimpression': { + 'ENDPOINT': 'https://useast.quantumdex.io/auction/adapter', + 'USERSYNC': 'https://sync.quantumdex.io/usersync/adapter' + } +}; +var bidderConfig = CONFIG['quantumdex']; +var bySlotTargetKey = {}; +var bySlotSizesCount = {}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['banner', 'video'], + aliases: ['valueimpression'], + isBidRequestValid: function isBidRequestValid(bid) { + if (!bid.params) { + return false; + } + + if (!bid.params.siteId) { + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner') && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video')) { + return false; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner')) { + // Quantumdex does not support multi type bids, favor banner over video + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes')) { + // sizes at the banner is required. + return false; + } + } else if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video')) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize')) { + // playerSize is required for instream adUnits. + return false; + } + } + + return true; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var bids = JSON.parse(JSON.stringify(validBidRequests)); + bidderConfig = CONFIG[bids[0].bidder]; + var payload = {}; + bids.forEach(function (bidReq) { + var targetKey = 0; + + if (bySlotTargetKey[bidReq.adUnitCode] != undefined) { + targetKey = bySlotTargetKey[bidReq.adUnitCode]; + } else { + var biggestSize = _getBiggestSize(bidReq.sizes); + + if (biggestSize) { + if (bySlotSizesCount[biggestSize] != undefined) { + bySlotSizesCount[biggestSize]++; + targetKey = bySlotSizesCount[biggestSize]; + } else { + bySlotSizesCount[biggestSize] = 0; + targetKey = 0; + } + } + } + + bySlotTargetKey[bidReq.adUnitCode] = targetKey; + bidReq.targetKey = targetKey; + }); + payload.device = {}; + payload.device.ua = navigator.userAgent; + payload.device.height = window.top.innerHeight; + payload.device.width = window.top.innerWidth; + payload.device.dnt = _getDoNotTrack(); + payload.device.language = navigator.language; + payload.site = {}; + payload.site.id = bids[0].params.siteId; + payload.site.page = _extractTopWindowUrlFromBidderRequest(bidderRequest); + payload.site.referrer = _extractTopWindowReferrerFromBidderRequest(bidderRequest); + payload.site.hostname = window.top.location.hostname; // Apply GDPR parameters to request. + + payload.gdpr = {}; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr.gdprApplies = bidderRequest.gdprConsent.gdprApplies ? 'true' : 'false'; + + if (bidderRequest.gdprConsent.consentString) { + payload.gdpr.consentString = bidderRequest.gdprConsent.consentString; + } + } // Apply schain. + + + if (bids[0].schain) { + payload.schain = JSON.stringify(bids[0].schain); + } // Apply us_privacy. + + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + + payload.bids = bids; + return { + method: 'POST', + url: bidderConfig.ENDPOINT, + data: payload, + withCredentials: true, + bidderRequests: bids + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var serverBody = serverResponse.body; + var serverBids = serverBody.bids; // check overall response + + if (!serverBody || _typeof(serverBody) !== 'object') { + return []; + } + + if (!serverBids || _typeof(serverBids) !== 'object') { + return []; + } + + var bidResponses = []; + serverBids.forEach(function (bid) { + var bidResponse = { + requestId: bid.requestId, + cpm: bid.cpm, + width: bid.width, + height: bid.height, + creativeId: bid.creativeId, + dealId: bid.dealId, + currency: bid.currency, + netRevenue: bid.netRevenue, + ttl: bid.ttl, + mediaType: bid.mediaType + }; + + if (bid.vastXml) { + bidResponse.vastXml = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"](bid.vastXml, bid.cpm); + } else { + bidResponse.ad = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"](bid.ad, bid.cpm); + } + + bidResponses.push(bidResponse); + }); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + try { + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: bidderConfig.USERSYNC + }); + } + + if (serverResponses.length > 0 && serverResponses[0].body && serverResponses[0].body.pixel) { + serverResponses[0].body.pixel.forEach(function (px) { + if (px.type === 'image' && syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: px.url + }); + } + + if (px.type === 'iframe' && syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: px.url + }); + } + }); + } + } catch (e) {} + + return syncs; + } +}; + +function _getBiggestSize(sizes) { + if (sizes.length <= 0) return false; + var acreage = 0; + var index = 0; + + for (var i = 0; i < sizes.length; i++) { + var currentAcreage = sizes[i][0] * sizes[i][1]; + + if (currentAcreage >= acreage) { + acreage = currentAcreage; + index = i; + } + } + + return sizes[index][0] + 'x' + sizes[index][1]; +} + +function _getDoNotTrack() { + if (window.top.doNotTrack || navigator.doNotTrack || navigator.msDoNotTrack) { + if (window.top.doNotTrack == '1' || navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') { + return 1; + } else { + return 0; + } + } else { + return 0; + } +} +/** + * Extracts the page url from given bid request or use the (top) window location as fallback + * + * @param {*} bidderRequest + * @returns {string} + */ + + +function _extractTopWindowUrlFromBidderRequest(bidderRequest) { + if (bidderRequest && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.canonicalUrl')) { + return bidderRequest.refererInfo.canonicalUrl; + } + + try { + return window.top.location.href; + } catch (e) { + return window.location.href; + } +} +/** + * Extracts the referrer from given bid request or use the (top) document referrer as fallback + * + * @param {*} bidderRequest + * @returns {string} + */ + + +function _extractTopWindowReferrerFromBidderRequest(bidderRequest) { + if (bidderRequest && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.referer')) { + return bidderRequest.refererInfo.referer; + } + + try { + return window.top.document.referrer; + } catch (e) { + return window.document.referrer; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[626]); \ No newline at end of file diff --git a/build/dist/radsBidAdapter.js b/build/dist/radsBidAdapter.js new file mode 100644 index 00000000000..3e557fa9ad8 --- /dev/null +++ b/build/dist/radsBidAdapter.js @@ -0,0 +1,196 @@ +pbjsChunk([130],{ + +/***/ 628: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(629); + + +/***/ }), + +/***/ 629: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var BIDDER_CODE = 'rads'; +var ENDPOINT_URL = 'https://rads.recognified.net/md.request.php'; +var ENDPOINT_URL_DEV = 'https://dcradn1.online-solution.biz/md.request.php'; +var DEFAULT_VAST_FORMAT = 'vast2'; +var spec = { + code: BIDDER_CODE, + aliases: ['rads'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placement; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bidRequest) { + var params = bidRequest.params; + var videoData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') || {}; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](videoData.playerSize || bidRequest.sizes)[0]; + + var _sizes$split = sizes.split('x'), + _sizes$split2 = _slicedToArray(_sizes$split, 2), + width = _sizes$split2[0], + height = _sizes$split2[1]; + + var placementId = params.placement; + var rnd = Math.floor(Math.random() * 99999999999); + var referrer = encodeURIComponent(bidderRequest.refererInfo.referer); + var bidId = bidRequest.bidId; + var isDev = params.devMode || false; + var endpoint = isDev ? ENDPOINT_URL_DEV : ENDPOINT_URL; + var payload = {}; + + if (isVideoRequest(bidRequest)) { + var vastFormat = params.vastFormat || DEFAULT_VAST_FORMAT; + payload = { + rt: vastFormat, + _f: 'prebid_js', + _ps: placementId, + srw: width, + srh: height, + idt: 100, + rnd: rnd, + p: referrer, + bid_id: bidId + }; + } else { + payload = { + rt: 'bid-response', + _f: 'prebid_js', + _ps: placementId, + srw: width, + srh: height, + idt: 100, + rnd: rnd, + p: referrer, + bid_id: bidId + }; + } + + prepareExtraParams(params, payload); + return { + method: 'GET', + url: endpoint, + data: objectToQueryString(payload) + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + var crid = response.crid || 0; + var cpm = response.cpm / 1000000 || 0; + + if (cpm !== 0 && crid !== 0) { + var dealId = response.dealid || ''; + var currency = response.currency || 'EUR'; + var netRevenue = response.netRevenue === undefined ? true : response.netRevenue; + var bidResponse = { + requestId: response.bid_id, + cpm: cpm, + width: response.width, + height: response.height, + creativeId: crid, + dealId: dealId, + currency: currency, + netRevenue: netRevenue, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout') + }; + + if (response.vastXml) { + bidResponse.vastXml = response.vastXml; + bidResponse.mediaType = 'video'; + } else { + bidResponse.ad = response.adTag; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + } +}; + +function objectToQueryString(obj, prefix) { + var str = []; + var p; + + for (p in obj) { + if (obj.hasOwnProperty(p)) { + var k = prefix ? prefix + '[' + p + ']' : p; + var v = obj[p]; + str.push(v !== null && _typeof(v) === 'object' ? objectToQueryString(v, k) : encodeURIComponent(k) + '=' + encodeURIComponent(v)); + } + } + + return str.join('&'); +} +/** + * 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' || !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} + +function prepareExtraParams(params, payload) { + if (params.pfilter !== undefined) { + payload.pfilter = params.pfilter; + } + + if (params.bcat !== undefined) { + payload.bcat = params.bcat; + } + + if (params.dvt !== undefined) { + payload.dvt = params.dvt; + } + + if (params.latitude !== undefined) { + payload.latitude = params.latitude; + } + + if (params.longitude !== undefined) { + payload.longitude = params.longitude; + } + + if (params.ip !== undefined) { + payload.i = params.ip; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[628]); \ No newline at end of file diff --git a/build/dist/rakutenBidAdapter.js b/build/dist/rakutenBidAdapter.js new file mode 100644 index 00000000000..d5ee9a1cec1 --- /dev/null +++ b/build/dist/rakutenBidAdapter.js @@ -0,0 +1,115 @@ +pbjsChunk([129],{ + +/***/ 630: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(631); + + +/***/ }), + +/***/ 631: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 = 'rakuten'; +var ENDPOINT = 'https://s-bid.rmp.rakuten.com/h'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.adSpotId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var bidRequests = []; + validBidRequests.forEach(function (bid) { + var _a, _b; + + var params = bid.params; + bidRequests.push({ + method: 'GET', + url: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rakuten.endpoint') || ENDPOINT, + data: _objectSpread(_objectSpread({ + bi: bid.bidId, + t: params.adSpotId, + s: document.location.protocol, + ua: navigator.userAgent, + l: navigator.browserLanguage || navigator.language, + d: document.domain, + tp: bidderRequest.refererInfo.stack[0] || window.location.href, + pp: bidderRequest.refererInfo.referer, + gdpr: ((_a = bidderRequest.gdprConsent) === null || _a === void 0 ? void 0 : _a.gdprApplies) ? 1 : 0 + }, ((_b = bidderRequest.gdprConsent) === null || _b === void 0 ? void 0 : _b.consentString) && { + cd: bidderRequest.gdprConsent.consentString + }), bidderRequest.uspConsent && { + ccpa: bidderRequest.uspConsent + }) + }); + }); + return bidRequests; + }, + interpretResponse: function interpretResponse(response, request) { + var sb = response.body; + var bidResponses = []; + + if (sb.cpm && sb.ad) { + bidResponses.push({ + requestId: sb.bid_id, + cpm: sb.cpm, + width: sb.width || 0, + height: sb.height || 0, + creativeId: sb.creative_id || 0, + dealId: sb.deal_id || '', + currency: sb.currency || 'USD', + netRevenue: typeof sb.net_revenue === 'undefined' ? true : !!sb.net_revenue, + mediaType: __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], + ttl: sb.ttl, + ad: sb.ad + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.pixelEnabled && serverResponses[0].body !== undefined) { + var bidResponseObj = serverResponses[0].body; + + if (!bidResponseObj) { + return []; + } + + if (bidResponseObj.sync_urls && bidResponseObj.sync_urls.length > 0) { + bidResponseObj.sync_urls.forEach(function (syncUrl) { + if (syncUrl && syncUrl !== 'null' && syncUrl.length > 0) { + syncs.push({ + type: 'image', + url: syncUrl + }); + } + }); + } + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[630]); \ No newline at end of file diff --git a/build/dist/readpeakBidAdapter.js b/build/dist/readpeakBidAdapter.js new file mode 100644 index 00000000000..b1fad6ac97c --- /dev/null +++ b/build/dist/readpeakBidAdapter.js @@ -0,0 +1,296 @@ +pbjsChunk([128],{ + +/***/ 632: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(633); + + +/***/ }), + +/***/ 633: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ENDPOINT", function() { return ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var ENDPOINT = 'https://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 = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.publisherId && bid.nativeParams); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var currencyObj = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('currency'); + var currency = currencyObj && currencyObj.adServerCurrency || 'USD'; + var request = { + id: bidRequests[0].bidderRequestId, + imp: bidRequests.map(function (slot) { + return impression(slot); + }).filter(function (imp) { + return imp.native != null; + }), + site: site(bidRequests, bidderRequest), + app: app(bidRequests), + device: device(), + cur: [currency], + source: { + fd: 1, + tid: bidRequests[0].transactionId, + ext: { + prebid: "4.2.0" + } + } + }; + 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: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* 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, slot.nativeParams.wmin || NATIVE_DEFAULTS.IMG_MIN, slot.nativeParams.hmin || 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(bidRequests, bidderRequest) { + var url = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl') || bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + var pubId = bidRequests && bidRequests.length > 0 ? bidRequests[0].params.publisherId : '0'; + var siteId = bidRequests && bidRequests.length > 0 ? bidRequests[0].params.siteId : '0'; + var appParams = bidRequests[0].params.app; + + if (!appParams) { + return { + publisher: { + id: pubId.toString(), + domain: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('publisherDomain') + }, + id: siteId ? siteId.toString() : pubId.toString(), + page: url, + domain: url && Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"])(url).hostname || __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('publisherDomain') + }; + } + + return undefined; +} + +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 undefined; +} + +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); +} + +function device() { + return { + ua: navigator.userAgent, + language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage, + devicetype: isMobile() ? 1 : isConnectedTV() ? 3 : 2 + }; +} + +function parse(rawResponse) { + try { + if (rawResponse) { + if (_typeof(rawResponse) === 'object') { + return rawResponse; + } else { + return JSON.parse(rawResponse); + } + } + } catch (ex) { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 ? { + url: asset.img.url, + width: asset.img.w || 750, + height: asset.img.h || 500 + } : keys.image; + keys.cta = asset.data && asset.id === 5 ? asset.data.value : keys.cta; + }); + + if (nativeAd.link) { + keys.clickUrl = encodeURIComponent(nativeAd.link.url); + } + + var trackers = nativeAd.imptrackers || []; + trackers.unshift(Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"])(bid.burl, bid.price)); + keys.impressionTrackers = trackers; + return keys; + } + } + + return null; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(33))) + +/***/ }) + +},[632]); \ No newline at end of file diff --git a/build/dist/realvuAnalyticsAdapter.js b/build/dist/realvuAnalyticsAdapter.js new file mode 100644 index 00000000000..869c9c1b5ac --- /dev/null +++ b/build/dist/realvuAnalyticsAdapter.js @@ -0,0 +1,1382 @@ +pbjsChunk([18],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 634: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(635); + + +/***/ }), + +/***/ 635: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lib", function() { return lib; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); +// RealVu Analytics Adapter + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); + +var utils = __webpack_require__(0); + +var realvuAnalyticsAdapter = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* 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 */ +} + +var lib = { + 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 + defer: [], + 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; + 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; + }); + z.add_evt(window.top1, 'scroll', function () { + window.top1.realvu_aa.foc = 1; + }); + z.add_evt(window.top1, 'blur', function () { + window.top1.realvu_aa.foc = 0; + }); + z.add_evt(window.top1.document, 'blur', function () { + window.top1.realvu_aa.foc = 0; + }); + z.add_evt(window.top1, 'visibilitychange', function () { + window.top1.realvu_aa.foc = !window.top1.document.hidden; + }); + z.doLog = window.top1.location.search.match(/boost_log/) || document.referrer.match(/boost_log/) ? 1 : 0; + + if (z.doLog) { + window.setTimeout(z.scr('https://ac.realvu.net/realvu_aa_viz.js'), 500); + } + }, + add_evt: function add_evt(elem, evtType, func) { + elem.addEventListener(evtType, func, true); + this.defer.push(function () { + elem.removeEventListener(evtType, func, true); + }); + }, + update: function update() { + var z = this; + var t = window.top1; + var de = t.document.documentElement; + z.x1 = t.pageXOffset ? t.pageXOffset : de.scrollLeft; + z.y1 = t.pageYOffset ? t.pageYOffset : de.scrollTop; + var w1 = t.innerWidth ? t.innerWidth : de.clientWidth; + var h1 = t.innerHeight ? t.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; + 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; + 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(' ' + f + '', 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 + ' ' + bk.f + '', 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 = 'https://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; + if (f != 'conf') s2 += '_ps=' + this.enc(a.unit_id); + s2 += '_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 vrScore = z.score(a, 'v:r'); + + if (vrScore != null) { + if (a.r == 'no' && vrScore > 75) { + a.riff = 'yes'; + } + } + + var vv0Score = z.score(a, 'v:v0'); + + if (vv0Score != null) { + if (a.r == 'yes' && vv0Score < 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 notFriendly = 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) { + notFriendly = true; + } else { + a = ain; + tn = a.tagName; + } + } + + if (notFriendly || 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 + 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(partnerId, unitId, callback, delay) { + var p1 = partnerId; + + if (typeof p1 == 'string') { + p1 = { + partner_id: partnerId, + unit_id: unitId, + 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 pushBid = 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) { + pushBid = true; + break; + } + } + } else { + pushBid = true; + adi = window.top1.realvu_aa.check({ + unit_id: args.adUnitCode, + size: args.size, + partner_id: partnerId + }); + } + + if (pushBid) { + 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 unitId = args.adUnitCode; + + for (var i = 0; i < z.ads.length; i++) { + var adi = z.ads[i]; + + if (adi.unit_id == unitId) { + 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(unitId) { + // return status object + for (var i = 0; i < this.ads.length; i++) { + var adi = this.ads[i]; + if (adi.unit_id == unitId) 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; + storage.setDataInLocalStorage(this.keyPos(a), v); + } catch (ex) { + /* continue regardless of error */ + } + }, + readPos: function readPos(a) { + try { + var s = storage.getDataFromLocalStorage(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 = storage.getDataFromLocalStorage(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; + } + + storage.setDataInLocalStorage(k1, nv + ':' + nr); + } catch (ex) { + /* do nothing */ + } + }, + score: function score(a, name) { + try { + var vstr = storage.getDataFromLocalStorage(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; + } +}; +window.top1.realvu_aa_fifo = window.top1.realvu_aa_fifo || []; +window.top1.realvu_aa = window.top1.realvu_aa || lib; + +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) + '
'; + + + 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 === __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_RESPONSE) { + boost.checkBidIn(partnerId, args, b); + } else if (eventType === __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.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; +}; + +var disableAnalyticsSuper = realvuAnalyticsAdapter.disableAnalytics; + +realvuAnalyticsAdapter.disableAnalytics = function () { + while (lib.defer.length) { + lib.defer.pop()(); + } + + disableAnalyticsSuper.apply(this, arguments); +}; + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: realvuAnalyticsAdapter, + code: 'realvuAnalytics' +}); +/* harmony default export */ __webpack_exports__["default"] = (realvuAnalyticsAdapter); + +/***/ }) + +},[634]); \ No newline at end of file diff --git a/build/dist/reklamstoreBidAdapter.js b/build/dist/reklamstoreBidAdapter.js new file mode 100644 index 00000000000..3f519ae711f --- /dev/null +++ b/build/dist/reklamstoreBidAdapter.js @@ -0,0 +1,196 @@ +pbjsChunk([127],{ + +/***/ 636: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(637); + + +/***/ }), + +/***/ 637: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'reklamstore'; +var ENDPOINT_URL = 'https://ads.rekmob.com/m/prebid'; +var CURRENCY = 'USD'; +var TIME_TO_LIVE = 360; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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.regionId; + }, + + /** + * 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 url = bidderRequest.refererInfo.referer; + var requests = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + requests.push({ + method: 'GET', + url: ENDPOINT_URL, + data: { + regionId: bid.params.regionId, + dt: getDeviceType(), + os: getOS(), + ref: extractDomain(url), + _: new Date().getTime(), + mobile_web: 1 + }, + bidId: bid.bidId + }); + }); + + return requests; + }, + + /** + * 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) { + try { + var bidResponse = serverResponse.body; + var bidResponses = []; + + if (bidResponse) { + bidResponses.push({ + requestId: bidRequest.bidId, + cpm: parseFloat(bidResponse.cpm), + width: bidResponse.w, + height: bidResponse.h, + creativeId: bidResponse.adId || 1, + currency: CURRENCY, + netRevenue: true, + ttl: TIME_TO_LIVE, + ad: bidResponse.ad + }); + } + + return bidResponses; + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](err); + return []; + } + }, + + /** + * 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 = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponses, function (bidResponse) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidResponse.body.syncs, function (sync) { + if (syncOptions.pixelEnabled && sync.type == 'image') { + syncs.push({ + type: sync.type, + url: sync.url + }); + } else if (syncOptions.iframeEnabled && sync.type == 'iframe') { + syncs.push({ + type: sync.type, + url: sync.url + }); + } + }); + }); + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function getDeviceType() { + var PHONE = 0; + var TABLET = 2; + var DESKTOP = 3; + + if (isPhone()) { + return PHONE; + } else if (isTablet()) { + return TABLET; + } else { + return DESKTOP; + } +} + +function isPhone() { + var check = false; + + (function (a) { + if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; + })(navigator.userAgent || navigator.vendor || window.opera); + + return check; +} + +function isTablet() { + var check = false; + + (function (a) { + if (/ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(a)) { + check = true; + } + })(navigator.userAgent || navigator.vendor || window.opera); + + return check; +} + +function getOS() { + var ua = navigator.userAgent; + + if (ua.match(/(iPhone|iPod|iPad)/)) { + return '1'; + } else if (ua.match(/Android/)) { + return '0'; + } else { + return '3'; + } +} + +function extractDomain(url) { + var domain; + + if (url.indexOf('://') > -1) { + domain = url.split('/')[2]; + } else { + domain = url.split('/')[0]; + } + + domain = domain.split(':')[0]; + return domain; +} + +/***/ }) + +},[636]); \ No newline at end of file diff --git a/build/dist/relaidoBidAdapter.js b/build/dist/relaidoBidAdapter.js new file mode 100644 index 00000000000..773fca87117 --- /dev/null +++ b/build/dist/relaidoBidAdapter.js @@ -0,0 +1,340 @@ +pbjsChunk([126],{ + +/***/ 638: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(639); + + +/***/ }), + +/***/ 639: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["isMobile"] = isMobile; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); + + + + + +var BIDDER_CODE = 'relaido'; +var BIDDER_DOMAIN = 'api.relaido.jp'; +var ADAPTER_VERSION = '1.0.1'; +var DEFAULT_TTL = 300; +var UUID_KEY = 'relaido_uuid'; +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); + +function isBidRequestValid(bid) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isSafariBrowser"]() && !hasUuid()) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('uuid is not found.'); + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.placementId')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('placementId param is reqeuired.'); + return false; + } + + if (hasVideoMediaType(bid)) { + if (!isVideoValid(bid)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Invalid mediaType video.'); + return false; + } + } else if (hasBannerMediaType(bid)) { + if (!isBannerValid(bid)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Invalid mediaType banner.'); + return false; + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Invalid mediaTypes input banner or video.'); + return false; + } + + return true; +} + +function buildRequests(validBidRequests, bidderRequest) { + var bidRequests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + var bidRequest = validBidRequests[i]; + var placementId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('placementId', bidRequest.params); + var bidDomain = bidRequest.params.domain || BIDDER_DOMAIN; + var bidUrl = "https://".concat(bidDomain, "/bid/v1/prebid/").concat(placementId); + var uuid = getUuid(); + var mediaType = getMediaType(bidRequest); + var payload = { + version: ADAPTER_VERSION, + timeout_ms: bidderRequest.timeout, + ad_unit_code: bidRequest.adUnitCode, + auction_id: bidRequest.auctionId, + bidder: bidRequest.bidder, + bidder_request_id: bidRequest.bidderRequestId, + bid_requests_count: bidRequest.bidRequestsCount, + bid_id: bidRequest.bidId, + transaction_id: bidRequest.transactionId, + media_type: mediaType, + uuid: uuid + }; + + if (hasVideoMediaType(bidRequest)) { + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize'); + payload.width = playerSize[0][0]; + payload.height = playerSize[0][1]; + } else if (hasBannerMediaType(bidRequest)) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes'); + payload.width = sizes[0][0]; + payload.height = sizes[0][1]; + } // It may not be encoded, so add it at the end of the payload + + + payload.ref = bidderRequest.refererInfo.referer; + bidRequests.push({ + method: 'GET', + url: bidUrl, + data: payload, + options: { + withCredentials: true + }, + bidId: bidRequest.bidId, + player: bidRequest.params.player, + width: payload.width, + height: payload.height, + mediaType: mediaType + }); + } + + return bidRequests; +} + +function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var body = serverResponse.body; + + if (!body || body.status != 'ok') { + return []; + } + + if (body.uuid) { + storage.setDataInLocalStorage(UUID_KEY, body.uuid); + } + + var playerUrl = bidRequest.player || body.playerUrl; + var mediaType = bidRequest.mediaType || __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + var bidResponse = { + requestId: bidRequest.bidId, + width: bidRequest.width, + height: bidRequest.height, + cpm: body.price, + currency: body.currency, + creativeId: body.creativeId, + dealId: body.dealId || '', + ttl: body.ttl || DEFAULT_TTL, + netRevenue: true, + mediaType: mediaType + }; + + if (mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]) { + bidResponse.vastXml = body.vast; + bidResponse.renderer = newRenderer(bidRequest.bidId, playerUrl); + } else { + var playerTag = createPlayerTag(playerUrl); + var renderTag = createRenderTag(bidRequest.width, bidRequest.height, body.vast); + bidResponse.ad = "
".concat(playerTag).concat(renderTag, "
"); + } + + bidResponses.push(bidResponse); + return bidResponses; +} + +function getUserSyncs(syncOptions, serverResponses) { + if (!syncOptions.iframeEnabled) { + return []; + } + + var syncUrl = "https://".concat(BIDDER_DOMAIN, "/tr/v1/prebid/sync.html"); + + if (serverResponses.length > 0) { + syncUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverResponses, '0.body.syncUrl') || syncUrl; + } + + receiveMessage(); + return [{ + type: 'iframe', + url: syncUrl + }]; +} + +function onBidWon(bid) { + var query = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"]({ + placement_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.0.placementId'), + creative_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'creativeId'), + price: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'cpm'), + auction_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'auctionId'), + bid_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'requestId'), + ad_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'adId'), + ad_unit_code: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'adUnitCode'), + ref: window.location.href + }).replace(/\&$/, ''); + var bidDomain = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.0.domain') || BIDDER_DOMAIN; + var burl = "https://".concat(bidDomain, "/tr/v1/prebid/win.gif?").concat(query); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](burl); +} + +function onTimeout(data) { + var query = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"]({ + placement_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](data, '0.params.0.placementId'), + timeout: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](data, '0.timeout'), + auction_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](data, '0.auctionId'), + bid_id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](data, '0.bidId'), + ad_unit_code: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](data, '0.adUnitCode'), + ref: window.location.href + }).replace(/\&$/, ''); + var bidDomain = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](data, '0.params.0.domain') || BIDDER_DOMAIN; + var timeoutUrl = "https://".concat(bidDomain, "/tr/v1/prebid/timeout.gif?").concat(query); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](timeoutUrl); +} + +function createPlayerTag(playerUrl) { + return ""); +} + +function createRenderTag(width, height, vast) { + return ""; +} + +; + +function newRenderer(bidId, playerUrl) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: bidId, + url: playerUrl, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('renderer.setRender Error', err); + } + + return renderer; +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.RelaidoPlayer.renderAd({ + adUnitCode: bid.adUnitCode, + width: bid.width, + height: bid.height, + vastXml: bid.vastXml, + mediaType: bid.mediaType + }); + }); +} + +function receiveMessage() { + window.addEventListener('message', setUuid); +} + +function setUuid(e) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](e.data) && e.data.relaido_uuid) { + storage.setDataInLocalStorage(UUID_KEY, e.data.relaido_uuid); + window.removeEventListener('message', setUuid); + } +} + +function isBannerValid(bid) { + if (!isMobile()) { + return false; + } + + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes'); + + if (sizes && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes)) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](sizes[0])) { + var width = sizes[0][0]; + var height = sizes[0][1]; + + if (width >= 300 && height >= 250) { + return true; + } + } + } + + return false; +} + +function isVideoValid(bid) { + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize'); + + if (playerSize && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](playerSize) && playerSize.length > 0) { + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (context && context === 'outstream') { + return true; + } + } + + return false; +} + +function hasUuid() { + return !!storage.getDataFromLocalStorage(UUID_KEY); +} + +function getUuid() { + return storage.getDataFromLocalStorage(UUID_KEY) || ''; +} + +function isMobile() { + var ua = navigator.userAgent; + + if (ua.indexOf('iPhone') > -1 || ua.indexOf('iPod') > -1 || ua.indexOf('Android') > -1 && ua.indexOf('Tablet') == -1) { + return true; + } + + return false; +} + +function getMediaType(bid) { + if (hasVideoMediaType(bid)) { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + } else if (hasBannerMediaType(bid)) { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } + + return ''; +} + +function hasBannerMediaType(bid) { + return !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner'); +} + +function hasVideoMediaType(bid) { + return !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs, + onBidWon: onBidWon, + onTimeout: onTimeout +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[638]); \ No newline at end of file diff --git a/build/dist/reloadBidAdapter.js b/build/dist/reloadBidAdapter.js new file mode 100644 index 00000000000..fa229c5b944 --- /dev/null +++ b/build/dist/reloadBidAdapter.js @@ -0,0 +1,448 @@ +pbjsChunk([125],{ + +/***/ 640: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(641); + + +/***/ }), + +/***/ 641: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__ = __webpack_require__(9); + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'reload'; +var VERSION_ADAPTER = '1.10'; +var spec = { + code: BIDDER_CODE, + png: {}, + + /** + * 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.plcmID && bid.params.partID && 'opdomID' in bid.params && 'bsrvID' in bid.params && bid.params.bsrvID >= 0 && bid.params.bsrvID <= 99); + }, + + /** + * 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 vRequests = []; + var bidReq = { + id: Math.random().toString(10).substring(2), + imp: [] + }; + var vgdprConsent = null; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent')) { + vgdprConsent = bidderRequest.gdprConsent; + } + + var vPrxClientTool = null; + var vSrvUrl = null; + + for (var vIdx = 0; vIdx < validBidRequests.length; vIdx++) { + var bidRequest = validBidRequests[vIdx]; + vPrxClientTool = new ReloadClientTool({ + prxVer: VERSION_ADAPTER, + prxType: 'bd', + plcmID: bidRequest.params.plcmID, + partID: bidRequest.params.partID, + opdomID: bidRequest.params.opdomID, + bsrvID: bidRequest.params.bsrvID, + gdprObj: vgdprConsent, + mediaObj: bidRequest.mediaTypes, + wnd: __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getWindowTop"](), + rtop: __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.reachedTop') || false + }); + if (vSrvUrl === null) vSrvUrl = vPrxClientTool.getSrvUrl(); + var vImpression = { + id: bidRequest.bidId, + bidId: bidRequest.bidId, + adUnitCode: bidRequest.adUnitCode, + transactionId: bidRequest.transactionId, + bidderRequestId: bidRequest.bidderRequestId, + auctionId: bidRequest.auctionId, + banner: { + ext: { + type: bidRequest.params.type || 'pcm', + pcmdata: vPrxClientTool.getPCMObj() + } + } + }; + bidReq.imp.push(vImpression); + } + + if (bidReq.imp.length > 0) { + var payloadString = JSON.stringify(bidReq); + vRequests.push({ + method: 'POST', + url: vSrvUrl, + data: payloadString + }); + } + + return vRequests; + }, + + /** + * 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 = []; + + for (var vIdx = 0; vIdx < serverBody.seatbid.length; vIdx++) { + var vSeatBid = serverBody.seatbid[vIdx]; + + for (var vIdxBid = 0; vIdxBid < vSeatBid.bid.length; vIdxBid++) { + var vBid = vSeatBid.bid[vIdxBid]; + var vPrxClientTool = new ReloadClientTool({ + plcmID: vBid.ext.plcmID, + partID: vBid.ext.partID, + opdomID: vBid.ext.opdomID, + bsrvID: vBid.ext.bsrvID + }); + vPrxClientTool.setPCMObj(vBid.ext.pcmdata); + + if (vPrxClientTool.getBP() > 0) { + var bidResponse = { + requestId: vBid.impid, + ad: vPrxClientTool.getAM(), + cpm: vPrxClientTool.getBP() / 100, + width: vPrxClientTool.getW(), + height: vPrxClientTool.getH(), + creativeId: vBid.id, + currency: vPrxClientTool.getBC(), + ttl: 300, + netRevenue: true + }; + bidResponses.push(bidResponse); + this.png[vBid.ext.adUnitCode] = vPrxClientTool.getPingUrl('bidwon'); + } + } + } + + return bidResponses; + }, + + /** + * Register bidder specific code, which will execute if a bid from this bidder won the auction + * @param {Bid} The bid that won the auction + */ + onBidWon: function onBidWon(bid) { + if (typeof this.png[bid.adUnitCode] !== 'string' || this.png[bid.adUnitCode] === '') return; + new Image().src = this.png[bid.adUnitCode]; + } +}; + +function ReloadClientTool(args) { + var that = this; + var _pcmClientVersion = '120'; + var _pcmFilePref = 'prx_root_'; + var _resFilePref = 'prx_pnws_'; + var _pcmInputObjVers = '120'; + var _instObj = null; + var _status = 'NA'; + var _message = ''; + var _log = ''; + + var _memFile = _getMemFile(); + + if (_memFile.status !== 'ok') { + _log += 'WARNING: clnt-int mem file initialized\n'; + } + + that.getPCMObj = function () { + return { + thisVer: _pcmInputObjVers, + statStr: _memFile.statStr, + plcmData: _getPlcmData(), + clntData: _getClientData(args.wnd, args.rtop), + resultData: _getRD(), + gdprObj: _getGdpr(), + mediaObj: _getMediaObj(), + proxetString: null, + dboData: null, + plcmSett: null + }; + }; + + that.setPCMObj = function (obj) { + if (obj.thisVer !== '100') { + _status = 'error'; + _message = 'incomp_output_obj_version'; + _log += ' ERROR incomp_output_obj_version'; + return; + } + + _status = obj.status; + _message = obj.message; + _log += ' ' + obj.log; + if (obj.status !== 'ok') return; + + _saveMemFile(obj.statStr, obj.srvUrl); + + _instObj = obj.instr; + }; + + that.getSrvUrl = function () { + var effSrvUrl = getBidServerUrl(0); + if (isNaN(parseInt(args.bsrvID)) !== true) effSrvUrl = getBidServerUrl(parseInt(args.bsrvID)); + if (typeof _memFile.srvUrl === 'string' && _memFile.srvUrl !== '') effSrvUrl = _memFile.srvUrl; + return 'https://' + effSrvUrl + '/bid'; + + function getBidServerUrl(idx) { + return 'bidsrv' + getTwoDigitString(idx) + '.reload.net'; + + function getTwoDigitString(idx) { + if (idx >= 10) return '' + idx;else return '0' + idx; + } + } + }; + + that.getMT = function () { + return _checkInstProp('mtype', 'dsp'); + }; + + that.getW = function () { + return _checkInstProp('width', 0); + }; + + that.getH = function () { + return _checkInstProp('height', 0); + }; + + that.getBP = function () { + return _checkInstProp('prc', 0); + }; + + that.getBC = function () { + return _checkInstProp('cur', 'USD'); + }; + + that.getAM = function () { + return _checkInstProp('am', null); + }; + + that.getPingUrl = function (pingName) { + var pingData = _checkInstProp('pingdata', {}); + + if (pingData[pingName] !== 'undefined') return pingData[pingName]; + return ''; + }; + + that.setRD = function (data) { + return _setRD(data); + }; + + that.getStat = function () { + return _status; + }; + + that.getMsg = function () { + return _message; + }; + + that.getLog = function () { + return _log; + }; + + function _checkInstProp(key, def) { + if (_instObj === null) return def; + if (typeof _instObj === 'undefined') return def; + if (_instObj.go !== true) return def; + if (typeof _instObj[key] === 'undefined') return def; + return _instObj[key]; + } + + function _getPlcmData() { + return { + prxVer: args.prxVer, + prxType: args.prxType, + plcmID: args.plcmID, + partID: args.partID, + opdomID: args.opdomID, + bsrvID: args.bsrvID, + dmod: args.dmod, + lmod: args.lmod, + lplcmID: args.lplcmID + }; + } + + function _getClientData(wnd, rtop) { + return { + version: 200, + locTime: Date.now(), + winInfo: _winInf(wnd), + envInfo: getEnvInfo(), + topw: rtop === true, + prot: wnd.document.location.protocol, + host: wnd.document.location.host, + title: wnd.document.title + }; + + function _winInf(wnd) { + return { + phs: { + w: wnd.screen.width, + h: wnd.screen.height + }, + avl: { + w: wnd.screen.availWidth, + h: wnd.screen.availHeight + }, + inr: { + w: wnd.innerWidth, + h: wnd.innerHeight + }, + bdy: { + w: wnd.document.body.clientWidth, + h: wnd.document.body.clientHeight + } + }; + } + + function getEnvInfo() { + return { + userAgent: navigator.userAgent, + appName: navigator.appName, + appVersion: navigator.appVersion + }; + } + } + + function _getMemFile() { + try { + var memFileObj = _getItem(_getMemFileName()); + + if (memFileObj === null) throw { + s: 'init' + }; + if (typeof memFileObj.statStr !== 'string') throw { + s: 'error' + }; + if (typeof memFileObj.srvUrl !== 'string') throw { + s: 'error' + }; + memFileObj.status = 'ok'; + return memFileObj; + } catch (err) { + var retObj = { + statStr: null, + srvUrl: null + }; + retObj.status = err.s; + return retObj; + } + } + + function _saveMemFile(statStr, srvUrl) { + try { + var fileData = { + statStr: statStr, + srvUrl: srvUrl + }; + + _setItem(_getMemFileName(), fileData); + + return true; + } catch (err) { + return false; + } + } + + function _getMemFileName() { + return _pcmFilePref + args.plcmID + '_' + args.partID; + } + + function _getRD() { + try { + return _getItem(_getResltStatusFileName()); + } catch (err) { + return null; + } + } + + function _setRD(fileData) { + try { + _setItem(_getResltStatusFileName(), fileData); + + return true; + } catch (err) { + return false; + } + } + + function _getGdpr() { + return args.gdprObj; + } + + function _getMediaObj() { + return args.mediaObj; + } + + function _getResltStatusFileName() { + if (args.lmod === true) return _resFilePref + args.lplcmID + '_' + args.partID;else return _resFilePref + args.plcmID + '_' + args.partID; + } + + function _setItem(name, data) { + var stgFileObj = { + ver: _pcmClientVersion, + ts: Date.now() + }; + + if (typeof data === 'string') { + stgFileObj.objtype = false; + stgFileObj.memdata = data; + } else { + stgFileObj.objtype = true; + stgFileObj.memdata = JSON.stringify(data); + } + + var stgFileStr = JSON.stringify(stgFileObj); + storage.setDataInLocalStorage(name, stgFileStr); + return true; + } + + function _getItem(name) { + try { + var obStgFileStr = storage.getDataFromLocalStorage(name); + if (obStgFileStr === null) return null; + var stgFileObj = JSON.parse(obStgFileStr); + if (stgFileObj.ver !== _pcmClientVersion) throw { + message: 'version_error' + }; + if (stgFileObj.objtype === true) return JSON.parse(stgFileObj.memdata);else return '' + stgFileObj.memdata; + } catch (err) { + return null; + } + } +} + +; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[640]); \ No newline at end of file diff --git a/build/dist/resultsmediaBidAdapter.js b/build/dist/resultsmediaBidAdapter.js new file mode 100644 index 00000000000..d54194f1eb0 --- /dev/null +++ b/build/dist/resultsmediaBidAdapter.js @@ -0,0 +1,316 @@ +pbjsChunk([124],{ + +/***/ 642: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(643); + + +/***/ }), + +/***/ 643: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + + + + +function ResultsmediaAdapter() { + this.code = 'resultsmedia'; + this.aliases = ['resultsmedia']; + this.supportedMediaTypes = [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]]; + var SUPPORTED_VIDEO_PROTOCOLS = [2, 3, 5, 6]; + var SUPPORTED_VIDEO_MIMES = ['video/mp4']; + var SUPPORTED_VIDEO_PLAYBACK_METHODS = [1, 2, 3, 4]; + var SUPPORTED_VIDEO_DELIVERY = [1]; + var SUPPORTED_VIDEO_API = [1, 2, 5]; + var slotsToBids = {}; + var that = this; + var version = '2.1'; + + this.isBidRequestValid = function (bid) { + return !!(bid.params && bid.params.zoneId); + }; + + this.getUserSyncs = function (syncOptions, responses, gdprConsent) { + return []; + }; + + function frameImp(BRs, bidderRequest) { + var impList = []; + var isSecure = 0; + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.stack.length) { + // clever trick to get the protocol + var el = document.createElement('a'); + el.href = bidderRequest.refererInfo.stack[0]; + isSecure = el.protocol == 'https:' ? 1 : 0; + } + + for (var i = 0; i < BRs.length; i++) { + slotsToBids[BRs[i].adUnitCode] = BRs[i]; + var impObj = {}; + impObj.id = BRs[i].adUnitCode; + impObj.secure = isSecure; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaTypes.banner') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaType') === 'banner') { + var banner = frameBanner(BRs[i]); + + if (banner) { + impObj.banner = banner; + } + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaTypes.video') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaType') === 'video') { + impObj.video = frameVideo(BRs[i]); + } + + if (!(impObj.banner || impObj.video)) { + continue; + } + + impObj.ext = frameExt(BRs[i]); + impList.push(impObj); + } + + return impList; + } + + function frameSite(bidderRequest) { + var site = { + domain: '', + page: '', + ref: '' + }; + + if (bidderRequest && bidderRequest.refererInfo) { + var ri = bidderRequest.refererInfo; + site.ref = ri.referer; + + if (ri.stack.length) { + site.page = ri.stack[ri.stack.length - 1]; // clever trick to get the domain + + var el = document.createElement('a'); + el.href = ri.stack[0]; + site.domain = el.hostname; + } + } + + return site; + } + + function frameDevice() { + return { + ua: navigator.userAgent, + ip: '', + // Empty Ip string is required, server gets the ip from HTTP header + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0 + }; + } + + function getValidSizeSet(dimensionList) { + var w = parseInt(dimensionList[0]); + var h = parseInt(dimensionList[1]); // clever check for NaN + + if (!(w !== w || h !== h)) { + // eslint-disable-line + return [w, h]; + } + + return false; + } + + function frameBanner(adUnit) { + // adUnit.sizes is scheduled to be deprecated, continue its support but prefer adUnit.mediaTypes.banner + var sizeList = adUnit.sizes; + + if (adUnit.mediaTypes && adUnit.mediaTypes.banner) { + sizeList = adUnit.mediaTypes.banner.sizes; + } + + var sizeStringList = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](sizeList); + var format = []; + sizeStringList.forEach(function (size) { + if (size) { + var dimensionList = getValidSizeSet(size.split('x')); + + if (dimensionList) { + format.push({ + 'w': dimensionList[0], + 'h': dimensionList[1] + }); + } + } + }); + + if (format.length) { + return { + 'format': format + }; + } + + return false; + } + + function frameVideo(bid) { + var size = []; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize')) { + var dimensionSet = bid.mediaTypes.video.playerSize; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.mediaTypes.video.playerSize[0])) { + dimensionSet = bid.mediaTypes.video.playerSize[0]; + } + + var validSize = getValidSizeSet(dimensionSet); + + if (validSize) { + size = validSize; + } + } + + return { + mimes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.mimes') || SUPPORTED_VIDEO_MIMES, + protocols: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.protocols') || SUPPORTED_VIDEO_PROTOCOLS, + w: size[0], + h: size[1], + startdelay: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.startdelay') || 0, + skip: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.skip') || 0, + playbackmethod: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playbackmethod') || SUPPORTED_VIDEO_PLAYBACK_METHODS, + delivery: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.delivery') || SUPPORTED_VIDEO_DELIVERY, + api: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.api') || SUPPORTED_VIDEO_API + }; + } + + function frameExt(bid) { + return { + bidder: { + zoneId: bid.params['zoneId'] + } + }; + } + + function frameBid(BRs, bidderRequest) { + var bid = { + id: BRs[0].bidderRequestId, + imp: frameImp(BRs, bidderRequest), + site: frameSite(bidderRequest), + device: frameDevice(), + user: { + ext: { + consent: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? bidderRequest.gdprConsent.consentString : '' + } + }, + at: 1, + tmax: 1000, + regs: { + ext: { + gdpr: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? Boolean(bidderRequest.gdprConsent.gdprApplies & 1) : false + } + } + }; + + if (BRs[0].schain) { + bid.source = { + 'ext': { + 'schain': BRs[0].schain + } + }; + } + + return bid; + } + + 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]; + } + } + } + + this.buildRequests = function (BRs, bidderRequest) { + var fallbackZoneId = getFirstParam('zoneId', BRs); + + if (fallbackZoneId === undefined || BRs.length < 1) { + return []; + } + + var uri = 'https://bid306.rtbsrv.com/bidder/?bid=3mhdom&zoneId=' + fallbackZoneId; + var fat = /(^v|(\.0)+$)/gi; + var prebidVersion = "4.2.0"; + uri += '&hbv=' + prebidVersion.replace(fat, '') + ',' + version.replace(fat, ''); + var bidRequest = frameBid(BRs, bidderRequest); + + if (!bidRequest.imp.length) { + return {}; + } + + return { + method: 'POST', + url: uri, + data: JSON.stringify(bidRequest) + }; + }; + + 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.id, + bidderCode: that.code, + cpm: parseFloat(bid.price), + width: bid.w, + height: bid.h, + creativeId: bid.crid, + currency: 'USD', + netRevenue: true, + ttl: 350 + }; + + if (bidRequest.mediaTypes && bidRequest.mediaTypes.video) { + bidResponse.vastUrl = bid.adm; + bidResponse.mediaType = 'video'; + bidResponse.ttl = 600; + } else { + bidResponse.ad = bid.adm; + } + + bids.push(bidResponse); + } + + return bids; + }; +} + +var spec = new ResultsmediaAdapter(); +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[642]); \ No newline at end of file diff --git a/build/dist/revcontentBidAdapter.js b/build/dist/revcontentBidAdapter.js new file mode 100644 index 00000000000..65b27112cb2 --- /dev/null +++ b/build/dist/revcontentBidAdapter.js @@ -0,0 +1,285 @@ +pbjsChunk([123],{ + +/***/ 644: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(645); + + +/***/ }), + +/***/ 645: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +// jshint esversion: 6, es3: false, node: true + + + + +var BIDDER_CODE = 'revcontent'; +var NATIVE_PARAMS = { + title: { + id: 0, + name: 'title' + }, + image: { + id: 3, + type: 3, + name: 'img' + }, + sponsoredBy: { + id: 5, + name: 'data', + type: 1 + } +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['native'], + isBidRequestValid: function isBidRequestValid(bid) { + return typeof bid.params.apiKey !== 'undefined' && typeof bid.params.userId !== 'undefined' && bid.hasOwnProperty('nativeParams'); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var userId = validBidRequests[0].params.userId; + var widgetId = validBidRequests[0].params.widgetId; + var apiKey = validBidRequests[0].params.apiKey; + var domain = validBidRequests[0].params.domain; + var host = validBidRequests[0].params.endpoint; + + if (typeof host === 'undefined') { + host = 'trends.revcontent.com'; + } + + var serverRequests = []; + var refererInfo; + + if (bidderRequest && bidderRequest.refererInfo) { + refererInfo = bidderRequest.refererInfo.referer; + } + + if (typeof domain === 'undefined') { + domain = extractHostname(refererInfo); + } + + var endpoint = 'https://' + host + '/rtb?apiKey=' + apiKey + '&userId=' + userId; + + if (!isNaN(widgetId) && widgetId > 0) { + endpoint = endpoint + '&widgetId=' + widgetId; + } + + var bidfloor = 0.1; + + if (!isNaN(validBidRequests[0].params.bidfloor) && validBidRequests[0].params.bidfloor > 0) { + bidfloor = validBidRequests[0].params.bidfloor; + } + + var imp = validBidRequests.map(function (bid, id) { + if (bid.hasOwnProperty('nativeParams')) { + var assets = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["_map"](bid.nativeParams, function (bidParams, key) { + var props = NATIVE_PARAMS[key]; + var asset = { + required: bidParams.required & 1 + }; + + if (props) { + asset.id = props.id; + var wmin, hmin, w, h; + var aRatios = bidParams.aspect_ratios; + + if (aRatios && aRatios[0]) { + aRatios = aRatios[0]; + wmin = aRatios.min_width || 0; + hmin = aRatios.ratio_height * wmin / aRatios.ratio_width | 0; + } + + asset[props.name] = { + len: bidParams.len, + type: props.type, + wmin: wmin, + hmin: hmin, + w: w, + h: h + }; + return asset; + } + }).filter(Boolean); + + return { + id: id + 1, + tagid: bid.params.mid, + bidderRequestId: bid.bidderRequestId, + auctionId: bid.auctionId, + transactionId: bid.transactionId, + native: { + request: { + ver: '1.1', + context: 2, + contextsubtype: 21, + plcmttype: 1, + plcmtcnt: 1, + assets: assets + }, + ver: '1.1', + battr: [1, 3, 8, 11, 17] + }, + instl: 0, + bidfloor: bidfloor, + secure: '1' + }; + } + }); + var data = { + id: bidderRequest.auctionId, + imp: imp, + site: { + id: widgetId, + domain: domain, + page: refererInfo, + cat: ['IAB17'], + publisher: { + id: userId, + domain: domain + } + }, + device: { + ua: navigator.userAgent, + language: 'en' + }, + user: { + id: 1 + }, + at: 2, + bcat: ['IAB24', 'IAB25', 'IAB25-1', 'IAB25-2', 'IAB25-3', 'IAB25-4', 'IAB25-5', 'IAB25-6', 'IAB25-7', 'IAB26', 'IAB26-1', 'IAB26-2', 'IAB26-3', 'IAB26-4'] + }; + serverRequests.push({ + method: 'POST', + options: { + contentType: 'application/json' + }, + url: endpoint, + data: JSON.stringify(data), + bid: validBidRequests + }); + return serverRequests; + }, + interpretResponse: function interpretResponse(serverResponse, originalBidRequest) { + if (!serverResponse.body) { + return; + } + + var seatbid = serverResponse.body.seatbid[0]; + var bidResponses = []; + + var _loop = function _loop() { + var adm = JSON.parse(seatbid.bid[x]['adm']); + var ad = { + clickUrl: adm.link.url + }; + adm.assets.forEach(function (asset) { + switch (asset.id) { + case 3: + ad['image'] = { + url: asset.img.url, + height: 1, + width: 1 + }; + break; + + case 0: + ad['title'] = asset.title.text; + break; + + case 5: + ad['sponsoredBy'] = asset.data.value; + break; + } + }); + size = originalBidRequest.bid[0].params.size; + var bidResponse = { + bidder: BIDDER_CODE, + requestId: originalBidRequest.bid[0].bidId, + cpm: seatbid.bid[x]['price'], + creativeId: seatbid.bid[x]['adid'], + currency: 'USD', + netRevenue: true, + ttl: 360, + nurl: seatbid.bid[x]['nurl'], + bidderCode: 'revcontent', + mediaType: 'native', + native: ad, + width: size.width, + height: size.height, + ad: displayNative(ad, getTemplate(size, originalBidRequest.bid[0].params.template)) + }; + bidResponses.push(bidResponse); + }; + + for (var x in seatbid.bid) { + var size; + + _loop(); + } + + return bidResponses; + }, + onBidWon: function onBidWon(bid) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["triggerPixel"](bid.nurl); + return true; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function displayNative(ad, template) { + template = template.replace(/{image}/g, ad['image']['url']); + template = template.replace(/{title}/g, ad['title']); + template = template.replace(/{clickUrl}/g, ad['clickUrl']); + template = template.replace(/{sponsoredBy}/g, ad['sponsoredBy']); + return template; +} + +function getTemplate(size, customTemplate) { + if (typeof customTemplate !== 'undefined' && customTemplate !== '') { + return customTemplate; + } + + if (size.width == 300 && size.height == 250) { + return '

{title}

SEE MORE
'; + } + + if (size.width == 728 && size.height == 90) { + return '

{title}

>
'; + } + + if (size.width == 300 && size.height == 600) { + return '

{title}

>
'; + } + + return ''; +} + +function extractHostname(url) { + if (typeof url == 'undefined' || url == null) { + return ''; + } + + var hostname; + + if (url.indexOf('//') > -1) { + hostname = url.split('/')[2]; + } else { + hostname = url.split('/')[0]; + } + + hostname = hostname.split(':')[0]; + hostname = hostname.split('?')[0]; + return hostname; +} + +/***/ }) + +},[644]); \ No newline at end of file diff --git a/build/dist/rhythmoneBidAdapter.js b/build/dist/rhythmoneBidAdapter.js new file mode 100644 index 00000000000..43a3bac97a0 --- /dev/null +++ b/build/dist/rhythmoneBidAdapter.js @@ -0,0 +1,323 @@ +pbjsChunk([122],{ + +/***/ 646: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(647); + + +/***/ }), + +/***/ 647: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + + + + +function RhythmOneBidAdapter() { + this.code = 'rhythmone'; + this.supportedMediaTypes = [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]]; + var SUPPORTED_VIDEO_PROTOCOLS = [2, 3, 5, 6]; + var SUPPORTED_VIDEO_MIMES = ['video/mp4']; + var SUPPORTED_VIDEO_PLAYBACK_METHODS = [1, 2, 3, 4]; + var SUPPORTED_VIDEO_DELIVERY = [1]; + var SUPPORTED_VIDEO_API = [1, 2, 5]; + var slotsToBids = {}; + var that = this; + var version = '2.1'; + + this.isBidRequestValid = function (bid) { + return !!(bid.params && bid.params.placementId); + }; + + this.getUserSyncs = function (syncOptions, responses, gdprConsent) { + return []; + }; + + function frameImp(BRs, bidderRequest) { + var impList = []; + var isSecure = 0; + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.stack.length) { + // clever trick to get the protocol + var el = document.createElement('a'); + el.href = bidderRequest.refererInfo.stack[0]; + isSecure = el.protocol == 'https:' ? 1 : 0; + } + + for (var i = 0; i < BRs.length; i++) { + slotsToBids[BRs[i].adUnitCode] = BRs[i]; + var impObj = {}; + impObj.id = BRs[i].adUnitCode; + impObj.bidfloor = parseFloat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'params.floor')) || 0; + impObj.secure = isSecure; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaTypes.banner') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaType') === 'banner') { + var banner = frameBanner(BRs[i]); + + if (banner) { + impObj.banner = banner; + } + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaTypes.video') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](BRs[i], 'mediaType') === 'video') { + impObj.video = frameVideo(BRs[i]); + } + + if (!(impObj.banner || impObj.video)) { + continue; + } + + impObj.ext = frameExt(BRs[i]); + impList.push(impObj); + } + + return impList; + } + + function frameSite(bidderRequest) { + var site = { + domain: '', + page: '', + ref: '' + }; + + if (bidderRequest && bidderRequest.refererInfo) { + var ri = bidderRequest.refererInfo; + site.ref = ri.referer; + + if (ri.stack.length) { + site.page = ri.stack[ri.stack.length - 1]; // clever trick to get the domain + + var el = document.createElement('a'); + el.href = ri.stack[0]; + site.domain = el.hostname; + } + } + + return site; + } + + function frameDevice() { + return { + ua: navigator.userAgent, + ip: '', + // Empty Ip string is required, server gets the ip from HTTP header + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0 + }; + } + + function getValidSizeSet(dimensionList) { + var w = parseInt(dimensionList[0]); + var h = parseInt(dimensionList[1]); // clever check for NaN + + if (!(w !== w || h !== h)) { + // eslint-disable-line + return [w, h]; + } + + return false; + } + + function frameBanner(adUnit) { + // adUnit.sizes is scheduled to be deprecated, continue its support but prefer adUnit.mediaTypes.banner + var sizeList = adUnit.sizes; + + if (adUnit.mediaTypes && adUnit.mediaTypes.banner) { + sizeList = adUnit.mediaTypes.banner.sizes; + } + + var sizeStringList = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](sizeList); + var format = []; + sizeStringList.forEach(function (size) { + if (size) { + var dimensionList = getValidSizeSet(size.split('x')); + + if (dimensionList) { + format.push({ + 'w': dimensionList[0], + 'h': dimensionList[1] + }); + } + } + }); + + if (format.length) { + return { + 'format': format + }; + } + + return false; + } + + function frameVideo(bid) { + var size = []; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize')) { + var dimensionSet = bid.mediaTypes.video.playerSize; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bid.mediaTypes.video.playerSize[0])) { + dimensionSet = bid.mediaTypes.video.playerSize[0]; + } + + var validSize = getValidSizeSet(dimensionSet); + + if (validSize) { + size = validSize; + } + } + + return { + mimes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.mimes') || SUPPORTED_VIDEO_MIMES, + protocols: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.protocols') || SUPPORTED_VIDEO_PROTOCOLS, + w: size[0], + h: size[1], + startdelay: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.startdelay') || 0, + skip: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.skip') || 0, + playbackmethod: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playbackmethod') || SUPPORTED_VIDEO_PLAYBACK_METHODS, + delivery: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.delivery') || SUPPORTED_VIDEO_DELIVERY, + api: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.api') || SUPPORTED_VIDEO_API + }; + } + + function frameExt(bid) { + return { + bidder: { + placementId: bid.params['placementId'], + zone: bid.params && bid.params['zone'] ? bid.params['zone'] : '1r', + path: bid.params && bid.params['path'] ? bid.params['path'] : 'mvo' + } + }; + } + + function frameBid(BRs, bidderRequest) { + var bid = { + id: BRs[0].bidderRequestId, + imp: frameImp(BRs, bidderRequest), + site: frameSite(bidderRequest), + device: frameDevice(), + user: { + ext: { + consent: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? bidderRequest.gdprConsent.consentString : '' + } + }, + at: 1, + tmax: 1000, + regs: { + ext: { + gdpr: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies') ? Boolean(bidderRequest.gdprConsent.gdprApplies & 1) : false + } + } + }; + + if (BRs[0].schain) { + bid.source = { + 'ext': { + 'schain': BRs[0].schain + } + }; + } + + return bid; + } + + 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]; + } + } + } + + this.buildRequests = function (BRs, bidderRequest) { + var fallbackPlacementId = getFirstParam('placementId', BRs); + + if (fallbackPlacementId === undefined || BRs.length < 1) { + return []; + } + + var rmpUrl = getFirstParam('endpoint', BRs) || 'https://tag.1rx.io/rmp/{placementId}/0/{path}?z={zone}'; + var defaultZone = getFirstParam('zone', BRs) || '1r'; + var defaultPath = getFirstParam('path', BRs) || 'mvo'; + rmpUrl = rmpUrl.replace(/\{placementId\}/i, fallbackPlacementId); + rmpUrl = rmpUrl.replace(/\{zone\}/i, defaultZone); + rmpUrl = rmpUrl.replace(/\{path\}/i, defaultPath); + var fat = /(^v|(\.0)+$)/gi; + var prebidVersion = "4.2.0"; + rmpUrl += '&hbv=' + prebidVersion.replace(fat, '') + ',' + version.replace(fat, ''); + var bidRequest = frameBid(BRs, bidderRequest); + + if (!bidRequest.imp.length) { + return {}; + } + + return { + method: 'POST', + url: rmpUrl, + data: JSON.stringify(bidRequest) + }; + }; + + 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: 350 + }; + + if (bidRequest.mediaTypes && bidRequest.mediaTypes.video) { + bidResponse.vastUrl = bid.nurl; + bidResponse.mediaType = 'video'; + bidResponse.ttl = 600; + } else { + bidResponse.ad = bid.adm; + } + + bids.push(bidResponse); + } + + return bids; + }; +} + +var spec = new RhythmOneBidAdapter(); +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[646]); \ No newline at end of file diff --git a/build/dist/richaudienceBidAdapter.js b/build/dist/richaudienceBidAdapter.js new file mode 100644 index 00000000000..995ed2b774b --- /dev/null +++ b/build/dist/richaudienceBidAdapter.js @@ -0,0 +1,282 @@ +pbjsChunk([121],{ + +/***/ 648: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(649); + + +/***/ }), + +/***/ 649: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__ = __webpack_require__(11); + + + + + +var BIDDER_CODE = 'richaudience'; +var REFERER = ''; +var spec = { + code: BIDDER_CODE, + aliases: ['ra'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + + /*** + * Determines whether or not the given bid request is valid + * + * @param {bidRequest} bid The bid params to validate. + * @returns {boolean} True if this is a valid bid, and false otherwise + */ + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params && bid.params.pid && bid.params.supplyType); + }, + + /*** + * Build a server request from the list of valid BidRequests + * @param {validBidRequests} is an array of the valid bids + * @param {bidderRequest} bidder request object + * @returns {ServerRequest} Info describing the request to the server + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bid) { + var payload = { + bidfloor: bid.params.bidfloor, + ifa: bid.params.ifa, + pid: bid.params.pid, + supplyType: bid.params.supplyType, + currencyCode: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'), + auctionId: bid.auctionId, + bidId: bid.bidId, + BidRequestsCount: bid.bidRequestsCount, + bidder: bid.bidder, + bidderRequestId: bid.bidderRequestId, + tagId: bid.adUnitCode, + sizes: raiGetSizes(bid), + referer: typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null, + numIframes: typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null, + transactionId: bid.transactionId, + timeout: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('bidderTimeout'), + user: raiSetEids(bid), + demand: raiGetDemandType(bid), + videoData: raiGetVideoInfo(bid) + }; + REFERER = typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null; + payload.gdpr_consent = ''; + payload.gdpr = null; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + payload.gdpr = bidderRequest.gdprConsent.gdprApplies; + } + + var payloadString = JSON.stringify(payload); + var endpoint = 'https://shb.richaudience.com/hb/'; + return { + method: 'POST', + url: endpoint, + data: payloadString + }; + }); + }, + + /*** + * Read the response from the server and build a list of bids + * @param {serverResponse} Response from the server. + * @param {bidRequest} Bid request object + * @returns {bidResponses} Array of bids which were nested inside the server + */ + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; // try catch + + var response = serverResponse.body; + + if (response) { + var bidResponse = { + requestId: JSON.parse(bidRequest.data).bidId, + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.creative_id, + mediaType: response.media_type, + netRevenue: response.netRevenue, + currency: response.currency, + ttl: response.ttl, + dealId: response.dealId + }; + + if (response.media_type === 'video') { + bidResponse.vastXml = response.vastXML; + + try { + if (JSON.parse(bidRequest.data).videoData.format == 'outstream') { + bidResponse.renderer = __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__["a" /* Renderer */].install({ + url: 'https://cdn3.richaudience.com/prebidVideo/player.js' + }); + bidResponse.renderer.setRender(renderer); + } + } catch (e) { + bidResponse.ad = response.adm; + } + } else { + bidResponse.ad = response.adm; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + + /*** + * User Syncs + * + * @param {syncOptions} Publisher prebid configuration + * @param {serverResponses} Response from the server + * @param {gdprConsent} GPDR consent object + * @returns {Array} + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent) { + var syncs = []; + var rand = Math.floor(Math.random() * 9999999999); + var syncUrl = ''; + var consent = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string' && typeof gdprConsent.consentString != 'undefined') { + consent = "consentString=\u2019".concat(gdprConsent.consentString); + } + + if (syncOptions.iframeEnabled) { + syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand; + + if (consent != '') { + syncUrl += "&".concat(consent); + } + + syncs.push({ + type: 'iframe', + url: syncUrl + }); + } + + if (syncOptions.pixelEnabled && REFERER != null && syncs.length == 0) { + syncUrl = "https://sync.richaudience.com/bf7c142f4339da0278e83698a02b0854/?referrer=".concat(REFERER); + + if (consent != '') { + syncUrl += "&".concat(consent); + } + + syncs.push({ + type: 'image', + url: syncUrl + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function raiGetSizes(bid) { + var raiNewSizes; + + if (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) { + raiNewSizes = bid.mediaTypes.banner.sizes; + } + + if (raiNewSizes != null) { + return raiNewSizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }); + } +} + +function raiGetDemandType(bid) { + var raiFormat = 'display'; + + if (bid.mediaTypes != undefined) { + if (bid.mediaTypes.video != undefined) { + raiFormat = 'video'; + } + } + + return raiFormat; +} + +function raiGetVideoInfo(bid) { + var videoData; + + if (raiGetDemandType(bid) == 'video') { + videoData = { + format: bid.mediaTypes.video.context, + playerSize: bid.mediaTypes.video.playerSize, + mimes: bid.mediaTypes.video.mimes + }; + } + + return videoData; +} + +function raiSetEids(bid) { + var eids = []; + + if (bid && bid.userId) { + raiSetUserId(bid, eids, 'id5-sync.com', __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, "userId.id5id")); + raiSetUserId(bid, eids, 'pubcommon', __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, "userId.pubcid")); + raiSetUserId(bid, eids, 'criteo.com', __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, "userId.criteoId")); + raiSetUserId(bid, eids, 'liveramp.com', __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, "userId.idl_env")); + raiSetUserId(bid, eids, 'liveintent.com', __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, "userId.lipb.lipbid")); + raiSetUserId(bid, eids, 'adserver.org', __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](bid, "userId.tdid")); + } + + return eids; +} + +function raiSetUserId(bid, eids, source, value) { + if (__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isStr"](value)) { + eids.push({ + userId: value, + source: source + }); + } +} + +function renderer(bid) { + bid.renderer.push(function () { + renderAd(bid); + }); +} + +function renderAd(bid) { + var raOutstreamHBPassback = "".concat(bid.vastXml); + var raPlayerHB = { + config: bid.params[0].player != undefined ? { + end: bid.params[0].player.end != null ? bid.params[0].player.end : 'close', + init: bid.params[0].player.init != null ? bid.params[0].player.init : 'close', + skin: bid.params[0].player.skin != null ? bid.params[0].player.skin : 'light' + } : { + end: 'close', + init: 'close', + skin: 'light' + }, + pid: bid.params[0].pid, + adUnit: bid.adUnitCode + }; + window.raParams(raPlayerHB, raOutstreamHBPassback, true); +} + +/***/ }) + +},[648]); \ No newline at end of file diff --git a/build/dist/rivrAnalyticsAdapter.js b/build/dist/rivrAnalyticsAdapter.js new file mode 100644 index 00000000000..022d748d441 --- /dev/null +++ b/build/dist/rivrAnalyticsAdapter.js @@ -0,0 +1,326 @@ +pbjsChunk([17],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 650: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(651); + + +/***/ }), + +/***/ 651: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var analyticsType = 'endpoint'; + +var rivrAnalytics = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (window.rivraddon && window.rivraddon.analytics && window.rivraddon.analytics.getContext() && window.rivraddon.analytics.trackPbjsEvent) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]("ARGUMENTS FOR TYPE: ============= ".concat(eventType), args); + window.rivraddon.analytics.trackPbjsEvent({ + eventType: eventType, + args: args + }); + } + } +}); // save the base class function + + +rivrAnalytics.originEnableAnalytics = rivrAnalytics.enableAnalytics; // override enableAnalytics so we can get access to the config passed in from the page + +rivrAnalytics.enableAnalytics = function (config) { + if (window.rivraddon && window.rivraddon.analytics) { + window.rivraddon.analytics.enableAnalytics(config, { + utils: __WEBPACK_IMPORTED_MODULE_3__src_utils_js__, + ajax: __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */], + pbjsGlobalVariable: pbjs + }); + rivrAnalytics.originEnableAnalytics(config); + } +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: rivrAnalytics, + code: 'rivr' +}); +/* harmony default export */ __webpack_exports__["default"] = (rivrAnalytics); + +/***/ }) + +},[650]); \ No newline at end of file diff --git a/build/dist/roxotAnalyticsAdapter.js b/build/dist/roxotAnalyticsAdapter.js new file mode 100644 index 00000000000..489bfc681a8 --- /dev/null +++ b/build/dist/roxotAnalyticsAdapter.js @@ -0,0 +1,803 @@ +pbjsChunk([16],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 652: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(653); + + +/***/ }), + +/***/ 653: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(); + +var utils = __webpack_require__(0); + +var ajax = Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["b" /* ajaxBuilder */])(0); +var DEFAULT_EVENT_URL = 'pa.rxthdr.com/v3'; +var DEFAULT_SERVER_CONFIG_URL = 'pa.rxthdr.com/v3'; +var analyticsType = 'endpoint'; +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + BID_WON = _CONSTANTS$EVENTS.BID_WON; +var AUCTION_STATUS = { + 'RUNNING': 'running', + 'FINISHED': 'finished' +}; +var BIDDER_STATUS = { + 'REQUESTED': 'requested', + 'BID': 'bid', + 'NO_BID': 'noBid', + 'TIMEOUT': 'timeout' +}; +var ROXOT_EVENTS = { + 'AUCTION': 'a', + 'IMPRESSION': 'i', + 'BID_AFTER_TIMEOUT': 'bat' +}; +var initOptions = {}; +var localStoragePrefix = 'roxot_analytics_'; +var utmTags = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; +var utmTtlKey = 'utm_ttl'; +var utmTtl = 60 * 60 * 1000; +var isNewKey = 'is_new_flag'; +var isNewTtl = 60 * 60 * 1000; +var auctionCache = {}; +var auctionTtl = 60 * 60 * 1000; +var sendEventCache = []; +var sendEventTimeoutId = null; +var sendEventTimeoutTime = 1000; + +function detectDevice() { + if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase())) { + return 'tablet'; + } + + if (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase())) { + return 'mobile'; + } + + return 'desktop'; +} + +function checkIsNewFlag() { + var key = buildLocalStorageKey(isNewKey); + var lastUpdate = Number(storage.getDataFromLocalStorage(key)); + storage.setDataInLocalStorage(key, Date.now()); + return Date.now() - lastUpdate > isNewTtl; +} + +function updateUtmTimeout() { + storage.setDataInLocalStorage(buildLocalStorageKey(utmTtlKey), Date.now()); +} + +function isUtmTimeoutExpired() { + var utmTimestamp = storage.getDataFromLocalStorage(buildLocalStorageKey(utmTtlKey)); + return Date.now() - utmTimestamp > utmTtl; +} + +function buildLocalStorageKey(key) { + return localStoragePrefix.concat(key); +} + +function isSupportedAdUnit(adUnit) { + if (!initOptions.adUnits.length) { + return true; + } + + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(initOptions.adUnits, adUnit); +} + +function deleteOldAuctions() { + for (var auctionId in auctionCache) { + var auction = auctionCache[auctionId]; + + if (Date.now() - auction.start > auctionTtl) { + delete auctionCache[auctionId]; + } + } +} + +function buildAuctionEntity(args) { + return { + 'id': args.auctionId, + 'start': args.timestamp, + 'timeout': args.timeout, + 'adUnits': {} + }; +} + +function extractAdUnitCode(args) { + return args.adUnitCode.toLowerCase(); +} + +function extractBidder(args) { + return args.bidder.toLowerCase(); +} + +function buildAdUnitAuctionEntity(auction, bidRequest) { + return { + 'adUnit': extractAdUnitCode(bidRequest), + 'start': auction.start, + 'timeout': auction.timeout, + 'finish': 0, + 'status': AUCTION_STATUS.RUNNING, + 'bidders': {} + }; +} + +function buildBidderRequest(auction, bidRequest) { + return { + 'bidder': extractBidder(bidRequest), + 'isAfterTimeout': auction.status === AUCTION_STATUS.FINISHED ? 1 : 0, + 'start': bidRequest.startTime || Date.now(), + 'finish': 0, + 'status': BIDDER_STATUS.REQUESTED, + 'cpm': -1, + 'size': { + 'width': 0, + 'height': 0 + }, + 'mediaType': '-', + 'source': bidRequest.source || 'client' + }; +} + +function buildBidAfterTimeout(adUnitAuction, args) { + return { + 'auction': utils.deepClone(adUnitAuction), + 'adUnit': extractAdUnitCode(args), + 'bidder': extractBidder(args), + 'cpm': args.cpm, + 'size': { + 'width': args.width || 0, + 'height': args.height || 0 + }, + 'mediaType': args.mediaType || '-', + 'start': args.requestTimestamp, + 'finish': args.responseTimestamp + }; +} + +function buildImpression(adUnitAuction, args) { + return { + 'isNew': checkIsNewFlag() ? 1 : 0, + 'auction': utils.deepClone(adUnitAuction), + 'adUnit': extractAdUnitCode(args), + 'bidder': extractBidder(args), + 'cpm': args.cpm, + 'size': { + 'width': args.width, + 'height': args.height + }, + 'mediaType': args.mediaType, + 'source': args.source || 'client' + }; +} + +function handleAuctionInit(args) { + auctionCache[args.auctionId] = buildAuctionEntity(args); + deleteOldAuctions(); +} + +function handleBidRequested(args) { + var auction = auctionCache[args.auctionId]; + args.bids.forEach(function (bidRequest) { + var adUnitCode = extractAdUnitCode(bidRequest); + var bidder = extractBidder(bidRequest); + + if (!isSupportedAdUnit(adUnitCode)) { + return; + } + + auction['adUnits'][adUnitCode] = auction['adUnits'][adUnitCode] || buildAdUnitAuctionEntity(auction, bidRequest); + var adUnitAuction = auction['adUnits'][adUnitCode]; + adUnitAuction['bidders'][bidder] = adUnitAuction['bidders'][bidder] || buildBidderRequest(auction, bidRequest); + }); +} + +function handleBidAdjustment(args) { + var adUnitCode = extractAdUnitCode(args); + var bidder = extractBidder(args); + + if (!isSupportedAdUnit(adUnitCode)) { + return; + } + + var adUnitAuction = auctionCache[args.auctionId]['adUnits'][adUnitCode]; + + if (adUnitAuction.status === AUCTION_STATUS.FINISHED) { + handleBidAfterTimeout(adUnitAuction, args); + return; + } + + var bidderRequest = adUnitAuction['bidders'][bidder]; + + if (bidderRequest.cpm < args.cpm) { + bidderRequest.cpm = args.cpm; + bidderRequest.finish = args.responseTimestamp; + bidderRequest.status = args.cpm === 0 ? BIDDER_STATUS.NO_BID : BIDDER_STATUS.BID; + bidderRequest.size.width = args.width || 0; + bidderRequest.size.height = args.height || 0; + bidderRequest.mediaType = args.mediaType || '-'; + bidderRequest.source = args.source || 'client'; + } +} + +function handleBidAfterTimeout(adUnitAuction, args) { + var bidder = extractBidder(args); + var bidderRequest = adUnitAuction['bidders'][bidder]; + var bidAfterTimeout = buildBidAfterTimeout(adUnitAuction, args); + + if (bidAfterTimeout.cpm > bidderRequest.cpm) { + bidderRequest.cpm = bidAfterTimeout.cpm; + bidderRequest.isAfterTimeout = 1; + bidderRequest.finish = bidAfterTimeout.finish; + bidderRequest.size = bidAfterTimeout.size; + bidderRequest.mediaType = bidAfterTimeout.mediaType; + bidderRequest.status = bidAfterTimeout.cpm === 0 ? BIDDER_STATUS.NO_BID : BIDDER_STATUS.BID; + } + + registerEvent(ROXOT_EVENTS.BID_AFTER_TIMEOUT, 'Bid After Timeout', bidAfterTimeout); +} + +function handleBidderDone(args) { + var auction = auctionCache[args.auctionId]; + args.bids.forEach(function (bidDone) { + var adUnitCode = extractAdUnitCode(bidDone); + var bidder = extractBidder(bidDone); + + if (!isSupportedAdUnit(adUnitCode)) { + return; + } + + var adUnitAuction = auction['adUnits'][adUnitCode]; + + if (adUnitAuction.status === AUCTION_STATUS.FINISHED) { + return; + } + + var bidderRequest = adUnitAuction['bidders'][bidder]; + + if (bidderRequest.status !== BIDDER_STATUS.REQUESTED) { + return; + } + + bidderRequest.finish = Date.now(); + bidderRequest.status = BIDDER_STATUS.NO_BID; + bidderRequest.cpm = 0; + }); +} + +function handleAuctionEnd(args) { + var auction = auctionCache[args.auctionId]; + + if (!Object.keys(auction.adUnits).length) { + delete auctionCache[args.auctionId]; + } + + var finish = Date.now(); + auction.finish = finish; + + for (var adUnit in auction.adUnits) { + var adUnitAuction = auction.adUnits[adUnit]; + adUnitAuction.finish = finish; + adUnitAuction.status = AUCTION_STATUS.FINISHED; + + for (var bidder in adUnitAuction.bidders) { + var bidderRequest = adUnitAuction.bidders[bidder]; + + if (bidderRequest.status !== BIDDER_STATUS.REQUESTED) { + continue; + } + + bidderRequest.status = BIDDER_STATUS.TIMEOUT; + } + } + + registerEvent(ROXOT_EVENTS.AUCTION, 'Auction', auction); +} + +function handleBidWon(args) { + var adUnitCode = extractAdUnitCode(args); + + if (!isSupportedAdUnit(adUnitCode)) { + return; + } + + var adUnitAuction = auctionCache[args.auctionId]['adUnits'][adUnitCode]; + var impression = buildImpression(adUnitAuction, args); + registerEvent(ROXOT_EVENTS.IMPRESSION, 'Bid won', impression); +} + +function handleOtherEvents(eventType, args) { + registerEvent(eventType, eventType, args); +} + +var roxotAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + url: DEFAULT_EVENT_URL, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + switch (eventType) { + case AUCTION_INIT: + handleAuctionInit(args); + break; + + case BID_REQUESTED: + handleBidRequested(args); + break; + + case BID_ADJUSTMENT: + handleBidAdjustment(args); + break; + + case BIDDER_DONE: + handleBidderDone(args); + break; + + case AUCTION_END: + handleAuctionEnd(args); + break; + + case BID_WON: + handleBidWon(args); + break; + + default: + handleOtherEvents(eventType, args); + break; + } + } +}); + +roxotAdapter.originEnableAnalytics = roxotAdapter.enableAnalytics; + +roxotAdapter.enableAnalytics = function (config) { + if (this.initConfig(config)) { + logInfo('Analytics adapter enabled', initOptions); + roxotAdapter.originEnableAnalytics(config); + } +}; + +roxotAdapter.buildUtmTagData = function () { + var utmTagData = {}; + var utmTagsDetected = false; + utmTags.forEach(function (utmTagKey) { + var utmTagValue = utils.getParameterByName(utmTagKey); + + if (utmTagValue !== '') { + utmTagsDetected = true; + } + + utmTagData[utmTagKey] = utmTagValue; + }); + utmTags.forEach(function (utmTagKey) { + if (utmTagsDetected) { + storage.setDataInLocalStorage(buildLocalStorageKey(utmTagKey), utmTagData[utmTagKey]); + updateUtmTimeout(); + } else { + if (!isUtmTimeoutExpired()) { + utmTagData[utmTagKey] = storage.getDataFromLocalStorage(buildLocalStorageKey(utmTagKey)) ? storage.getDataFromLocalStorage(buildLocalStorageKey(utmTagKey)) : ''; + updateUtmTimeout(); + } + } + }); + return utmTagData; +}; + +roxotAdapter.initConfig = function (config) { + var isCorrectConfig = true; + initOptions = {}; + initOptions.options = utils.deepClone(config.options); + initOptions.publisherId = initOptions.options.publisherId || initOptions.options.publisherIds[0] || null; + + if (!initOptions.publisherId) { + logError('"options.publisherId" is empty'); + isCorrectConfig = false; + } + + initOptions.adUnits = initOptions.options.adUnits || []; + initOptions.adUnits = initOptions.adUnits.map(function (value) { + return value.toLowerCase(); + }); + initOptions.server = initOptions.options.server || DEFAULT_EVENT_URL; + initOptions.configServer = initOptions.options.configServer || initOptions.options.server || DEFAULT_SERVER_CONFIG_URL; + initOptions.utmTagData = this.buildUtmTagData(); + initOptions.host = initOptions.options.host || window.location.hostname; + initOptions.device = detectDevice(); + loadServerConfig(); + return isCorrectConfig; +}; + +roxotAdapter.getOptions = function () { + return initOptions; +}; + +function registerEvent(eventType, eventName, data) { + var eventData = { + eventType: eventType, + eventName: eventName, + data: data + }; + sendEventCache.push(eventData); + logInfo('Register event', eventData); + typeof initOptions.serverConfig === 'undefined' ? checkEventAfterTimeout() : checkSendEvent(); +} + +function checkSendEvent() { + if (sendEventTimeoutId) { + clearTimeout(sendEventTimeoutId); + sendEventTimeoutId = null; + } + + if (typeof initOptions.serverConfig === 'undefined') { + checkEventAfterTimeout(); + return; + } + + while (sendEventCache.length) { + var event = sendEventCache.shift(); + var isNeedSend = initOptions.serverConfig[event.eventType] || 0; + + if (Number(isNeedSend) === 0) { + logInfo('Skip event ' + event.eventName, event); + continue; + } + + sendEvent(event.eventType, event.eventName, event.data); + } +} + +function checkEventAfterTimeout() { + if (sendEventTimeoutId) { + return; + } + + sendEventTimeoutId = setTimeout(checkSendEvent, sendEventTimeoutTime); +} + +function sendEvent(eventType, eventName, data) { + var url = 'https://' + initOptions.server + '/' + eventType + '?publisherId=' + initOptions.publisherId + '&host=' + initOptions.host; + var eventData = { + 'event': eventType, + 'eventName': eventName, + 'options': initOptions, + 'data': data + }; + ajax(url, function () { + logInfo(eventName + ' sent', eventData); + }, JSON.stringify(eventData), { + contentType: 'text/plain', + method: 'POST', + withCredentials: true + }); +} + +function loadServerConfig() { + var url = 'https://' + initOptions.configServer + '/c' + '?publisherId=' + initOptions.publisherId + '&host=' + initOptions.host; + ajax(url, { + 'success': function success(data) { + initOptions.serverConfig = JSON.parse(data); + }, + 'error': function error() { + initOptions.serverConfig = {}; + initOptions.serverConfig[ROXOT_EVENTS.AUCTION] = 1; + initOptions.serverConfig[ROXOT_EVENTS.IMPRESSION] = 1; + initOptions.serverConfig[ROXOT_EVENTS.BID_AFTER_TIMEOUT] = 1; + initOptions.serverConfig['isError'] = 1; + } + }, null, { + contentType: 'text/json', + method: 'GET', + withCredentials: true + }); +} + +function logInfo(message, meta) { + utils.logInfo(buildLogMessage(message), meta); +} + +function logError(message) { + utils.logError(buildLogMessage(message)); +} + +function buildLogMessage(message) { + return 'Roxot Prebid Analytics: ' + message; +} + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: roxotAdapter, + code: 'roxot' +}); +/* harmony default export */ __webpack_exports__["default"] = (roxotAdapter); + +/***/ }) + +},[652]); \ No newline at end of file diff --git a/build/dist/rtbdemandBidAdapter.js b/build/dist/rtbdemandBidAdapter.js new file mode 100644 index 00000000000..90196c7b8f3 --- /dev/null +++ b/build/dist/rtbdemandBidAdapter.js @@ -0,0 +1,154 @@ +pbjsChunk([120],{ + +/***/ 654: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(655); + + +/***/ }), + +/***/ 655: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var BIDDER_CODE = 'rtbdemand'; +var BIDDER_SERVER = 'bidding.rtbdemand.com'; +var 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: 'https://' + 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: 'https://' + 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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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:'; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[654]); \ No newline at end of file diff --git a/build/dist/rtbhouseBidAdapter.js b/build/dist/rtbhouseBidAdapter.js new file mode 100644 index 00000000000..ef0a85296f8 --- /dev/null +++ b/build/dist/rtbhouseBidAdapter.js @@ -0,0 +1,438 @@ +pbjsChunk([119],{ + +/***/ 656: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(657); + + +/***/ }), + +/***/ 657: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OPENRTB", function() { return OPENRTB; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); + + + + +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 + +var TTL = 55; // Codes defined by OpenRTB Native Ads 1.1 specification + +var OPENRTB = { + NATIVE: { + IMAGE_TYPE: { + ICON: 1, + MAIN: 3 + }, + ASSET_ID: { + TITLE: 1, + IMAGE: 2, + ICON: 3, + BODY: 4, + SPONSORED: 5, + CTA: 6 + }, + DATA_ASSET_TYPE: { + SPONSORED: 1, + DESC: 2, + CTA_TEXT: 12 + } + } +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(REGIONS, bid.params.region) && bid.params.publisherId); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var request = { + id: validBidRequests[0].auctionId, + imp: validBidRequests.map(function (slot) { + return mapImpression(slot); + }), + site: mapSite(validBidRequests, bidderRequest), + cur: DEFAULT_CURRENCY_ARR, + test: validBidRequests[0].params.test || 0, + source: mapSource(validBidRequests[0]) + }; + + if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) { + var consentStr = bidderRequest.gdprConsent.consentString ? bidderRequest.gdprConsent.consentString.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') : ''; + var gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + request.regs = { + ext: { + gdpr: gdpr + } + }; + request.user = { + ext: { + consent: consentStr + } + }; + } + + return { + method: 'POST', + url: 'https://' + validBidRequests[0].params.region + '.' + ENDPOINT_URL, + data: JSON.stringify(request) + }; + }, + interpretResponse: function interpretResponse(serverResponse, originalRequest) { + var responseBody = serverResponse.body; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](responseBody)) { + return []; + } + + var bids = []; + responseBody.forEach(function (serverBid) { + if (serverBid.price === 0) { + return; + } // try...catch would be risky cause JSON.parse throws SyntaxError + + + if (serverBid.adm.indexOf('{') === 0) { + bids.push(interpretNativeBid(serverBid)); + } else { + bids.push(interpretBannerBid(serverBid)); + } + }); + return bids; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/** + * @param {object} slot Ad Unit Params by Prebid + * @returns {object} Imp by OpenRTB 2.5 §3.2.4 + */ + +function mapImpression(slot) { + var imp = { + id: slot.bidId, + banner: mapBanner(slot), + native: mapNative(slot), + tagid: slot.adUnitCode.toString() + }; + var bidfloor = parseFloat(slot.params.bidfloor); + + if (bidfloor) { + imp.bidfloor = bidfloor; + } + + return imp; +} +/** + * @param {object} slot Ad Unit Params by Prebid + * @returns {object} Banner by OpenRTB 2.5 §3.2.6 + */ + + +function mapBanner(slot) { + if (slot.mediaType === 'banner' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.banner') || !slot.mediaType && !slot.mediaTypes) { + var sizes = slot.sizes || slot.mediaTypes.banner.sizes; + return { + w: sizes[0][0], + h: sizes[0][1], + format: sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }) + }; + } +} +/** + * @param {object} slot Ad Unit Params by Prebid + * @param {object} bidderRequest by Prebid + * @returns {object} Site by OpenRTB 2.5 §3.2.13 + */ + + +function mapSite(slot, bidderRequest) { + var pubId = slot && slot.length > 0 ? slot[0].params.publisherId : 'unknown'; + return { + publisher: { + id: pubId.toString() + }, + page: bidderRequest.refererInfo.referer, + name: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getOrigin"]() + }; +} +/** + * @param {object} slot Ad Unit Params by Prebid + * @returns {object} Source by OpenRTB 2.5 §3.2.2 + */ + + +function mapSource(slot) { + var source = { + tid: slot.transactionId + }; + var schain = mapSchain(slot.schain); + + if (schain) { + source.ext = { + schain: schain + }; + } + + return source; +} +/** + * @param {object} schain object set by Publisher + * @returns {object} OpenRTB SupplyChain object + */ + + +function mapSchain(schain) { + if (!schain) { + return null; + } + + if (!validateSchain(schain)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('RTB House: required schain params missing'); + return null; + } + + return schain; +} +/** + * @param {object} schain object set by Publisher + * @returns {object} bool + */ + + +function validateSchain(schain) { + if (!schain.nodes) { + return false; + } + + var requiredFields = ['asi', 'sid', 'hp']; + return schain.nodes.every(function (node) { + return requiredFields.every(function (field) { + return node[field]; + }); + }); +} +/** + * @param {object} slot Ad Unit Params by Prebid + * @returns {object} Request by OpenRTB Native Ads 1.1 §4 + */ + + +function mapNative(slot) { + if (slot.mediaType === 'native' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.native')) { + return { + request: { + assets: mapNativeAssets(slot) + }, + ver: '1.1' + }; + } +} +/** + * @param {object} slot Slot config by Prebid + * @returns {array} Request Assets by OpenRTB Native Ads 1.1 §4.2 + */ + + +function mapNativeAssets(slot) { + var params = slot.nativeParams || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.native'); + var assets = []; + + if (params.title) { + assets.push({ + id: OPENRTB.NATIVE.ASSET_ID.TITLE, + required: params.title.required ? 1 : 0, + title: { + len: params.title.len || 25 + } + }); + } + + if (params.image) { + assets.push({ + id: OPENRTB.NATIVE.ASSET_ID.IMAGE, + required: params.image.required ? 1 : 0, + img: mapNativeImage(params.image, OPENRTB.NATIVE.IMAGE_TYPE.MAIN) + }); + } + + if (params.icon) { + assets.push({ + id: OPENRTB.NATIVE.ASSET_ID.ICON, + required: params.icon.required ? 1 : 0, + img: mapNativeImage(params.icon, OPENRTB.NATIVE.IMAGE_TYPE.ICON) + }); + } + + if (params.sponsoredBy) { + assets.push({ + id: OPENRTB.NATIVE.ASSET_ID.SPONSORED, + required: params.sponsoredBy.required ? 1 : 0, + data: { + type: OPENRTB.NATIVE.DATA_ASSET_TYPE.SPONSORED, + len: params.sponsoredBy.len + } + }); + } + + if (params.body) { + assets.push({ + id: OPENRTB.NATIVE.ASSET_ID.BODY, + required: params.body.request ? 1 : 0, + data: { + type: OPENRTB.NATIVE.DATA_ASSET_TYPE.DESC, + len: params.body.len + } + }); + } + + if (params.cta) { + assets.push({ + id: OPENRTB.NATIVE.ASSET_ID.CTA, + required: params.cta.required ? 1 : 0, + data: { + type: OPENRTB.NATIVE.DATA_ASSET_TYPE.CTA_TEXT, + len: params.cta.len + } + }); + } + + return assets; +} +/** + * @param {object} image Prebid native.image/icon + * @param {int} type Image or icon code + * @returns {object} Request Image by OpenRTB Native Ads 1.1 §4.4 + */ + + +function mapNativeImage(image, type) { + var img = { + type: type + }; + + if (image.aspect_ratios) { + var ratio = image.aspect_ratios[0]; + var minWidth = ratio.min_width || 100; + img.wmin = minWidth; + img.hmin = minWidth / ratio.ratio_width * ratio.ratio_height; + } + + if (image.sizes) { + var size = Array.isArray(image.sizes[0]) ? image.sizes[0] : image.sizes; + img.w = size[0]; + img.h = size[1]; + } + + return img; +} +/** + * @param {object} serverBid Bid by OpenRTB 2.5 §4.2.3 + * @returns {object} Prebid banner bidObject + */ + + +function interpretBannerBid(serverBid) { + return { + requestId: serverBid.impid, + mediaType: __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], + cpm: serverBid.price, + creativeId: serverBid.adid, + ad: serverBid.adm, + width: serverBid.w, + height: serverBid.h, + ttl: TTL, + netRevenue: true, + currency: 'USD' + }; +} +/** + * @param {object} serverBid Bid by OpenRTB 2.5 §4.2.3 + * @returns {object} Prebid native bidObject + */ + + +function interpretNativeBid(serverBid) { + return { + requestId: serverBid.impid, + mediaType: __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */], + cpm: serverBid.price, + creativeId: serverBid.adid, + width: 1, + height: 1, + ttl: TTL, + netRevenue: true, + currency: 'USD', + native: interpretNativeAd(serverBid.adm) + }; +} +/** + * @param {string} adm JSON-encoded Request by OpenRTB Native Ads 1.1 §4.1 + * @returns {object} Prebid bidObject.native + */ + + +function interpretNativeAd(adm) { + var native = JSON.parse(adm).native; + var result = { + clickUrl: encodeURIComponent(native.link.url), + impressionTrackers: native.imptrackers + }; + native.assets.forEach(function (asset) { + switch (asset.id) { + case OPENRTB.NATIVE.ASSET_ID.TITLE: + result.title = asset.title.text; + break; + + case OPENRTB.NATIVE.ASSET_ID.IMAGE: + result.image = { + url: encodeURIComponent(asset.img.url), + width: asset.img.w, + height: asset.img.h + }; + break; + + case OPENRTB.NATIVE.ASSET_ID.ICON: + result.icon = { + url: encodeURIComponent(asset.img.url), + width: asset.img.w, + height: asset.img.h + }; + break; + + case OPENRTB.NATIVE.ASSET_ID.BODY: + result.body = asset.data.value; + break; + + case OPENRTB.NATIVE.ASSET_ID.SPONSORED: + result.sponsoredBy = asset.data.value; + break; + + case OPENRTB.NATIVE.ASSET_ID.CTA: + result.cta = asset.data.value; + break; + } + }); + return result; +} + +/***/ }) + +},[656]); \ No newline at end of file diff --git a/build/dist/rtbsolutionsBidAdapter.js b/build/dist/rtbsolutionsBidAdapter.js new file mode 100644 index 00000000000..e03b2c6088d --- /dev/null +++ b/build/dist/rtbsolutionsBidAdapter.js @@ -0,0 +1,120 @@ +pbjsChunk([118],{ + +/***/ 658: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(659); + + +/***/ }), + +/***/ 659: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_ajax_js__ = __webpack_require__(4); + + + +var BIDDER_CODE = 'rtbsolutions'; +var ENDPOINT_URL = 'https://dsp-eu-lb.rtbsolutions.pro/bid/hb'; +var spec = { + version: '1.0', + code: BIDDER_CODE, + aliases: ['rtbss'], + // short code + nurls: {}, + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.blockId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var _this = this; + + var req = []; + bidderRequest.bids.forEach(function (item) { + var width = item.sizes[0][0]; + var height = item.sizes[0][1]; + var imp = { + referer: bidderRequest.refererInfo.referer, + ua: navigator.userAgent, + lang: _this.getLanguage(), + domain: _this.getDomain(), + width: width, + height: height, + type: 'banner' + }; + if (item.params.s1 !== undefined) imp.s1 = item.params.s1; + if (item.params.s2 !== undefined) imp.s2 = item.params.s2; + if (item.params.s3 !== undefined) imp.s3 = item.params.s3; + if (item.params.s4 !== undefined) imp.s4 = item.params.s4; + req.push({ + bid_id: item.bidId, + block_id: item.params.blockId, + ver: _this.version, + imp: imp + }); + }); + return { + method: 'POST', + url: ENDPOINT_URL, + data: req, + options: { + contentType: 'application/json' + } + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var _this2 = this; + + var bidResponses = []; + serverResponse.body.forEach(function (item) { + _this2.nurls[item.bid_id] = item.nurl; + var bidResponse = { + requestId: item.bid_id, + cpm: item.cpm, + width: item.width, + height: item.height, + creativeId: item.creative_id, + currency: item.currency, + netRevenue: true, + ttl: 360, + ad: item.ad + }; + bidResponses.push(bidResponse); + }); + return bidResponses; + }, + onBidWon: function onBidWon(bid) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_ajax_js__["a" /* ajax */])(this.nurls[bid.requestId], null); + }, + getLanguage: function getLanguage() { + var language = navigator.language ? 'language' : 'userLanguage'; + var lang2 = navigator[language].split('-')[0]; + + if (lang2.length === 2 || lang2.length === 3) { + return lang2; + } + + return ''; + }, + getDomain: function getDomain() { + if (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["inIframe"]()) { + return window.location.hostname; + } + + var origins = window.document.location.ancestorOrigins; + + if (origins && origins.length > 0) { + return origins[origins.length - 1]; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[658]); \ No newline at end of file diff --git a/build/dist/rtdModule.js b/build/dist/rtdModule.js new file mode 100644 index 00000000000..00a0634896e --- /dev/null +++ b/build/dist/rtdModule.js @@ -0,0 +1,309 @@ +pbjsChunk([117],{ + +/***/ 660: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(661); + + +/***/ }), + +/***/ 661: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["attachRealTimeDataProvider"] = attachRealTimeDataProvider; +/* harmony export (immutable) */ __webpack_exports__["init"] = init; +/* harmony export (immutable) */ __webpack_exports__["validateProviderDataForGPT"] = validateProviderDataForGPT; +/* harmony export (immutable) */ __webpack_exports__["setTargetsAfterRequestBids"] = setTargetsAfterRequestBids; +/* harmony export (immutable) */ __webpack_exports__["deepMerge"] = deepMerge; +/* harmony export (immutable) */ __webpack_exports__["requestBidsHook"] = requestBidsHook; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_targeting_js__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/** + * This module adds Real time data support to prebid.js + * @module modules/realTimeData + */ + +/** + * @interface RtdSubmodule + */ + +/** + * @function + * @summary return real time data + * @name RtdSubmodule#getData + * @param {AdUnit[]} adUnits + * @param {function} onDone + */ + +/** + * @property + * @summary used to link submodule with config + * @name RtdSubmodule#name + * @type {string} + */ + +/** + * @interface ModuleConfig + */ + +/** + * @property + * @summary sub module name + * @name ModuleConfig#name + * @type {string} + */ + +/** + * @property + * @summary auction delay + * @name ModuleConfig#auctionDelay + * @type {number} + */ + +/** + * @property + * @summary params for provide (sub module) + * @name ModuleConfig#params + * @type {Object} + */ + +/** + * @property + * @summary timeout (if no auction dealy) + * @name ModuleConfig#timeout + * @type {number} + */ + + + + + +/** @type {string} */ + +var MODULE_NAME = 'realTimeData'; +/** @type {number} */ + +var DEF_TIMEOUT = 1000; +/** @type {RtdSubmodule[]} */ + +var subModules = []; +/** @type {ModuleConfig} */ + +var _moduleConfig; +/** + * enable submodule in User ID + * @param {RtdSubmodule} submodule + */ + + +function attachRealTimeDataProvider(submodule) { + subModules.push(submodule); +} +function init(config) { + var confListener = config.getConfig(MODULE_NAME, function (_ref) { + var realTimeData = _ref.realTimeData; + + if (!realTimeData.dataProviders) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"]('missing parameters for real time module'); + return; + } + + confListener(); // unsubscribe config listener + + _moduleConfig = realTimeData; + + if (typeof _moduleConfig.auctionDelay === 'undefined') { + _moduleConfig.auctionDelay = 0; + } // delay bidding process only if auctionDelay > 0 + + + if (!_moduleConfig.auctionDelay > 0) { + Object(__WEBPACK_IMPORTED_MODULE_3__src_hook_js__["a" /* getHook */])('bidsBackCallback').before(setTargetsAfterRequestBids); + } else { + Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().requestBids.before(requestBidsHook); + } + }); +} +/** + * get data from sub module + * @param {AdUnit[]} adUnits received from auction + * @param {function} callback callback function on data received + */ + +function getProviderData(adUnits, callback) { + var callbackExpected = subModules.length; + var dataReceived = []; + var processDone = false; + var dataWaitTimeout = setTimeout(function () { + processDone = true; + callback(dataReceived); + }, _moduleConfig.auctionDelay || _moduleConfig.timeout || DEF_TIMEOUT); + subModules.forEach(function (sm) { + sm.getData(adUnits, onDataReceived); + }); + + function onDataReceived(data) { + if (processDone) { + return; + } + + dataReceived.push(data); + + if (dataReceived.length === callbackExpected) { + processDone = true; + clearTimeout(dataWaitTimeout); + callback(dataReceived); + } + } +} +/** + * delete invalid data received from provider + * this is to ensure working flow for GPT + * @param {Object} data received from provider + * @return {Object} valid data for GPT targeting + */ + + +function validateProviderDataForGPT(data) { + // data must be an object, contains object with string as value + if (_typeof(data) !== 'object') { + return {}; + } + + for (var key in data) { + if (data.hasOwnProperty(key)) { + for (var innerKey in data[key]) { + if (data[key].hasOwnProperty(innerKey)) { + if (typeof data[key][innerKey] !== 'string') { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logWarn"]("removing ".concat(key, ": {").concat(innerKey, ":").concat(data[key][innerKey], " } from GPT targeting because of invalid type (must be string)")); + delete data[key][innerKey]; + } + } + } + } + } + + return data; +} +/** + * run hook after bids request and before callback + * get data from provider and set key values to primary ad server + * @param {function} next - next hook function + * @param {AdUnit[]} adUnits received from auction + */ + +function setTargetsAfterRequestBids(next, adUnits) { + getProviderData(adUnits, function (data) { + if (data && Object.keys(data).length) { + var _mergedData = deepMerge(data); + + if (Object.keys(_mergedData).length) { + setDataForPrimaryAdServer(_mergedData); + } + } + + next(adUnits); + }); +} +/** + * deep merge array of objects + * @param {array} arr - objects array + * @return {Object} merged object + */ + +function deepMerge(arr) { + if (!Array.isArray(arr) || !arr.length) { + return {}; + } + + return arr.reduce(function (merged, obj) { + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + if (!merged.hasOwnProperty(key)) merged[key] = obj[key];else { + // duplicate key - merge values + var dp = obj[key]; + + for (var dk in dp) { + if (dp.hasOwnProperty(dk)) merged[key][dk] = dp[dk]; + } + } + } + } + + return merged; + }, {}); +} +/** + * run hook before bids request + * get data from provider and set key values to primary ad server & bidders + * @param {function} fn - hook function + * @param {Object} reqBidsConfigObj - request bids object + */ + +function requestBidsHook(fn, reqBidsConfigObj) { + var _this = this; + + getProviderData(reqBidsConfigObj.adUnits || Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().adUnits, function (data) { + if (data && Object.keys(data).length) { + var _mergedData = deepMerge(data); + + if (Object.keys(_mergedData).length) { + setDataForPrimaryAdServer(_mergedData); + addIdDataToAdUnitBids(reqBidsConfigObj.adUnits || Object(__WEBPACK_IMPORTED_MODULE_0__src_prebidGlobal_js__["a" /* getGlobal */])().adUnits, _mergedData); + } + } + + return fn.call(_this, reqBidsConfigObj); + }); +} +/** + * set data to primary ad server + * @param {Object} data - key values to set + */ + +function setDataForPrimaryAdServer(data) { + data = validateProviderDataForGPT(data); + + if (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isGptPubadsDefined"]()) { + __WEBPACK_IMPORTED_MODULE_2__src_targeting_js__["a" /* targeting */].setTargetingForGPT(data, null); + } else { + window.googletag = window.googletag || {}; + window.googletag.cmd = window.googletag.cmd || []; + window.googletag.cmd.push(function () { + __WEBPACK_IMPORTED_MODULE_2__src_targeting_js__["a" /* targeting */].setTargetingForGPT(data, null); + }); + } +} +/** + * @param {AdUnit[]} adUnits + * @param {Object} data - key values to set + */ + + +function addIdDataToAdUnitBids(adUnits, data) { + adUnits.forEach(function (adUnit) { + adUnit.bids = adUnit.bids.map(function (bid) { + var rd = data[adUnit.code] || {}; + return _extends(bid, { + realTimeData: rd + }); + }); + }); +} + +init(__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */]); +Object(__WEBPACK_IMPORTED_MODULE_3__src_hook_js__["c" /* module */])('realTimeData', attachRealTimeDataProvider); + +/***/ }) + +},[660]); \ No newline at end of file diff --git a/build/dist/rubiconAnalyticsAdapter.js b/build/dist/rubiconAnalyticsAdapter.js new file mode 100644 index 00000000000..de6629cf097 --- /dev/null +++ b/build/dist/rubiconAnalyticsAdapter.js @@ -0,0 +1,854 @@ +pbjsChunk([15],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 662: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(663); + + +/***/ }), + +/***/ 663: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SEND_TIMEOUT", function() { return SEND_TIMEOUT; }); +/* harmony export (immutable) */ __webpack_exports__["getHostNameFromReferer"] = getHostNameFromReferer; +/* harmony export (immutable) */ __webpack_exports__["parseBidResponse"] = parseBidResponse; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_prebidGlobal_js__ = __webpack_require__(20); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + _CONSTANTS$STATUS = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.STATUS, + GOOD = _CONSTANTS$STATUS.GOOD, + NO_BID = _CONSTANTS$STATUS.NO_BID, + BID_REJECTED = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.BID_STATUS.BID_REJECTED; +var serverConfig; +__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('s2sConfig', function (_ref) { + var s2sConfig = _ref.s2sConfig; + serverConfig = s2sConfig; +}); +var SEND_TIMEOUT = 3000; +var DEFAULT_INTEGRATION = 'pbjs'; +var cache = { + auctions: {}, + targeting: {}, + timeouts: {} +}; +var validFloorProviders = ['rubicon', 'rubi', 'magnite', 'mgni']; +function getHostNameFromReferer(referer) { + try { + rubiconAdapter.referrerHostname = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["parseUrl"](referer, { + noDecodeWholeURL: true + }).hostname; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"]('Rubicon Analytics: Unable to parse hostname from supplied url: ', referer, e); + rubiconAdapter.referrerHostname = ''; + } + + return rubiconAdapter.referrerHostname; +} +; + +function stringProperties(obj) { + return Object.keys(obj).reduce(function (newObj, prop) { + var value = obj[prop]; + + if (typeof value === 'number') { + value = value.toFixed(3); + } else if (typeof value !== 'string') { + value = String(value); + } + + newObj[prop] = value; + return newObj; + }, {}); +} + +function sizeToDimensions(size) { + return { + width: size.w || size[0], + height: size.h || size[1] + }; +} + +function validMediaType(type) { + return ['banner', 'native', 'video'].indexOf(type) !== -1; +} + +function formatSource(src) { + if (typeof src === 'undefined') { + src = 'client'; + } else if (src === 's2s') { + src = 'server'; + } + + return src.toLowerCase(); +} + +function sendMessage(auctionId, bidWonId) { + function formatBid(bid) { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['bidder', 'bidId', function (bidId) { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'bidResponse.pbsBidId') || __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'bidResponse.seatBidId') || bidId; + }, 'status', 'error', 'source', function (source, bid) { + if (source) { + return source; + } + + return serverConfig && Array.isArray(serverConfig.bidders) && serverConfig.bidders.indexOf(bid.bidder) !== -1 ? 'server' : 'client'; + }, 'clientLatencyMillis', 'serverLatencyMillis', 'params', 'bidResponse', function (bidResponse) { + return bidResponse ? __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bidResponse, ['bidPriceUSD', 'dealId', 'dimensions', 'mediaType', 'floorValue', 'floorRule']) : undefined; + }]); + } + + function formatBidWon(bid) { + return _extends(formatBid(bid), __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid.adUnit, ['adUnitCode', 'transactionId', 'videoAdFormat', function () { + return bid.videoAdFormat; + }, 'mediaTypes']), { + adserverTargeting: stringProperties(cache.targeting[bid.adUnit.adUnitCode] || {}), + bidwonStatus: 'success', + // hard-coded for now + accountId: accountId, + siteId: bid.siteId, + zoneId: bid.zoneId, + samplingFactor: samplingFactor + }); + } + + var auctionCache = cache.auctions[auctionId]; + var referrer = __WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('pageUrl') || auctionCache.referrer; + var message = { + eventTimeMillis: Date.now(), + integration: __WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('rubicon.int_type') || DEFAULT_INTEGRATION, + version: "4.2.0", + referrerUri: referrer, + referrerHostname: rubiconAdapter.referrerHostname || getHostNameFromReferer(referrer) + }; + var wrapperName = __WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('rubicon.wrapperName'); + + if (wrapperName) { + message.wrapperName = wrapperName; + } + + if (auctionCache && !auctionCache.sent) { + var adUnitMap = Object.keys(auctionCache.bids).reduce(function (adUnits, bidId) { + var bid = auctionCache.bids[bidId]; + var adUnit = adUnits[bid.adUnit.adUnitCode]; + + if (!adUnit) { + adUnit = adUnits[bid.adUnit.adUnitCode] = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid.adUnit, ['adUnitCode', 'transactionId', 'mediaTypes', 'dimensions', 'adserverTargeting', function () { + return stringProperties(cache.targeting[bid.adUnit.adUnitCode] || {}); + }, 'adSlot']); + adUnit.bids = []; + adUnit.status = 'no-bid'; // default it to be no bid + } // Add site and zone id if not there and if we found a rubicon bidder + + + if ((!adUnit.siteId || !adUnit.zoneId) && rubiconAliases.indexOf(bid.bidder) !== -1) { + if (__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'params.accountId') == accountId) { + adUnit.accountId = parseInt(accountId); + adUnit.siteId = parseInt(__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'params.siteId')); + adUnit.zoneId = parseInt(__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'params.zoneId')); + } + } + + if (bid.videoAdFormat && !adUnit.videoAdFormat) { + adUnit.videoAdFormat = bid.videoAdFormat; + } // determine adUnit.status from its bid statuses. Use priority below to determine, higher index is better + + + var statusPriority = ['error', 'no-bid', 'success']; + + if (statusPriority.indexOf(bid.status) > statusPriority.indexOf(adUnit.status)) { + adUnit.status = bid.status; + } + + adUnit.bids.push(formatBid(bid)); + return adUnits; + }, {}); // We need to mark each cached bid response with its appropriate rubicon site-zone id + // This allows the bidWon events to have these params even in the case of a delayed render + + Object.keys(auctionCache.bids).forEach(function (bidId) { + var adCode = auctionCache.bids[bidId].adUnit.adUnitCode; + + _extends(auctionCache.bids[bidId], __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](adUnitMap[adCode], ['accountId', 'siteId', 'zoneId'])); + }); + var auction = { + clientTimeoutMillis: auctionCache.timeout, + samplingFactor: samplingFactor, + accountId: accountId, + adUnits: Object.keys(adUnitMap).map(function (i) { + return adUnitMap[i]; + }) + }; // pick our of top level floor data we want to send! + + if (auctionCache.floorData) { + if (auctionCache.floorData.location === 'noData') { + auction.floors = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](auctionCache.floorData, ['location', 'fetchStatus']); + } else { + auction.floors = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](auctionCache.floorData, ['location', 'modelName', function () { + return auctionCache.floorData.modelVersion; + }, 'skipped', 'enforcement', function () { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](auctionCache.floorData, 'enforcements.enforceJS'); + }, 'dealsEnforced', function () { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](auctionCache.floorData, 'enforcements.floorDeals'); + }, 'skipRate', 'fetchStatus']); + } + } + + if (serverConfig) { + auction.serverTimeoutMillis = serverConfig.timeout; + } + + message.auctions = [auction]; + var bidsWon = Object.keys(auctionCache.bidsWon).reduce(function (memo, adUnitCode) { + var bidId = auctionCache.bidsWon[adUnitCode]; + + if (bidId) { + memo.push(formatBidWon(auctionCache.bids[bidId])); + } + + return memo; + }, []); + + if (bidsWon.length > 0) { + message.bidsWon = bidsWon; + } + + auctionCache.sent = true; + } else if (bidWonId && auctionCache && auctionCache.bids[bidWonId]) { + message.bidsWon = [formatBidWon(auctionCache.bids[bidWonId])]; + } + + Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["a" /* ajax */])(this.getUrl(), null, JSON.stringify(message), { + contentType: 'application/json' + }); +} + +function getBidPrice(bid) { + // get the cpm from bidResponse + var cpm; + var currency; + + if (bid.status === BID_REJECTED && __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'floorData.cpmAfterAdjustments')) { + // if bid was rejected and bid.floorData.cpmAfterAdjustments use it + cpm = bid.floorData.cpmAfterAdjustments; + currency = bid.floorData.floorCurrency; + } else if (typeof bid.currency === 'string' && bid.currency.toUpperCase() === 'USD') { + // bid is in USD use it + return Number(bid.cpm); + } else { + // else grab cpm + cpm = bid.cpm; + currency = bid.currency; + } // if after this it is still going and is USD then return it. + + + if (currency === 'USD') { + return Number(cpm); + } // otherwise we convert and return + + + try { + return Number(Object(__WEBPACK_IMPORTED_MODULE_6__src_prebidGlobal_js__["a" /* getGlobal */])().convertCurrency(cpm, currency, 'USD')); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logWarn"]('Rubicon Analytics Adapter: Could not determine the bidPriceUSD of the bid ', bid); + } +} + +function parseBidResponse(bid, previousBidResponse, auctionFloorData) { + // The current bidResponse for this matching requestId/bidRequestId + var responsePrice = getBidPrice(bid); // we need to compare it with the previous one (if there was one) + + if (previousBidResponse && previousBidResponse.bidPriceUSD > responsePrice) { + return previousBidResponse; + } + + var bidResponse = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['bidPriceUSD', function () { + return responsePrice; + }, 'dealId', 'status', 'mediaType', 'dimensions', function () { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['width', 'height']); + }, 'seatBidId']); + + if (auctionFloorData) { + bidResponse.floorValue = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'floorData.floorValue'); + bidResponse.floorRule = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["debugTurnedOn"]() ? __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'floorData.floorRule') : undefined; + } + + return bidResponse; +} +var samplingFactor = 1; +var accountId; // List of known rubicon aliases +// This gets updated on auction init to account for any custom aliases present + +var rubiconAliases = ['rubicon']; +/* + Checks the alias registry for any entries of the rubicon bid adapter. + adds to the rubiconAliases list if found +*/ + +function setRubiconAliases(aliasRegistry) { + Object.keys(aliasRegistry).forEach(function (alias) { + if (aliasRegistry[alias] === 'rubicon') { + rubiconAliases.push(alias); + } + }); +} + +var baseAdapter = Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: 'endpoint' +}); + +var rubiconAdapter = _extends({}, baseAdapter, { + referrerHostname: '', + enableAnalytics: function enableAnalytics() { + var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var error = false; + samplingFactor = 1; + + if (_typeof(config.options) === 'object') { + if (config.options.accountId) { + accountId = Number(config.options.accountId); + } + + if (config.options.endpoint) { + this.getUrl = function () { + return config.options.endpoint; + }; + } else { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"]('required endpoint missing from rubicon analytics'); + error = true; + } + + if (typeof config.options.sampling !== 'undefined') { + samplingFactor = 1 / parseFloat(config.options.sampling); + } + + if (typeof config.options.samplingFactor !== 'undefined') { + if (typeof config.options.sampling !== 'undefined') { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logWarn"]('Both options.samplingFactor and options.sampling enabled in rubicon analytics, defaulting to samplingFactor'); + } + + samplingFactor = parseFloat(config.options.samplingFactor); + config.options.sampling = 1 / samplingFactor; + } + } + + var validSamplingFactors = [1, 10, 20, 40, 100]; + + if (validSamplingFactors.indexOf(samplingFactor) === -1) { + error = true; + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"]('invalid samplingFactor for rubicon analytics: ' + samplingFactor + ', must be one of ' + validSamplingFactors.join(', ')); + } else if (!accountId) { + error = true; + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"]('required accountId missing for rubicon analytics'); + } + + if (!error) { + baseAdapter.enableAnalytics.call(this, config); + } + }, + disableAnalytics: function disableAnalytics() { + this.getUrl = baseAdapter.getUrl; + accountId = null; + baseAdapter.disableAnalytics.apply(this, arguments); + }, + track: function track(_ref2) { + var _this = this; + + var eventType = _ref2.eventType, + args = _ref2.args; + + switch (eventType) { + case AUCTION_INIT: + // set the rubicon aliases + setRubiconAliases(__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].aliasRegistry); + var cacheEntry = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](args, ['timestamp', 'timeout']); + cacheEntry.bids = {}; + cacheEntry.bidsWon = {}; + cacheEntry.referrer = args.bidderRequests[0].refererInfo.referer; + var floorProvider = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](args, 'bidderRequests.0.bids.0.floorData.floorProvider'); + + if (validFloorProviders.indexOf(floorProvider) !== -1) { + cacheEntry.floorData = _objectSpread({}, args.bidderRequests[0].bids[0].floorData); + } + + cache.auctions[args.auctionId] = cacheEntry; + break; + + case BID_REQUESTED: + _extends(cache.auctions[args.auctionId].bids, args.bids.reduce(function (memo, bid) { + // mark adUnits we expect bidWon events for + cache.auctions[args.auctionId].bidsWon[bid.adUnitCode] = false; + memo[bid.bidId] = __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['bidder', function (bidder) { + return bidder.toLowerCase(); + }, 'bidId', 'status', function () { + return 'no-bid'; + }, // default a bid to no-bid until response is recieved or bid is timed out + 'finalSource as source', 'params', function (params, bid) { + switch (bid.bidder) { + // specify bidder params we want here + case 'rubicon': + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](params, ['accountId', 'siteId', 'zoneId']); + } + }, 'videoAdFormat', function (_, cachedBid) { + if (cachedBid.bidder === 'rubicon') { + return { + 201: 'pre-roll', + 202: 'interstitial', + 203: 'outstream', + 204: 'mid-roll', + 205: 'post-roll', + 207: 'vertical' + }[__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'params.video.size_id')]; + } else { + var startdelay = parseInt(__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'params.video.startdelay'), 10); + + if (!isNaN(startdelay)) { + if (startdelay > 0) { + return 'mid-roll'; + } + + return { + '0': 'pre-roll', + '-1': 'mid-roll', + '-2': 'post-roll' + }[startdelay]; + } + } + }, 'adUnit', function () { + return __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["pick"](bid, ['adUnitCode', 'transactionId', 'sizes as dimensions', function (sizes) { + return sizes.map(sizeToDimensions); + }, 'mediaTypes', function (types) { + if (bid.mediaType && validMediaType(bid.mediaType)) { + return [bid.mediaType]; + } + + if (Array.isArray(types)) { + return types.filter(validMediaType); + } + + if (_typeof(types) === 'object') { + if (!bid.sizes) { + bid.dimensions = []; + + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["_each"](types, function (type) { + return bid.dimensions = bid.dimensions.concat(type.sizes.map(sizeToDimensions)); + }); + } + + return Object.keys(types).filter(validMediaType); + } + + return ['banner']; + }]); + }]); + return memo; + }, {})); + + break; + + case BID_RESPONSE: + var auctionEntry = cache.auctions[args.auctionId]; + var bid = auctionEntry.bids[args.requestId]; // If floor resolved gptSlot but we have not yet, then update the adUnit to have the adSlot name + + if (!__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](bid, 'adUnit.adSlot') && __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](args, 'floorData.matchedFields.gptSlot')) { + bid.adUnit.adSlot = args.floorData.matchedFields.gptSlot; + } // if we have not set enforcements yet set it + + + if (auctionEntry.floorData && !auctionEntry.floorData.enforcements && __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepAccess"](args, 'floorData.enforcements')) { + auctionEntry.floorData.enforcements = _objectSpread({}, args.floorData.enforcements); + } + + if (!bid) { + __WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"]('Rubicon Anlytics Adapter Error: Could not find associated bid request for bid response with requestId: ', args.requestId); + break; + } + + bid.source = formatSource(bid.source || args.source); + + switch (args.getStatusCode()) { + case GOOD: + bid.status = 'success'; + delete bid.error; // it's possible for this to be set by a previous timeout + + break; + + case NO_BID: + bid.status = args.status === BID_REJECTED ? 'rejected' : 'no-bid'; + delete bid.error; + break; + + default: + bid.status = 'error'; + bid.error = { + code: 'request-error' + }; + } + + bid.clientLatencyMillis = Date.now() - cache.auctions[args.auctionId].timestamp; + bid.bidResponse = parseBidResponse(args, bid.bidResponse, auctionEntry.floorData); + break; + + case BIDDER_DONE: + args.bids.forEach(function (bid) { + var cachedBid = cache.auctions[bid.auctionId].bids[bid.bidId || bid.requestId]; + + if (typeof bid.serverResponseTimeMs !== 'undefined') { + cachedBid.serverLatencyMillis = bid.serverResponseTimeMs; + } + + if (!cachedBid.status) { + cachedBid.status = 'no-bid'; + } + + if (!cachedBid.clientLatencyMillis) { + cachedBid.clientLatencyMillis = Date.now() - cache.auctions[bid.auctionId].timestamp; + } + }); + break; + + case SET_TARGETING: + _extends(cache.targeting, args); + + break; + + case BID_WON: + var auctionCache = cache.auctions[args.auctionId]; + auctionCache.bidsWon[args.adUnitCode] = args.requestId; // check if this BID_WON missed the boat, if so send by itself + + if (auctionCache.sent === true) { + sendMessage.call(this, args.auctionId, args.requestId); + } else if (Object.keys(auctionCache.bidsWon).reduce(function (memo, adUnitCode) { + // only send if we've received bidWon events for all adUnits in auction + memo = memo && auctionCache.bidsWon[adUnitCode]; + return memo; + }, true)) { + clearTimeout(cache.timeouts[args.auctionId]); + delete cache.timeouts[args.auctionId]; + sendMessage.call(this, args.auctionId); + } + + break; + + case AUCTION_END: + // start timer to send batched payload just in case we don't hear any BID_WON events + cache.timeouts[args.auctionId] = setTimeout(function () { + sendMessage.call(_this, args.auctionId); + }, SEND_TIMEOUT); + break; + + case BID_TIMEOUT: + args.forEach(function (badBid) { + var auctionCache = cache.auctions[badBid.auctionId]; + var bid = auctionCache.bids[badBid.bidId || badBid.requestId]; + bid.status = 'error'; + bid.error = { + code: 'timeout-error' + }; + }); + break; + } + } +}); + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: rubiconAdapter, + code: 'rubicon' +}); +/* harmony default export */ __webpack_exports__["default"] = (rubiconAdapter); + +/***/ }) + +},[662]); \ No newline at end of file diff --git a/build/dist/rubiconBidAdapter.js b/build/dist/rubiconBidAdapter.js new file mode 100644 index 00000000000..54957d361bb --- /dev/null +++ b/build/dist/rubiconBidAdapter.js @@ -0,0 +1,1312 @@ +pbjsChunk([116],{ + +/***/ 664: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(665); + + +/***/ }), + +/***/ 665: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FASTLANE_ENDPOINT", function() { return FASTLANE_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_ENDPOINT", function() { return VIDEO_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SYNC_ENDPOINT", function() { return SYNC_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["hasVideoMediaType"] = hasVideoMediaType; +/* harmony export (immutable) */ __webpack_exports__["masSizeOrdering"] = masSizeOrdering; +/* harmony export (immutable) */ __webpack_exports__["determineRubiconVideoSizeId"] = determineRubiconVideoSizeId; +/* harmony export (immutable) */ __webpack_exports__["getPriceGranularity"] = getPriceGranularity; +/* harmony export (immutable) */ __webpack_exports__["hasValidVideoParams"] = hasValidVideoParams; +/* harmony export (immutable) */ __webpack_exports__["hasValidSupplyChainParams"] = hasValidSupplyChainParams; +/* harmony export (immutable) */ __webpack_exports__["encodeParam"] = encodeParam; +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var DEFAULT_INTEGRATION = 'pbjs_lite'; +var DEFAULT_PBS_INTEGRATION = 'pbjs'; // always use https, regardless of whether or not current page is secure + +var FASTLANE_ENDPOINT = 'https://fastlane.rubiconproject.com/a/api/fastlane.json'; +var VIDEO_ENDPOINT = 'https://prebid-server.rubiconproject.com/openrtb2/auction'; +var SYNC_ENDPOINT = 'https://eus.rubiconproject.com/usync.html'; +var GVLID = 52; +var DIGITRUST_PROP_NAMES = { + FASTLANE: { + id: 'dt.id', + keyv: 'dt.keyv', + pref: 'dt.pref' + }, + PREBID_SERVER: { + id: 'id', + keyv: 'keyv' + } +}; +var sizeMap = { + 1: '468x60', + 2: '728x90', + 5: '120x90', + 7: '125x125', + 8: '120x600', + 9: '160x600', + 10: '300x600', + 13: '200x200', + 14: '250x250', + 15: '300x250', + 16: '336x280', + 17: '240x400', + 19: '300x100', + 31: '980x120', + 32: '250x360', + 33: '180x500', + 35: '980x150', + 37: '468x400', + 38: '930x180', + 39: '750x100', + 40: '750x200', + 41: '750x300', + 42: '2x4', + 43: '320x50', + 44: '300x50', + 48: '300x300', + 53: '1024x768', + 54: '300x1050', + 55: '970x90', + 57: '970x250', + 58: '1000x90', + 59: '320x80', + 60: '320x150', + 61: '1000x1000', + 64: '580x500', + 65: '640x480', + 66: '930x600', + 67: '320x480', + 68: '1800x1000', + 72: '320x320', + 73: '320x160', + 78: '980x240', + 79: '980x300', + 80: '980x400', + 83: '480x300', + 85: '300x120', + 90: '548x150', + 94: '970x310', + 95: '970x100', + 96: '970x210', + 101: '480x320', + 102: '768x1024', + 103: '480x280', + 105: '250x800', + 108: '320x240', + 113: '1000x300', + 117: '320x100', + 125: '800x250', + 126: '200x600', + 144: '980x600', + 145: '980x150', + 152: '1000x250', + 156: '640x320', + 159: '320x250', + 179: '250x600', + 195: '600x300', + 198: '640x360', + 199: '640x200', + 213: '1030x590', + 214: '980x360', + 221: '1x1', + 229: '320x180', + 230: '2000x1400', + 232: '580x400', + 234: '6x6', + 251: '2x2', + 256: '480x820', + 257: '400x600', + 258: '500x200', + 259: '998x200', + 264: '970x1000', + 265: '1920x1080', + 274: '1800x200', + 278: '320x500', + 282: '320x400', + 288: '640x380' +}; + +__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](sizeMap, function (item, key) { + return sizeMap[item] = key; +}); + +var spec = { + code: 'rubicon', + gvlid: GVLID, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + + /** + * @param {object} bid + * @return boolean + */ + isBidRequestValid: function isBidRequestValid(bid) { + if (_typeof(bid.params) !== 'object') { + return false; + } // validate account, site, zone have numeric values + + + for (var i = 0, props = ['accountId', 'siteId', 'zoneId']; i < props.length; i++) { + bid.params[props[i]] = parseInt(bid.params[props[i]]); + + if (isNaN(bid.params[props[i]])) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: wrong format of accountId or siteId or zoneId.'); + return false; + } + } + + var bidFormat = bidType(bid, true); // bidType is undefined? Return false + + if (!bidFormat) { + return false; + } else if (bidFormat === 'video') { + // bidType is video, make sure it has required params + return hasValidVideoParams(bid); + } // bidType is banner? return true + + + return true; + }, + + /** + * @param {BidRequest[]} bidRequests + * @param bidderRequest + * @return BidRequest[] + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + // separate video bids because the requests are structured differently + var requests = []; + var videoRequests = bidRequests.filter(function (bidRequest) { + return bidType(bidRequest) === 'video'; + }).map(function (bidRequest) { + bidRequest.startTime = new Date().getTime(); + var data = { + id: bidRequest.transactionId, + test: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('debug') ? 1 : 0, + cur: ['USD'], + source: { + tid: bidRequest.transactionId + }, + tmax: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('TTL') || 1000, + imp: [{ + exp: 300, + id: bidRequest.adUnitCode, + secure: 1, + ext: _defineProperty({}, bidRequest.bidder, bidRequest.params), + video: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') || {} + }], + ext: { + prebid: { + cache: { + vastxml: { + returnCreative: false // don't return the VAST + + } + }, + targeting: { + includewinners: true, + // includebidderkeys always false for openrtb + includebidderkeys: false, + pricegranularity: getPriceGranularity(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */]) + }, + bidders: { + rubicon: { + integration: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.int_type') || DEFAULT_PBS_INTEGRATION + } + } + } + } + }; // Add alias if it is there + + if (bidRequest.bidder !== 'rubicon') { + data.ext.prebid.aliases = _defineProperty({}, bidRequest.bidder, 'rubicon'); + } + + var bidFloor; + + if (typeof bidRequest.getFloor === 'function' && !__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.disableFloors')) { + var floorInfo = bidRequest.getFloor({ + currency: 'USD', + mediaType: 'video', + size: parseSizes(bidRequest, 'video') + }); + bidFloor = _typeof(floorInfo) === 'object' && floorInfo.currency === 'USD' && !isNaN(parseInt(floorInfo.floor)) ? parseFloat(floorInfo.floor) : undefined; + } else { + bidFloor = parseFloat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.floor')); + } + + if (!isNaN(bidFloor)) { + data.imp[0].bidfloor = bidFloor; + } // if value is set, will overwrite with same value + + + data.imp[0].ext[bidRequest.bidder].video.size_id = determineRubiconVideoSizeId(bidRequest); + appendSiteAppDevice(data, bidRequest, bidderRequest); + addVideoParameters(data, bidRequest); + + var digiTrust = _getDigiTrustQueryParams(bidRequest, 'PREBID_SERVER'); + + if (digiTrust) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.digitrust', digiTrust); + } + + if (bidderRequest.gdprConsent) { + // note - gdprApplies & consentString may be undefined in certain use-cases for consentManagement module + var gdprApplies; + + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + gdprApplies = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.ext.gdpr', gdprApplies); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (bidRequest.userId && _typeof(bidRequest.userId) === 'object' && (bidRequest.userId.tdid || bidRequest.userId.pubcid || bidRequest.userId.lipb || bidRequest.userId.idl_env)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'user.ext.eids', []); + + if (bidRequest.userId.tdid) { + data.user.ext.eids.push({ + source: 'adserver.org', + uids: [{ + id: bidRequest.userId.tdid, + ext: { + rtiPartner: 'TDID' + } + }] + }); + } + + if (bidRequest.userId.pubcid) { + data.user.ext.eids.push({ + source: 'pubcommon', + uids: [{ + id: bidRequest.userId.pubcid + }] + }); + } // support liveintent ID + + + if (bidRequest.userId.lipb && bidRequest.userId.lipb.lipbid) { + data.user.ext.eids.push({ + source: 'liveintent.com', + uids: [{ + id: bidRequest.userId.lipb.lipbid + }] + }); + data.user.ext.tpid = { + source: 'liveintent.com', + uid: bidRequest.userId.lipb.lipbid + }; + + if (Array.isArray(bidRequest.userId.lipb.segments) && bidRequest.userId.lipb.segments.length) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'rp.target.LIseg', bidRequest.userId.lipb.segments); + } + } // support identityLink (aka LiveRamp) + + + if (bidRequest.userId.idl_env) { + data.user.ext.eids.push({ + source: 'liveramp.com', + uids: [{ + id: bidRequest.userId.idl_env + }] + }); + } + } + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'regs.coppa', 1); + } + + if (bidRequest.schain && hasValidSupplyChainParams(bidRequest.schain)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'source.ext.schain', bidRequest.schain); + } + + var siteData = _extends({}, bidRequest.params.inventory, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context')); + + var userData = _extends({}, bidRequest.params.visitor, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user')); + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](siteData) || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userData)) { + var bidderData = { + bidders: [bidderRequest.bidderCode], + config: { + fpd: {} + } + }; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](siteData)) { + bidderData.config.fpd.site = siteData; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userData)) { + bidderData.config.fpd.user = userData; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data, 'ext.prebid.bidderconfig.0', bidderData); + } + /** + * Prebid AdSlot + * @type {(string|undefined)} + */ + + + var pbAdSlot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.pbAdSlot'); + + if (typeof pbAdSlot === 'string' && pbAdSlot) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0].ext, 'context.data.pbadslot', pbAdSlot); + } + /** + * GAM Ad Unit + * @type {(string|undefined)} + */ + + + var gamAdUnit = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.adServer.adSlot'); + + if (typeof gamAdUnit === 'string' && gamAdUnit) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0].ext, 'context.data.adslot', gamAdUnit); + } // if storedAuctionResponse has been set, pass SRID + + + if (bidRequest.storedAuctionResponse) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0], 'ext.prebid.storedauctionresponse.id', bidRequest.storedAuctionResponse.toString()); + } // set ext.prebid.auctiontimestamp using auction time + + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](data.imp[0], 'ext.prebid.auctiontimestamp', bidderRequest.auctionStart); + return { + method: 'POST', + url: VIDEO_ENDPOINT, + data: data, + bidRequest: bidRequest + }; + }); + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.singleRequest') !== true) { + // bids are not grouped if single request mode is not enabled + requests = videoRequests.concat(bidRequests.filter(function (bidRequest) { + return bidType(bidRequest) === 'banner'; + }).map(function (bidRequest) { + var bidParams = spec.createSlotParams(bidRequest, bidderRequest); + return { + method: 'GET', + url: FASTLANE_ENDPOINT, + data: spec.getOrderedParams(bidParams).reduce(function (paramString, key) { + var propValue = bidParams[key]; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](propValue) && propValue !== '' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](propValue) ? "".concat(paramString).concat(encodeParam(key, propValue), "&") : paramString; + }, '') + "slots=1&rand=".concat(Math.random()), + bidRequest: bidRequest + }; + })); + } else { + // single request requires bids to be grouped by site id into a single request + // note: utils.groupBy wasn't used because deep property access was needed + var nonVideoRequests = bidRequests.filter(function (bidRequest) { + return bidType(bidRequest) === 'banner'; + }); + var groupedBidRequests = nonVideoRequests.reduce(function (groupedBids, bid) { + (groupedBids[bid.params['siteId']] = groupedBids[bid.params['siteId']] || []).push(bid); + return groupedBids; + }, {}); // fastlane SRA has a limit of 10 slots + + var SRA_BID_LIMIT = 10; // multiple requests are used if bids groups have more than 10 bids + + requests = videoRequests.concat(Object.keys(groupedBidRequests).reduce(function (aggregate, bidGroupKey) { + // for each partioned bidGroup, append a bidRequest to requests list + partitionArray(groupedBidRequests[bidGroupKey], SRA_BID_LIMIT).forEach(function (bidsInGroup) { + var combinedSlotParams = spec.combineSlotUrlParams(bidsInGroup.map(function (bidRequest) { + return spec.createSlotParams(bidRequest, bidderRequest); + })); // SRA request returns grouped bidRequest arrays not a plain bidRequest + + aggregate.push({ + method: 'GET', + url: FASTLANE_ENDPOINT, + data: spec.getOrderedParams(combinedSlotParams).reduce(function (paramString, key) { + var propValue = combinedSlotParams[key]; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](propValue) && propValue !== '' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](propValue) ? "".concat(paramString).concat(encodeParam(key, propValue), "&") : paramString; + }, '') + "slots=".concat(bidsInGroup.length, "&rand=").concat(Math.random()), + bidRequest: bidsInGroup + }); + }); + return aggregate; + }, [])); + } + + return requests; + }, + getOrderedParams: function getOrderedParams(params) { + var containsTgV = /^tg_v/; + var containsTgI = /^tg_i/; + var orderedParams = ['account_id', 'site_id', 'zone_id', 'size_id', 'alt_size_ids', 'p_pos', 'gdpr', 'gdpr_consent', 'us_privacy', 'rp_schain', 'tpid_tdid', 'tpid_liveintent.com', 'tg_v.LIseg', 'dt.id', 'dt.keyv', 'dt.pref', 'rf', 'p_geo.latitude', 'p_geo.longitude', 'kw'].concat(Object.keys(params).filter(function (item) { + return containsTgV.test(item); + })).concat(Object.keys(params).filter(function (item) { + return containsTgI.test(item); + })).concat(['tk_flint', 'x_source.tid', 'x_source.pchain', 'p_screen_res', 'rp_floor', 'rp_secure', 'tk_user_key']); + return orderedParams.concat(Object.keys(params).filter(function (item) { + return orderedParams.indexOf(item) === -1; + })); + }, + + /** + * @summary combines param values from an array of slots into a single semicolon delineated value + * or just one value if they are all the same. + * @param {Object[]} aSlotUrlParams - example [{p1: 'foo', p2: 'test'}, {p2: 'test'}, {p1: 'bar', p2: 'test'}] + * @return {Object} - example {p1: 'foo;;bar', p2: 'test'} + */ + combineSlotUrlParams: function combineSlotUrlParams(aSlotUrlParams) { + // if only have params for one slot, return those params + if (aSlotUrlParams.length === 1) { + return aSlotUrlParams[0]; + } // reduce param values from all slot objects into an array of values in a single object + + + var oCombinedSlotUrlParams = aSlotUrlParams.reduce(function (oCombinedParams, oSlotUrlParams, iIndex) { + Object.keys(oSlotUrlParams).forEach(function (param) { + if (!oCombinedParams.hasOwnProperty(param)) { + oCombinedParams[param] = new Array(aSlotUrlParams.length); // initialize array; + } // insert into the proper element of the array + + + oCombinedParams[param].splice(iIndex, 1, oSlotUrlParams[param]); + }); + return oCombinedParams; + }, {}); // convert arrays into semicolon delimited strings + + var re = new RegExp('^([^;]*)(;\\1)+$'); // regex to test for duplication + + Object.keys(oCombinedSlotUrlParams).forEach(function (param) { + var sValues = oCombinedSlotUrlParams[param].join(';'); // consolidate param values into one value if they are all the same + + var match = sValues.match(re); + oCombinedSlotUrlParams[param] = match ? match[1] : sValues; + }); + return oCombinedSlotUrlParams; + }, + + /** + * @param {BidRequest} bidRequest + * @param {Object} bidderRequest + * @returns {Object} - object key values named and formatted as slot params + */ + createSlotParams: function createSlotParams(bidRequest, bidderRequest) { + bidRequest.startTime = new Date().getTime(); + var params = bidRequest.params; // use rubicon sizes if provided, otherwise adUnit.sizes + + var parsedSizes = parseSizes(bidRequest, 'banner'); + + var _ref = params.latLong || [], + _ref2 = _slicedToArray(_ref, 2), + latitude = _ref2[0], + longitude = _ref2[1]; + + var configIntType = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.int_type'); + var data = { + 'account_id': params.accountId, + 'site_id': params.siteId, + 'zone_id': params.zoneId, + 'size_id': parsedSizes[0], + 'alt_size_ids': parsedSizes.slice(1).join(',') || undefined, + 'rp_floor': (params.floor = parseFloat(params.floor)) > 0.01 ? params.floor : 0.01, + 'rp_secure': '1', + 'tk_flint': "".concat(configIntType || DEFAULT_INTEGRATION, "_v4.2.0"), + 'x_source.tid': bidRequest.transactionId, + 'x_source.pchain': params.pchain, + 'p_screen_res': _getScreenResolution(), + 'tk_user_key': params.userId, + 'p_geo.latitude': isNaN(parseFloat(latitude)) ? undefined : parseFloat(latitude).toFixed(4), + 'p_geo.longitude': isNaN(parseFloat(longitude)) ? undefined : parseFloat(longitude).toFixed(4), + 'tg_fl.eid': bidRequest.code, + 'rf': _getPageUrl(bidRequest, bidderRequest) + }; // If floors module is enabled and we get USD floor back, send it in rp_hard_floor else undfined + + if (typeof bidRequest.getFloor === 'function' && !__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.disableFloors')) { + var floorInfo = bidRequest.getFloor({ + currency: 'USD', + mediaType: 'banner', + size: '*' + }); + data['rp_hard_floor'] = _typeof(floorInfo) === 'object' && floorInfo.currency === 'USD' && !isNaN(parseInt(floorInfo.floor)) ? floorInfo.floor : undefined; + } // add p_pos only if specified and valid + // For SRA we need to explicitly put empty semi colons so AE treats it as empty, instead of copying the latter value + + + data['p_pos'] = params.position === 'atf' || params.position === 'btf' ? params.position : ''; + + if (bidRequest.userId) { + if (bidRequest.userId.tdid) { + data['tpid_tdid'] = bidRequest.userId.tdid; + } // support liveintent ID + + + if (bidRequest.userId.lipb && bidRequest.userId.lipb.lipbid) { + data['tpid_liveintent.com'] = bidRequest.userId.lipb.lipbid; + + if (Array.isArray(bidRequest.userId.lipb.segments) && bidRequest.userId.lipb.segments.length) { + data['tg_v.LIseg'] = bidRequest.userId.lipb.segments.join(','); + } + } // support identityLink (aka LiveRamp) + + + if (bidRequest.userId.idl_env) { + data['tpid_liveramp.com'] = bidRequest.userId.idl_env; + } + } + + if (bidderRequest.gdprConsent) { + // add 'gdpr' only if 'gdprApplies' is defined + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + data['gdpr'] = Number(bidderRequest.gdprConsent.gdprApplies); + } + + data['gdpr_consent'] = bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest.uspConsent) { + data['us_privacy'] = encodeURIComponent(bidderRequest.uspConsent); + } // visitor properties + + + var visitorData = _extends({}, params.visitor, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user')); + + Object.keys(visitorData).forEach(function (key) { + if (visitorData[key] != null && key !== 'keywords') { + data["tg_v.".concat(key)] = _typeof(visitorData[key]) === 'object' && !Array.isArray(visitorData[key]) ? JSON.stringify(visitorData[key]) : visitorData[key].toString(); // initialize array; + } + }); // inventory properties + + var inventoryData = _extends({}, params.inventory, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context')); + + Object.keys(inventoryData).forEach(function (key) { + if (inventoryData[key] != null && key !== 'keywords') { + data["tg_i.".concat(key)] = _typeof(inventoryData[key]) === 'object' && !Array.isArray(inventoryData[key]) ? JSON.stringify(inventoryData[key]) : inventoryData[key].toString(); + } + }); // keywords + + var keywords = (params.keywords || []).concat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user'), 'keywords') || [], __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context'), 'keywords') || []); + data.kw = Array.isArray(keywords) && keywords.length ? keywords.join(',') : ''; + /** + * Prebid AdSlot + * @type {(string|undefined)} + */ + + var pbAdSlot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.pbAdSlot'); + + if (typeof pbAdSlot === 'string' && pbAdSlot) { + data['tg_i.pbadslot'] = pbAdSlot.replace(/^\/+/, ''); + } + /** + * GAM Ad Unit + * @type {(string|undefined)} + */ + + + var gamAdUnit = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'fpd.context.adServer.adSlot'); + + if (typeof gamAdUnit === 'string' && gamAdUnit) { + data['tg_i.dfp_ad_unit_code'] = gamAdUnit.replace(/^\/+/, ''); + } // digitrust properties + + + var digitrustParams = _getDigiTrustQueryParams(bidRequest, 'FASTLANE'); + + _extends(data, digitrustParams); + + if (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true) { + data['coppa'] = 1; + } // if SupplyChain is supplied and contains all required fields + + + if (bidRequest.schain && hasValidSupplyChainParams(bidRequest.schain)) { + data.rp_schain = spec.serializeSupplyChain(bidRequest.schain); + } + + return data; + }, + + /** + * Serializes schain params according to OpenRTB requirements + * @param {Object} supplyChain + * @returns {String} + */ + serializeSupplyChain: function serializeSupplyChain(supplyChain) { + var supplyChainIsValid = hasValidSupplyChainParams(supplyChain); + if (!supplyChainIsValid) return ''; + var ver = supplyChain.ver, + complete = supplyChain.complete, + nodes = supplyChain.nodes; + return "".concat(ver, ",").concat(complete, "!").concat(spec.serializeSupplyChainNodes(nodes)); + }, + + /** + * Properly sorts schain object params + * @param {Array} nodes + * @returns {String} + */ + serializeSupplyChainNodes: function serializeSupplyChainNodes(nodes) { + var nodePropOrder = ['asi', 'sid', 'hp', 'rid', 'name', 'domain']; + return nodes.map(function (node) { + return nodePropOrder.map(function (prop) { + return encodeURIComponent(node[prop] || ''); + }).join(','); + }).join('!'); + }, + + /** + * @param {*} responseObj + * @param {BidRequest|Object.} bidRequest - if request was SRA the bidRequest argument will be a keyed BidRequest array object, + * non-SRA responses return a plain BidRequest object + * @return {Bid[]} An array of bids which + */ + interpretResponse: function interpretResponse(responseObj, _ref3) { + var bidRequest = _ref3.bidRequest; + responseObj = responseObj.body; // check overall response + + if (!responseObj || _typeof(responseObj) !== 'object') { + return []; + } // video response from PBS Java openRTB + + + if (responseObj.seatbid) { + var responseErrors = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](responseObj, 'ext.errors.rubicon'); + + if (Array.isArray(responseErrors) && responseErrors.length > 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Rubicon: Error in video response'); + } + + var bids = []; + responseObj.seatbid.forEach(function (seatbid) { + (seatbid.bid || []).forEach(function (bid) { + var bidObject = { + requestId: bidRequest.bidId, + currency: responseObj.cur || 'USD', + creativeId: bid.crid, + cpm: bid.price || 0, + bidderCode: seatbid.seat, + ttl: 300, + netRevenue: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.netRevenue') !== false, + // If anything other than false, netRev is true + width: bid.w || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.w') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.video.playerWidth'), + height: bid.h || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.h') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.video.playerHeight') + }; + + if (bid.id) { + bidObject.seatBidId = bid.id; + } + + if (bid.dealid) { + bidObject.dealId = bid.dealid; + } + + var serverResponseTimeMs = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](responseObj, 'ext.responsetimemillis.rubicon'); + + if (bidRequest && serverResponseTimeMs) { + bidRequest.serverResponseTimeMs = serverResponseTimeMs; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'ext.prebid.type') === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]) { + bidObject.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + var extPrebidTargeting = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'ext.prebid.targeting'); // If ext.prebid.targeting exists, add it as a property value named 'adserverTargeting' + + if (extPrebidTargeting && _typeof(extPrebidTargeting) === 'object') { + bidObject.adserverTargeting = extPrebidTargeting; + } // try to get cache values from 'response.ext.prebid.cache.js' + // else try 'bid.ext.prebid.targeting' as fallback + + + if (bid.ext.prebid.cache && _typeof(bid.ext.prebid.cache.vastXml) === 'object' && bid.ext.prebid.cache.vastXml.cacheId && bid.ext.prebid.cache.vastXml.url) { + bidObject.videoCacheKey = bid.ext.prebid.cache.vastXml.cacheId; + bidObject.vastUrl = bid.ext.prebid.cache.vastXml.url; + } else if (extPrebidTargeting && extPrebidTargeting.hb_uuid && extPrebidTargeting.hb_cache_host && extPrebidTargeting.hb_cache_path) { + bidObject.videoCacheKey = extPrebidTargeting.hb_uuid; // build url using key and cache host + + bidObject.vastUrl = "https://".concat(extPrebidTargeting.hb_cache_host).concat(extPrebidTargeting.hb_cache_path, "?uuid=").concat(extPrebidTargeting.hb_uuid); + } + + if (bid.adm) { + bidObject.vastXml = bid.adm; + } + + if (bid.nurl) { + bidObject.vastUrl = bid.nurl; + } + + if (!bidObject.vastUrl && bid.nurl) { + bidObject.vastUrl = bid.nurl; + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Rubicon: video response received non-video media type'); + } + + bids.push(bidObject); + }); + }); + return bids; + } + + var ads = responseObj.ads; // video ads array is wrapped in an object + + if (_typeof(bidRequest) === 'object' && !Array.isArray(bidRequest) && bidType(bidRequest) === 'video' && _typeof(ads) === 'object') { + ads = ads[bidRequest.adUnitCode]; + } // check the ad response + + + if (!Array.isArray(ads) || ads.length < 1) { + return []; + } + + return ads.reduce(function (bids, ad, i) { + if (ad.status !== 'ok') { + return bids; + } // associate bidRequests; assuming ads matches bidRequest + + + var associatedBidRequest = Array.isArray(bidRequest) ? bidRequest[i] : bidRequest; + + if (associatedBidRequest && _typeof(associatedBidRequest) === 'object') { + var bid = { + requestId: associatedBidRequest.bidId, + currency: 'USD', + creativeId: ad.creative_id || "".concat(ad.network || '', "-").concat(ad.advertiser || ''), + cpm: ad.cpm || 0, + dealId: ad.deal, + ttl: 300, + // 5 minutes + netRevenue: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('rubicon.netRevenue') !== false, + // If anything other than false, netRev is true + rubicon: { + advertiserId: ad.advertiser, + networkId: ad.network + }, + meta: { + advertiserId: ad.advertiser, + networkId: ad.network + } + }; + + if (ad.creative_type) { + bid.mediaType = ad.creative_type; + } + + if (ad.creative_type === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]) { + bid.width = associatedBidRequest.params.video.playerWidth; + bid.height = associatedBidRequest.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': associatedBidRequest.adUnitCode + }); + bids.push(bid); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Rubicon: bidRequest undefined at index position:".concat(i), bidRequest, responseObj); + } + + return bids; + }, []).sort(function (adA, adB) { + return (adB.cpm || 0.0) - (adA.cpm || 0.0); + }); + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, uspConsent) { + if (!hasSynced && syncOptions.iframeEnabled) { + // data is only assigned if params are available to pass to SYNC_ENDPOINT + var params = ''; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + // add 'gdpr' only if 'gdprApplies' is defined + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += "?gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + params += "?gdpr_consent=".concat(gdprConsent.consentString); + } + } + + if (uspConsent) { + params += "".concat(params ? '&' : '?', "us_privacy=").concat(encodeURIComponent(uspConsent)); + } + + hasSynced = true; + return { + type: 'iframe', + url: SYNC_ENDPOINT + params + }; + } + }, + + /** + * Covert bid param types for S2S + * @param {Object} params bid params + * @param {Boolean} isOpenRtb boolean to check openrtb2 protocol + * @return {Object} params bid params + */ + transformBidParams: function transformBidParams(params, isOpenRtb) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["convertTypes"]({ + 'accountId': 'number', + 'siteId': 'number', + 'zoneId': 'number' + }, params); + } +}; + +function _getScreenResolution() { + return [window.screen.width, window.screen.height].join('x'); +} + +function _getDigiTrustQueryParams() { + var _digiTrustQueryParams; + + var bidRequest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var endpointName = arguments.length > 1 ? arguments[1] : undefined; + + if (!endpointName || !DIGITRUST_PROP_NAMES[endpointName]) { + return null; + } + + var propNames = DIGITRUST_PROP_NAMES[endpointName]; + + function getDigiTrustId() { + var bidRequestDigitrust = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'userId.digitrustid.data'); + + if (bidRequestDigitrust) { + return bidRequestDigitrust; + } + + var digiTrustUser = window.DigiTrust && (__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* 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; + } + + var digiTrustQueryParams = (_digiTrustQueryParams = {}, _defineProperty(_digiTrustQueryParams, propNames.id, digiTrustId.id), _defineProperty(_digiTrustQueryParams, propNames.keyv, digiTrustId.keyv), _digiTrustQueryParams); + + if (propNames.pref) { + digiTrustQueryParams[propNames.pref] = 0; + } + + return digiTrustQueryParams; +} +/** + * @param {BidRequest} bidRequest + * @param bidderRequest + * @returns {string} + */ + + +function _getPageUrl(bidRequest, bidderRequest) { + var pageUrl = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('pageUrl'); + + if (bidRequest.params.referrer) { + pageUrl = bidRequest.params.referrer; + } else if (!pageUrl) { + pageUrl = bidderRequest.refererInfo.referer; + } + + return bidRequest.params.secure ? pageUrl.replace(/^http:/i, 'https:') : pageUrl; +} + +function _renderCreative(script, impId) { + return "\n\n\n\n
\n\n
\n\n"); +} + +function parseSizes(bid, mediaType) { + var params = bid.params; + + if (mediaType === 'video') { + var size = []; + + if (params.video && params.video.playerWidth && params.video.playerHeight) { + size = [params.video.playerWidth, params.video.playerHeight]; + } else if (Array.isArray(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize')) && bid.mediaTypes.video.playerSize.length === 1) { + size = bid.mediaTypes.video.playerSize[0]; + } 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; + } // deprecated: temp legacy support + + + var sizes = []; + + if (Array.isArray(params.sizes)) { + sizes = params.sizes; + } else if (typeof __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') !== 'undefined') { + sizes = mapSizes(bid.mediaTypes.banner.sizes); + } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) { + sizes = mapSizes(bid.sizes); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Rubicon: no sizes are setup or found'); + } + + return masSizeOrdering(sizes); +} +/** + * @param {Object} data + * @param bidRequest + * @param bidderRequest + */ + + +function appendSiteAppDevice(data, bidRequest, bidderRequest) { + if (!data) return; // ORTB specifies app OR site + + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app')) === 'object') { + data.app = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('app'); + } else { + data.site = { + page: _getPageUrl(bidRequest, bidderRequest) + }; + } + + if (_typeof(__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device')) === 'object') { + data.device = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('device'); + } // Add language to site and device objects if there + + + if (bidRequest.params.video.language) { + ['site', 'device'].forEach(function (param) { + if (data[param]) { + data[param].content = _extends({ + language: bidRequest.params.video.language + }, data[param].content); + } + }); + } +} +/** + * @param {Object} data + * @param {BidRequest} bidRequest + */ + + +function addVideoParameters(data, bidRequest) { + if (_typeof(data.imp[0].video) === 'object' && data.imp[0].video.skip === undefined) { + data.imp[0].video.skip = bidRequest.params.video.skip; + } + + if (_typeof(data.imp[0].video) === 'object' && data.imp[0].video.skipafter === undefined) { + data.imp[0].video.skipafter = bidRequest.params.video.skipdelay; + } // video.pos can already be specified by adunit.mediatypes.video.pos. + // but if not, it might be specified in the params + + + if (_typeof(data.imp[0].video) === 'object' && data.imp[0].video.pos === undefined) { + if (bidRequest.params.position === 'atf') { + data.imp[0].video.pos = 1; + } else if (bidRequest.params.position === 'btf') { + data.imp[0].video.pos = 3; + } + } + + var size = parseSizes(bidRequest, 'video'); + data.imp[0].video.w = size[0]; + data.imp[0].video.h = size[1]; +} +/** + * @param sizes + * @returns {*} + */ + + +function mapSizes(sizes) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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; + }, []); +} +/** + * Test if bid has mediaType or mediaTypes set for video. + * Also makes sure the video object is present in the rubicon bidder params + * @param {BidRequest} bidRequest + * @returns {boolean} + */ + + +function hasVideoMediaType(bidRequest) { + if (_typeof(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'params.video')) !== 'object') { + return false; + } + + return typeof __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */])) !== 'undefined'; +} +/** + * Determine bidRequest mediaType + * @param bid the bid to test + * @param log whether we should log errors/warnings for invalid bids + * @returns {string|undefined} Returns 'video' or 'banner' if resolves to a type, or undefined otherwise (invalid). + */ + +function bidType(bid) { + var log = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + // Is it considered video ad unit by rubicon + if (hasVideoMediaType(bid)) { + // Removed legacy mediaType support. new way using mediaTypes.video object is now required + // We require either context as instream or outstream + if (['outstream', 'instream'].indexOf(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], ".context"))) === -1) { + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: mediaTypes.video.context must be outstream or instream'); + } + + return; + } // we require playerWidth and playerHeight to come from one of params.playerWidth/playerHeight or mediaTypes.video.playerSize or adUnit.sizes + + + if (parseSizes(bid, 'video').length < 2) { + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: could not determine the playerSize of the video'); + } + + return; + } + + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('Rubicon: making video request for adUnit', bid.adUnitCode); + } + + return 'video'; + } else { + // we require banner sizes to come from one of params.sizes or mediaTypes.banner.sizes or adUnit.sizes, in that order + // if we cannot determine them, we reject it! + if (parseSizes(bid, 'banner').length === 0) { + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: could not determine the sizes for banner request'); + } + + return; + } // everything looks good for banner so lets do it + + + if (log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('Rubicon: making banner request for adUnit', bid.adUnitCode); + } + + return 'banner'; + } +} + +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; + }); +} +function determineRubiconVideoSizeId(bid) { + // If we have size_id in the bid then use it + var rubiconSizeId = parseInt(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.size_id')); + + if (!isNaN(rubiconSizeId)) { + return rubiconSizeId; + } // otherwise 203 for outstream and 201 for instream + // When this function is used we know it has to be one of outstream or instream + + + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], ".context")) === 'outstream' ? 203 : 201; +} +/** + * @param {PrebidConfig} config + * @returns {{ranges: {ranges: Object[]}}} + */ + +function getPriceGranularity(config) { + return { + ranges: { + low: [{ + max: 5.00, + increment: 0.50 + }], + medium: [{ + max: 20.00, + increment: 0.10 + }], + high: [{ + max: 20.00, + increment: 0.01 + }], + auto: [{ + max: 5.00, + increment: 0.05 + }, { + min: 5.00, + max: 10.00, + increment: 0.10 + }, { + min: 10.00, + max: 20.00, + increment: 0.50 + }], + dense: [{ + max: 3.00, + increment: 0.01 + }, { + min: 3.00, + max: 8.00, + increment: 0.05 + }, { + min: 8.00, + max: 20.00, + increment: 0.50 + }], + custom: config.getConfig('customPriceBucket') && config.getConfig('customPriceBucket').buckets + }[config.getConfig('priceGranularity')] + }; +} // Function to validate the required video params + +function hasValidVideoParams(bid) { + var isValid = true; // incase future javascript changes the string represenation of the array or number classes! + + var arrayType = Object.prototype.toString.call([]); + var numberType = Object.prototype.toString.call(0); // required params and their associated object type + + var requiredParams = { + mimes: arrayType, + protocols: arrayType, + maxduration: numberType, + linearity: numberType, + api: arrayType + }; // loop through each param and verify it has the correct + + Object.keys(requiredParams).forEach(function (param) { + if (Object.prototype.toString.call(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.' + param)) !== requiredParams[param]) { + isValid = false; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: mediaTypes.video.' + param + ' is required and must be of type: ' + requiredParams[param]); + } + }); + return isValid; +} +/** + * Make sure the required params are present + * @param {Object} schain + * @param {Bool} + */ + +function hasValidSupplyChainParams(schain) { + var isValid = false; + var requiredFields = ['asi', 'sid', 'hp']; + if (!schain.nodes) return isValid; + isValid = schain.nodes.reduce(function (status, node) { + if (!status) return status; + return requiredFields.every(function (field) { + return node[field]; + }); + }, true); + if (!isValid) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Rubicon: required schain params missing'); + return isValid; +} +/** + * Creates a URL key value param, encoding the + * param unless the key is schain + * @param {String} key + * @param {String} param + * @returns {String} + */ + +function encodeParam(key, param) { + if (key === 'rp_schain') return "rp_schain=".concat(param); + return "".concat(key, "=").concat(encodeURIComponent(param)); +} +/** + * split array into multiple arrays of defined size + * @param {Array} array + * @param {number} size + * @returns {Array} + */ + +function partitionArray(array, size) { + return array.map(function (e, i) { + return i % size === 0 ? array.slice(i, i + size) : null; + }).filter(function (e) { + return e; + }); +} + +var hasSynced = false; +function resetUserSync() { + hasSynced = false; +} +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[664]); \ No newline at end of file diff --git a/build/dist/s2sTesting.js b/build/dist/s2sTesting.js new file mode 100644 index 00000000000..068ba0b7c90 --- /dev/null +++ b/build/dist/s2sTesting.js @@ -0,0 +1,129 @@ +pbjsChunk([115],{ + +/***/ 666: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(667); + + +/***/ }), + +/***/ 667: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __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 s2sTesting = {}; +var SERVER = 'server'; +var CLIENT = 'client'; +s2sTesting.SERVER = SERVER; +s2sTesting.CLIENT = CLIENT; +var testing = false; // whether testing is turned on + +var bidSource = {}; // store bidder sources determined from s2sConfing bidderControl + +s2sTesting.globalRand = Math.random(); // if 10% of bidderA and 10% of bidderB should be server-side, make it the same 10% +// load s2sConfig + +__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('s2sConfig', function (config) { + testing = config.s2sConfig && config.s2sConfig.testing; + s2sTesting.calculateBidSources(config.s2sConfig); +}); + +s2sTesting.getSourceBidderMap = function () { + 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 || s2sTesting.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 + */ + + +s2sTesting.calculateBidSources = function () { + 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] = s2sTesting.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 + */ + + +s2sTesting.getSource = function () { + 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 = s2sTesting.globalRand * 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 + + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["setS2STestingModule"])(s2sTesting); +/* harmony default export */ __webpack_exports__["default"] = (s2sTesting); + +/***/ }) + +},[666]); \ No newline at end of file diff --git a/build/dist/saambaaBidAdapter.js b/build/dist/saambaaBidAdapter.js new file mode 100644 index 00000000000..c1bccff79c9 --- /dev/null +++ b/build/dist/saambaaBidAdapter.js @@ -0,0 +1,498 @@ +pbjsChunk([114],{ + +/***/ 668: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(669); + + +/***/ }), + +/***/ 669: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_ENDPOINT", function() { return VIDEO_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BANNER_ENDPOINT", function() { return BANNER_ENDPOINT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OUTSTREAM_SRC", function() { return OUTSTREAM_SRC; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VIDEO_TARGETING", function() { return VIDEO_TARGETING; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_MIMES", function() { return DEFAULT_MIMES; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + +var ADAPTER_VERSION = '1.0'; +var BIDDER_CODE = 'saambaa'; +var VIDEO_ENDPOINT = 'https://nep.advangelists.com/xp/get?pubid='; +var BANNER_ENDPOINT = 'https://nep.advangelists.com/xp/get?pubid='; +var OUTSTREAM_SRC = 'https://player-cdn.beachfrontmedia.com/playerapi/loader/outstream.js'; +var VIDEO_TARGETING = ['mimes', 'playbackmethod', 'maxduration', 'skip']; +var DEFAULT_MIMES = ['video/mp4', 'application/javascript']; +var pubid = ''; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bidRequest) { + if (typeof bidRequest != 'undefined') { + if (bidRequest.bidder !== BIDDER_CODE && typeof bidRequest.params === 'undefined') { + return false; + } + + if (bidRequest === '' || bidRequest.params.placement === '' || bidRequest.params.pubid === '') { + return false; + } + + return true; + } else { + return false; + } + }, + buildRequests: function buildRequests(bids, bidderRequest) { + var requests = []; + var videoBids = bids.filter(function (bid) { + return isVideoBidValid(bid); + }); + var bannerBids = bids.filter(function (bid) { + return isBannerBidValid(bid); + }); + videoBids.forEach(function (bid) { + pubid = getVideoBidParam(bid, 'pubid'); + requests.push({ + method: 'POST', + url: VIDEO_ENDPOINT + pubid, + data: createVideoRequestData(bid, bidderRequest), + bidRequest: bid + }); + }); + bannerBids.forEach(function (bid) { + pubid = getBannerBidParam(bid, 'pubid'); + requests.push({ + method: 'POST', + url: BANNER_ENDPOINT + pubid, + data: createBannerRequestData(bid, bidderRequest), + bidRequest: bid + }); + }); + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, _ref) { + var bidRequest = _ref.bidRequest; + var response = serverResponse.body; + + if (response !== null && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](response) == false) { + if (isVideoBid(bidRequest)) { + var bidResponse = { + 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, + ttl: response.seatbid[0].bid[0].ttl || 60, + creativeId: response.seatbid[0].bid[0].crid, + currency: response.cur, + meta: { + 'advertiserDomains': response.seatbid[0].bid[0].adomain + }, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], + netRevenue: true + }; + + if (response.seatbid[0].bid[0].adm) { + bidResponse.vastXml = response.seatbid[0].bid[0].adm; + bidResponse.adResponse = { + content: response.seatbid[0].bid[0].adm + }; + } else { + bidResponse.vastUrl = response.seatbid[0].bid[0].nurl; + } + + return bidResponse; + } else { + 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, + meta: { + 'advertiserDomains': response.seatbid[0].bid[0].adomain + }, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], + netRevenue: true + }; + } + } + } +}; + +function isBannerBid(bid) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner') || !isVideoBid(bid); +} + +function isVideoBid(bid) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} + +function isVideoBidValid(bid) { + return isVideoBid(bid) && getVideoBidParam(bid, 'pubid') && getVideoBidParam(bid, 'placement'); +} + +function isBannerBidValid(bid) { + return isBannerBid(bid) && getBannerBidParam(bid, 'pubid') && getBannerBidParam(bid, 'placement'); +} + +function getVideoBidParam(bid, key) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.' + key) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.' + key); +} + +function getBannerBidParam(bid, key) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.banner.' + key) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.' + key); +} + +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 findAndFillParam(o, key, value) { + try { + if (typeof value === 'function') { + o[key] = value(); + } else { + o[key] = value; + } + } catch (ex) {} +} + +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 = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(clientStrings, function (cs) { + return cs.r.test(navigator.userAgent); + }); + return cs ? cs.s : 'unknown'; +} + +function getFirstSize(sizes) { + return sizes && sizes.length ? sizes[0] : { + w: undefined, + h: undefined + }; +} + +function parseSizes(sizes) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](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 getVideoSizes(bid) { + return parseSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize') || bid.sizes); +} + +function getBannerSizes(bid) { + return parseSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes') || bid.sizes); +} + +function getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return ''; + } +} + +function getVideoTargetingParams(bid) { + return Object.keys(Object(bid.params.video)).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).reduce(function (obj, param) { + obj[param] = bid.params.video[param]; + return obj; + }, {}); +} + +function createVideoRequestData(bid, bidderRequest) { + var topLocation = getTopWindowLocation(bidderRequest); + var topReferrer = getTopWindowReferrer(); // if size is explicitly given via adapter params + + var paramSize = getVideoBidParam(bid, 'size'); + var sizes = []; + + if (typeof paramSize !== 'undefined' && paramSize != '') { + sizes = parseSizes(paramSize); + } else { + sizes = getVideoSizes(bid); + } + + var firstSize = getFirstSize(sizes); + var video = getVideoTargetingParams(bid); + var o = { + 'device': { + 'langauge': global.navigator.language.split('-')[0], + 'dnt': global.navigator.doNotTrack === 1 ? 1 : 0, + 'devicetype': isMobile() ? 4 : isConnectedTV() ? 3 : 2, + 'js': 1, + 'os': getOsVersion() + }, + 'at': 2, + 'site': {}, + 'tmax': 3000, + 'cur': ['USD'], + 'id': bid.bidId, + 'imp': [], + 'regs': { + 'ext': {} + }, + 'user': { + 'ext': {} + } + }; + o.site['page'] = topLocation.href; + o.site['domain'] = topLocation.hostname; + o.site['search'] = topLocation.search; + o.site['domain'] = topLocation.hostname; + o.site['ref'] = topReferrer; + o.site['mobile'] = isMobile() ? 1 : 0; + var secure = topLocation.protocol.indexOf('https') === 0 ? 1 : 0; + o.device['dnt'] = getDoNotTrack() ? 1 : 0; + findAndFillParam(o.site, 'name', function () { + return global.top.document.title; + }); + findAndFillParam(o.device, 'h', function () { + return global.screen.height; + }); + findAndFillParam(o.device, 'w', function () { + return global.screen.width; + }); + var placement = getVideoBidParam(bid, 'placement'); + var floor = getVideoBidParam(bid, 'floor'); + + if (floor == null) { + floor = 0.5; + } + + for (var j = 0; j < sizes.length; j++) { + o.imp.push({ + 'id': '' + j, + 'displaymanager': '' + BIDDER_CODE, + 'displaymanagerver': '' + ADAPTER_VERSION, + 'tagId': placement, + 'bidfloor': floor, + 'bidfloorcur': 'USD', + 'secure': secure, + 'video': _extends({ + 'id': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"](), + 'pos': 0, + 'w': firstSize.w, + 'h': firstSize.h, + 'mimes': DEFAULT_MIMES + }, video) + }); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + var _bidderRequest$gdprCo = bidderRequest.gdprConsent, + gdprApplies = _bidderRequest$gdprCo.gdprApplies, + consentString = _bidderRequest$gdprCo.consentString; + o.regs.ext = { + 'gdpr': gdprApplies ? 1 : 0 + }; + o.user.ext = { + 'consent': consentString + }; + } + + return o; +} + +function getTopWindowLocation(bidderRequest) { + var url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('pageUrl') || url, { + decodeSearchAsString: true + }); +} + +function createBannerRequestData(bid, bidderRequest) { + var topLocation = getTopWindowLocation(bidderRequest); + var topReferrer = getTopWindowReferrer(); // if size is explicitly given via adapter params + + var paramSize = getBannerBidParam(bid, 'size'); + var sizes = []; + + if (typeof paramSize !== 'undefined' && paramSize != '') { + sizes = parseSizes(paramSize); + } else { + sizes = getBannerSizes(bid); + } + + var o = { + 'device': { + 'langauge': global.navigator.language.split('-')[0], + 'dnt': global.navigator.doNotTrack === 1 ? 1 : 0, + 'devicetype': isMobile() ? 4 : isConnectedTV() ? 3 : 2, + 'js': 1 + }, + 'at': 2, + 'site': {}, + 'tmax': 3000, + 'cur': ['USD'], + 'id': bid.bidId, + 'imp': [], + 'regs': { + 'ext': {} + }, + 'user': { + 'ext': {} + } + }; + o.site['page'] = topLocation.href; + o.site['domain'] = topLocation.hostname; + o.site['search'] = topLocation.search; + o.site['domain'] = topLocation.hostname; + o.site['ref'] = topReferrer; + o.site['mobile'] = isMobile() ? 1 : 0; + var secure = topLocation.protocol.indexOf('https') === 0 ? 1 : 0; + o.device['dnt'] = getDoNotTrack() ? 1 : 0; + findAndFillParam(o.site, 'name', function () { + return global.top.document.title; + }); + findAndFillParam(o.device, 'h', function () { + return global.screen.height; + }); + findAndFillParam(o.device, 'w', function () { + return global.screen.width; + }); + var placement = getBannerBidParam(bid, 'placement'); + + for (var j = 0; j < sizes.length; j++) { + var size = sizes[j]; + var floor = getBannerBidParam(bid, 'floor'); + + if (floor == null) { + floor = 0.1; + } + + o.imp.push({ + 'id': '' + j, + 'displaymanager': '' + BIDDER_CODE, + 'displaymanagerver': '' + ADAPTER_VERSION, + 'tagId': placement, + 'bidfloor': floor, + 'bidfloorcur': 'USD', + 'secure': secure, + 'banner': { + 'id': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"](), + 'pos': 0, + 'w': size['w'], + 'h': size['h'] + } + }); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + var _bidderRequest$gdprCo2 = bidderRequest.gdprConsent, + gdprApplies = _bidderRequest$gdprCo2.gdprApplies, + consentString = _bidderRequest$gdprCo2.consentString; + o.regs.ext = { + 'gdpr': gdprApplies ? 1 : 0 + }; + o.user.ext = { + 'consent': consentString + }; + } + + return o; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(33))) + +/***/ }) + +},[668]); \ No newline at end of file diff --git a/build/dist/scaleableAnalyticsAdapter.js b/build/dist/scaleableAnalyticsAdapter.js new file mode 100644 index 00000000000..cedcb00eaca --- /dev/null +++ b/build/dist/scaleableAnalyticsAdapter.js @@ -0,0 +1,514 @@ +pbjsChunk([14],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 670: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(671); + + +/***/ }), + +/***/ 671: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/* COPYRIGHT SCALEABLE LLC 2019 */ + + + + + // Object.entries polyfill + +var entries = Object.entries || function (obj) { + var ownProps = Object.keys(obj); + var i = ownProps.length; + var resArray = new Array(i); // preallocate the Array + + while (i--) { + resArray[i] = [ownProps[i], obj[ownProps[i]]]; + } + + return resArray; +}; + +var BID_TIMEOUT = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_TIMEOUT; +var AUCTION_INIT = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_INIT; +var BID_WON = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_WON; +var AUCTION_END = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_END; +var URL = 'https://auction.scaleable.ai/'; +var ANALYTICS_TYPE = 'endpoint'; +var auctionData = {}; + +var scaleableAnalytics = _extends({}, Object(__WEBPACK_IMPORTED_MODULE_2__src_AnalyticsAdapter_js__["a" /* default */])({ + URL: URL, + ANALYTICS_TYPE: ANALYTICS_TYPE +}), { + // Override AnalyticsAdapter functions by supplying custom methods + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + switch (eventType) { + case AUCTION_INIT: + onAuctionInit(args); + break; + + case AUCTION_END: + onAuctionEnd(args); + break; + + case BID_WON: + onBidWon(args); + break; + + case BID_TIMEOUT: + onBidTimeout(args); + break; + + default: + break; + } + } +}); + +scaleableAnalytics.config = {}; +scaleableAnalytics.originEnableAnalytics = scaleableAnalytics.enableAnalytics; + +scaleableAnalytics.enableAnalytics = function (config) { + scaleableAnalytics.config = config; + scaleableAnalytics.originEnableAnalytics(config); + + scaleableAnalytics.enableAnalytics = function _enable() { + return __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logMessage"]("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; +}; + +scaleableAnalytics.getAuctionData = function () { + return auctionData; +}; + +var sendDataToServer = function sendDataToServer(data) { + return Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(URL, function () {}, JSON.stringify(data)); +}; // Track auction initiated + + +var onAuctionInit = function onAuctionInit(args) { + var config = scaleableAnalytics.config || { + options: {} + }; + var adunitObj = {}; + var adunits = []; // Loop through adunit codes first + + args.adUnitCodes.forEach(function (code) { + adunitObj[code] = [{ + bidder: 'scaleable_adunit_request' + }]; + }); // Loop through bidder requests and bids + + args.bidderRequests.forEach(function (bidderObj) { + bidderObj.bids.forEach(function (bidObj) { + adunitObj[bidObj.adUnitCode].push({ + bidder: bidObj.bidder, + params: bidObj.params + }); + }); + }); + entries(adunitObj).forEach(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + adunitCode = _ref3[0], + bidRequests = _ref3[1]; + + adunits.push({ + code: adunitCode, + bidRequests: bidRequests + }); + }); + var data = { + event: 'request', + site: config.options.site, + adunits: adunits + }; + sendDataToServer(data); +}; // Handle all events besides requests and wins + + +var onAuctionEnd = function onAuctionEnd(args) { + var config = scaleableAnalytics.config || { + options: {} + }; + var adunitObj = {}; + var adunits = []; // Add Bids Received + + args.bidsReceived.forEach(function (bidObj) { + if (!adunitObj[bidObj.adUnitCode]) { + adunitObj[bidObj.adUnitCode] = []; + } + + adunitObj[bidObj.adUnitCode].push({ + bidder: bidObj.bidderCode || bidObj.bidder, + cpm: bidObj.cpm, + currency: bidObj.currency, + dealId: bidObj.dealId, + type: bidObj.mediaType, + ttr: bidObj.timeToRespond, + size: bidObj.size + }); + }); // Add in other data (timeouts) as we push to adunits + + entries(adunitObj).forEach(function (_ref4) { + var _ref5 = _slicedToArray(_ref4, 2), + adunitCode = _ref5[0], + bidsReceived = _ref5[1]; + + var bidData = bidsReceived.concat(auctionData[adunitCode] || []); + adunits.push({ + code: adunitCode, + bidData: bidData + }); + delete auctionData[adunitCode]; + }); // Add in any missed auction data + + entries(auctionData).forEach(function (_ref6) { + var _ref7 = _slicedToArray(_ref6, 2), + adunitCode = _ref7[0], + bidData = _ref7[1]; + + adunits.push({ + code: adunitCode, + bidData: bidData + }); + }); + var data = { + event: 'bids', + site: config.options.site, + adunits: adunits + }; + + if (adunits.length) { + sendDataToServer(data); + } // Reset auctionData + + + auctionData = {}; +}; // Bid Win Events occur after auction end + + +var onBidWon = function onBidWon(args) { + var config = scaleableAnalytics.config || { + options: {} + }; + var data = { + event: 'win', + site: config.options.site, + adunit: args.adUnitCode, + code: args.bidderCode, + cpm: args.cpm, + ttr: args.timeToRespond, + params: args.params + }; + sendDataToServer(data); +}; + +var onBidTimeout = function onBidTimeout(args) { + args.forEach(function (currObj) { + if (!auctionData[currObj.adUnitCode]) { + auctionData[currObj.adUnitCode] = []; + } + + auctionData[currObj.adUnitCode].push({ + timeouts: 1, + bidder: currObj.bidder + }); + }); +}; + +__WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: scaleableAnalytics, + code: 'scaleable' +}); +/* harmony default export */ __webpack_exports__["default"] = (scaleableAnalytics); +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(33))) + +/***/ }) + +},[670]); \ No newline at end of file diff --git a/build/dist/schain.js b/build/dist/schain.js new file mode 100644 index 00000000000..3c559c83e35 --- /dev/null +++ b/build/dist/schain.js @@ -0,0 +1,210 @@ +pbjsChunk([113],{ + +/***/ 672: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(673); + + +/***/ }), + +/***/ 673: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["isSchainObjectValid"] = isSchainObjectValid; +/* harmony export (immutable) */ __webpack_exports__["isValidSchainConfig"] = isValidSchainConfig; +/* harmony export (immutable) */ __webpack_exports__["makeBidRequestsHook"] = makeBidRequestsHook; +/* harmony export (immutable) */ __webpack_exports__["init"] = init; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md + +var schainErrorPrefix = 'Invalid schain object found: '; +var shouldBeAString = ' should be a string'; +var shouldBeAnInteger = ' should be an Integer'; +var shouldBeAnObject = ' should be an object'; +var shouldBeAnArray = ' should be an Array'; +var MODE = { + STRICT: 'strict', + RELAXED: 'relaxed', + OFF: 'off' +}; +var MODES = []; // an array of modes + +Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_each"])(MODE, function (mode) { + return MODES.push(mode); +}); // validate the supply chain object + + +function isSchainObjectValid(schainObject, returnOnError) { + var failPrefix = 'Detected something wrong within an schain config:'; + var failMsg = ''; + + function appendFailMsg(msg) { + failMsg += '\n' + msg; + } + + function printFailMsg() { + if (returnOnError === true) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"])(failPrefix, schainObject, failMsg); + } else { + Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logWarn"])(failPrefix, schainObject, failMsg); + } + } + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"])(schainObject)) { + appendFailMsg("schain.config" + shouldBeAnObject); + printFailMsg(); + if (returnOnError) return false; + } // complete: Integer + + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isNumber"])(schainObject.complete) || !Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isInteger"])(schainObject.complete)) { + appendFailMsg("schain.config.complete" + shouldBeAnInteger); + } // ver: String + + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])(schainObject.ver)) { + appendFailMsg("schain.config.ver" + shouldBeAString); + } // ext: Object [optional] + + + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["hasOwn"])(schainObject, 'ext')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"])(schainObject.ext)) { + appendFailMsg("schain.config.ext" + shouldBeAnObject); + } + } // nodes: Array of objects + + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isArray"])(schainObject.nodes)) { + appendFailMsg("schain.config.nodes" + shouldBeAnArray); + printFailMsg(); + if (returnOnError) return false; + } else { + schainObject.nodes.forEach(function (node, index) { + // asi: String + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])(node.asi)) { + appendFailMsg("schain.config.nodes[".concat(index, "].asi") + shouldBeAString); + } // sid: String + + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])(node.sid)) { + appendFailMsg("schain.config.nodes[".concat(index, "].sid") + shouldBeAString); + } // hp: Integer + + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isNumber"])(node.hp) || !Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isInteger"])(node.hp)) { + appendFailMsg("schain.config.nodes[".concat(index, "].hp") + shouldBeAnInteger); + } // rid: String [Optional] + + + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["hasOwn"])(node, 'rid')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])(node.rid)) { + appendFailMsg("schain.config.nodes[".concat(index, "].rid") + shouldBeAString); + } + } // name: String [Optional] + + + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["hasOwn"])(node, 'name')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])(node.name)) { + appendFailMsg("schain.config.nodes[".concat(index, "].name") + shouldBeAString); + } + } // domain: String [Optional] + + + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["hasOwn"])(node, 'domain')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])(node.domain)) { + appendFailMsg("schain.config.nodes[".concat(index, "].domain") + shouldBeAString); + } + } // ext: Object [Optional] + + + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["hasOwn"])(node, 'ext')) { + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"])(node.ext)) { + appendFailMsg("schain.config.nodes[".concat(index, "].ext") + shouldBeAnObject); + } + } + }); + } + + if (failMsg.length > 0) { + printFailMsg(); + + if (returnOnError) { + return false; + } + } + + return true; +} +function isValidSchainConfig(schainObject) { + if (schainObject === undefined) { + return false; + } + + if (!Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isPlainObject"])(schainObject)) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"])(schainErrorPrefix + 'the following schain config will not be used as schain is not an object.', schainObject); + return false; + } + + return true; +} + +function resolveSchainConfig(schainObject, bidder) { + var mode = MODE.STRICT; + + if (isValidSchainConfig(schainObject)) { + if (Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isStr"])(schainObject.validation) && MODES.indexOf(schainObject.validation) != -1) { + mode = schainObject.validation; + } + + if (mode === MODE.OFF) { + // no need to validate + return schainObject.config; + } else { + // if strict mode and config is invalid, reject config + throw error; otherwise allow config to go through + if (isSchainObjectValid(schainObject.config, !!(mode === MODE.STRICT))) { + return schainObject.config; + } else { + Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logError"])(schainErrorPrefix + "due to the 'strict' validation setting, this schain config will not be passed to bidder '".concat(bidder, "'. See above error for details.")); + } + } + } + + return null; +} + +function makeBidRequestsHook(fn, bidderRequests) { + function getSchainForBidder(bidder) { + var bidderSchain = bidderConfigs[bidder] && bidderConfigs[bidder].schain; + return bidderSchain || globalSchainConfig; + } + + var globalSchainConfig = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('schain'); + var bidderConfigs = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getBidderConfig(); + bidderRequests.forEach(function (bidderRequest) { + var bidder = bidderRequest.bidderCode; + var schainConfig = getSchainForBidder(bidder); + bidderRequest.bids.forEach(function (bid) { + var result = resolveSchainConfig(schainConfig, bidder); + + if (result) { + bid.schain = result; + } + }); + }); + fn(bidderRequests); +} +function init() { + __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].makeBidRequests.after(makeBidRequestsHook); +} +init(); + +/***/ }) + +},[672]); \ No newline at end of file diff --git a/build/dist/seedingAllianceBidAdapter.js b/build/dist/seedingAllianceBidAdapter.js new file mode 100644 index 00000000000..4605d97ddf7 --- /dev/null +++ b/build/dist/seedingAllianceBidAdapter.js @@ -0,0 +1,255 @@ +pbjsChunk([112],{ + +/***/ 674: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(675); + + +/***/ }), + +/***/ 675: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +// jshint esversion: 6, es3: false, node: true + + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + +var BIDDER_CODE = 'seedingAlliance'; +var DEFAULT_CUR = 'EUR'; +var ENDPOINT_URL = 'https://b.nativendo.de/cds/rtb/bid?format=openrtb2.5&ssp=nativendo'; +var NATIVE_ASSET_IDS = { + 0: 'title', + 1: 'body', + 2: 'sponsoredBy', + 3: 'image', + 4: 'cta', + 5: 'icon' +}; +var NATIVE_PARAMS = { + title: { + id: 0, + name: 'title' + }, + body: { + id: 1, + name: 'data', + type: 2 + }, + sponsoredBy: { + id: 2, + name: 'data', + type: 1 + }, + image: { + id: 3, + type: 3, + name: 'img' + }, + cta: { + id: 4, + type: 12, + name: 'data' + }, + icon: { + id: 5, + type: 1, + name: 'img' + } +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.adUnitId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net'; + var tid = validBidRequests[0].transactionId; + var cur = [__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency') || DEFAULT_CUR]; + var url = bidderRequest.refererInfo.referer; + var imp = validBidRequests.map(function (bid, id) { + var assets = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["_map"](bid.nativeParams, function (bidParams, key) { + var props = NATIVE_PARAMS[key]; + var asset = { + required: bidParams.required & 1 + }; + + if (props) { + asset.id = props.id; + var w, h; + + if (bidParams.sizes) { + w = bidParams.sizes[0]; + h = bidParams.sizes[1]; + } + + asset[props.name] = { + len: bidParams.len, + type: props.type, + w: w, + h: h + }; + return asset; + } + }).filter(Boolean); + + if (bid.params.url) { + url = bid.params.url; + } + + return { + id: String(id + 1), + tagid: bid.params.adUnitId, + tid: tid, + pt: pt, + native: { + request: { + assets: assets + } + } + }; + }); + var request = { + id: bidderRequest.auctionId, + site: { + page: url + }, + device: { + ua: navigator.userAgent + }, + cur: cur, + imp: imp, + user: {}, + regs: { + ext: { + gdpr: 0 + } + } + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepSetValue"](request, 'regs.ext.gdpr', typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' && bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } + + return { + method: 'POST', + url: ENDPOINT_URL, + data: JSON.stringify(request), + options: { + contentType: 'application/json' + }, + bids: validBidRequests + }; + }, + interpretResponse: function interpretResponse(serverResponse, _ref) { + var bids = _ref.bids; + + if (__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["isEmpty"](serverResponse.body)) { + return []; + } + + var _serverResponse$body = serverResponse.body, + seatbid = _serverResponse$body.seatbid, + cur = _serverResponse$body.cur; + var bidResponses = flatten(seatbid.map(function (seat) { + return seat.bid; + })).reduce(function (result, bid) { + result[bid.impid - 1] = bid; + return result; + }, []); + return bids.map(function (bid, id) { + var bidResponse = bidResponses[id]; + + if (bidResponse) { + return { + requestId: bid.bidId, + cpm: bidResponse.price, + creativeId: bidResponse.crid, + ttl: 1000, + netRevenue: bid.netRevenue === 'net', + currency: cur, + mediaType: __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */], + bidderCode: BIDDER_CODE, + native: parseNative(bidResponse) + }; + } + }).filter(Boolean); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function parseNative(bid) { + var _bid$adm$native = bid.adm.native, + assets = _bid$adm$native.assets, + link = _bid$adm$native.link, + imptrackers = _bid$adm$native.imptrackers; + link.clicktrackers.forEach(function (clicktracker, index) { + link.clicktrackers[index] = clicktracker.replace(/\$\{AUCTION_PRICE\}/, bid.price); + }); + imptrackers.forEach(function (imptracker, index) { + imptrackers[index] = imptracker.replace(/\$\{AUCTION_PRICE\}/, bid.price); + }); + var result = { + url: link.url, + clickUrl: link.url, + clickTrackers: link.clicktrackers || undefined, + impressionTrackers: imptrackers || undefined + }; + assets.forEach(function (asset) { + var kind = NATIVE_ASSET_IDS[asset.id]; + var content = kind && asset[NATIVE_PARAMS[kind].name]; + + if (content) { + result[kind] = content.text || content.value || { + url: content.url, + width: content.w, + height: content.h + }; + } + }); + return result; +} + +function setOnAny(collection, key) { + for (var i = 0, result; i < collection.length; i++) { + result = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["deepAccess"](collection[i], key); + + if (result) { + return result; + } + } +} + +function flatten(arr) { + var _ref2; + + return (_ref2 = []).concat.apply(_ref2, _toConsumableArray(arr)); +} + +/***/ }) + +},[674]); \ No newline at end of file diff --git a/build/dist/seedtagBidAdapter.js b/build/dist/seedtagBidAdapter.js new file mode 100644 index 00000000000..98be3845e09 --- /dev/null +++ b/build/dist/seedtagBidAdapter.js @@ -0,0 +1,214 @@ +pbjsChunk([111],{ + +/***/ 676: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(677); + + +/***/ }), + +/***/ 677: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["getTimeoutUrl"] = getTimeoutUrl; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +var _mediaTypesMap; + +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 = 'seedtag'; +var SEEDTAG_ALIAS = 'st'; +var SEEDTAG_SSP_ENDPOINT = 'https://s.seedtag.com/c/hb/bid'; +var SEEDTAG_SSP_ONTIMEOUT_ENDPOINT = 'https://s.seedtag.com/se/hb/timeout'; +var mediaTypesMap = (_mediaTypesMap = {}, _defineProperty(_mediaTypesMap, __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], 'display'), _defineProperty(_mediaTypesMap, __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], 'video'), _mediaTypesMap); + +function mapMediaType(seedtagMediaType) { + if (seedtagMediaType === 'display') return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + if (seedtagMediaType === 'video') return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */];else return seedtagMediaType; +} + +function getMediaTypeFromBid(bid) { + return bid.mediaTypes && Object.keys(bid.mediaTypes)[0]; +} + +function hasMandatoryParams(params) { + return !!params.publisherId && !!params.adUnitId && !!params.placement && (params.placement === 'inImage' || params.placement === 'inScreen' || params.placement === 'banner' || params.placement === 'video'); +} + +function hasVideoMandatoryParams(mediaTypes) { + var isVideoInStream = !!mediaTypes.video && mediaTypes.video.context === 'instream'; + var isPlayerSize = !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](mediaTypes, 'video.playerSize') && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](mediaTypes, 'video.playerSize')); + return isVideoInStream && isPlayerSize; +} + +function buildBidRequests(validBidRequests) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](validBidRequests, function (validBidRequest) { + var params = validBidRequest.params; + + var mediaTypes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](Object.keys(validBidRequest.mediaTypes), function (pbjsType) { + return mediaTypesMap[pbjsType]; + }); + + var bidRequest = { + id: validBidRequest.bidId, + transactionId: validBidRequest.transactionId, + sizes: validBidRequest.sizes, + supplyTypes: mediaTypes, + adUnitId: params.adUnitId, + placement: params.placement + }; + + if (params.adPosition) { + bidRequest.adPosition = params.adPosition; + } + + if (params.video) { + bidRequest.videoParams = params.video || {}; + bidRequest.videoParams.w = validBidRequest.mediaTypes.video.playerSize[0][0]; + bidRequest.videoParams.h = validBidRequest.mediaTypes.video.playerSize[0][1]; + } + + return bidRequest; + }); +} + +function buildBid(seedtagBid) { + var mediaType = mapMediaType(seedtagBid.mediaType); + var bid = { + requestId: seedtagBid.bidId, + cpm: seedtagBid.price, + width: seedtagBid.width, + height: seedtagBid.height, + creativeId: seedtagBid.creativeId, + currency: seedtagBid.currency, + netRevenue: true, + mediaType: mediaType, + ttl: seedtagBid.ttl + }; + + if (mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]) { + bid.vastXml = seedtagBid.content; + } else { + bid.ad = seedtagBid.content; + } + + return bid; +} + +function getTimeoutUrl(data) { + var queryParams = ''; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](data) && data[0] && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](data[0].params) && data[0].params[0]) { + var params = data[0].params[0]; + queryParams = '?publisherToken=' + params.publisherId + '&adUnitId=' + params.adUnitId; + } + + return SEEDTAG_SSP_ONTIMEOUT_ENDPOINT + queryParams; +} +var spec = { + code: BIDDER_CODE, + aliases: [SEEDTAG_ALIAS], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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 getMediaTypeFromBid(bid) === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] ? hasMandatoryParams(bid.params) && hasVideoMandatoryParams(bid.mediaTypes) : hasMandatoryParams(bid.params); + }, + + /** + * 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 payload = { + url: bidderRequest.refererInfo.referer, + publisherToken: validBidRequests[0].params.publisherId, + cmp: !!bidderRequest.gdprConsent, + timeout: bidderRequest.timeout, + version: "4.2.0", + bidRequests: buildBidRequests(validBidRequests) + }; + + if (payload.cmp) { + var gdprApplies = bidderRequest.gdprConsent.gdprApplies; + if (gdprApplies !== undefined) payload['ga'] = gdprApplies; + payload['cd'] = bidderRequest.gdprConsent.consentString; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: SEEDTAG_SSP_ENDPOINT, + data: payloadString + }; + }, + + /** + * 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) { + var serverBody = serverResponse.body; + + if (serverBody && serverBody.bids && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverBody.bids)) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](serverBody.bids, function (bid) { + return buildBid(bid); + }); + } else { + return []; + } + }, + + /** + * 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 serverResponse = serverResponses[0]; + + if (syncOptions.iframeEnabled && serverResponse) { + var cookieSyncUrl = serverResponse.body.cookieSync; + return cookieSyncUrl ? [{ + type: 'iframe', + url: cookieSyncUrl + }] : []; + } else { + return []; + } + }, + + /** + * Register bidder specific code, which will execute if bidder timed out after an auction + * @param {data} Containing timeout specific data + */ + onTimeout: function onTimeout(data) { + getTimeoutUrl(data); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](SEEDTAG_SSP_ONTIMEOUT_ENDPOINT); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[676]); \ No newline at end of file diff --git a/build/dist/segmentoBidAdapter.js b/build/dist/segmentoBidAdapter.js new file mode 100644 index 00000000000..1720d5239a7 --- /dev/null +++ b/build/dist/segmentoBidAdapter.js @@ -0,0 +1,102 @@ +pbjsChunk([110],{ + +/***/ 678: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(679); + + +/***/ }), + +/***/ 679: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); + +var BIDDER_CODE = 'segmento'; +var URL = 'https://prebid-bidder.rutarget.ru/bid'; +var SYNC_IFRAME_URL = 'https://tag.rutarget.ru/tag?event=otherPage&check=true&response=syncframe&synconly=true'; +var SYNC_IMAGE_URL = 'https://tag.rutarget.ru/tag?event=otherPage&check=true&synconly=true'; +var RUB = 'RUB'; +var TIME_TO_LIVE = 0; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return Boolean(bid && bid.params && !isNaN(bid.params.placementId)); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var payload = { + places: [], + settings: { + currency: RUB, + referrer: bidderRequest.refererInfo && bidderRequest.refererInfo.referer + } + }; + + for (var i = 0; i < validBidRequests.length; i++) { + var bid = validBidRequests[i]; + payload.places.push({ + id: bid.bidId, + placementId: bid.params.placementId, + sizes: bid.sizes + }); + } + + return { + method: 'POST', + url: URL, + data: payload + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var bids = serverResponse.body && serverResponse.body.bids; + + if (!bids) { + return []; + } + + var bidResponses = []; + + for (var i = 0; i < bids.length; i++) { + var bid = bids[i]; + bidResponses.push({ + requestId: bid.id, + cpm: bid.cpm, + width: bid.size.width, + height: bid.size.height, + creativeId: bid.creativeId, + currency: RUB, + netRevenue: true, + ttl: TIME_TO_LIVE, + adUrl: bid.displayUrl + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: SYNC_IFRAME_URL + }]; + } + + if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: SYNC_IMAGE_URL + }]; + } + + return []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[678]); \ No newline at end of file diff --git a/build/dist/sekindoUMBidAdapter.js b/build/dist/sekindoUMBidAdapter.js new file mode 100644 index 00000000000..d279c933ec4 --- /dev/null +++ b/build/dist/sekindoUMBidAdapter.js @@ -0,0 +1,153 @@ +pbjsChunk([109],{ + +/***/ 680: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(681); + + +/***/ }), + +/***/ 681: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var 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; + + try { + if (window.top == window) { + pubUrl = window.location.href; + } else { + try { + pubUrl = window.top.location.href; + } catch (e2) { + pubUrl = document.referrer; + } + } + } catch (e1) {} + + return validBidRequests.map(function (bidRequest) { + var subId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('subId', bidRequest.params); + var spaceId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('spaceId', bidRequest.params); + var bidfloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidfloor', bidRequest.params); + var protocol = document.location.protocol === 'https:' ? 's' : ''; + var queryString = ''; + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 's', spaceId); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'subId', subId); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'pubUrl', pubUrl); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'hbTId', bidRequest.transactionId); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'hbBidId', bidRequest.bidId); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'hbver', '4'); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'hbcb', '1'); /// legasy + + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'dcpmflr', bidfloor); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'protocol', protocol); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'x', bidRequest.params.width); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'y', bidRequest.params.height); + + if (bidderRequest && bidderRequest.gdprConsent) { + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'gdprConsent', bidderRequest.gdprConsent.consentString); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'gdpr', bidderRequest.gdprConsent.gdprApplies ? '1' : '0'); + } + + if (bidRequest.mediaType === 'video' || _typeof(bidRequest.mediaTypes) == 'object' && _typeof(bidRequest.mediaTypes.video) == 'object') { + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'x', bidRequest.params.playerWidth); + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'y', bidRequest.params.playerHeight); + + if (typeof vid_vastType != 'undefined') { + // eslint-disable-line camelcase + queryString = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](queryString, 'vid_context', bidRequest.mediaTypes.video.context); + } + } + + var endpointUrl = 'https' + '://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) !== '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; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[680]); \ No newline at end of file diff --git a/build/dist/sharedIdSystem.js b/build/dist/sharedIdSystem.js new file mode 100644 index 00000000000..52df1a36c91 --- /dev/null +++ b/build/dist/sharedIdSystem.js @@ -0,0 +1,414 @@ +pbjsChunk([108],{ + +/***/ 682: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(683); + + +/***/ }), + +/***/ 683: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sharedIdSubmodule", function() { return sharedIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/** + * This module adds Shared ID support to the User ID module + * The {@link module:modules/userId} module is required. + * @module modules/sharedIdSystem + * @requires module:modules/userId + */ + + + +var MODULE_NAME = 'sharedId'; +var ID_SVC = 'https://id.sharedid.org/id'; +var DEFAULT_24_HOURS = 86400; +var OPT_OUT_VALUE = '00000000000000000000000000'; // These values should NEVER change. If +// they do, we're no longer making ulids! + +var ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32 + +var ENCODING_LEN = ENCODING.length; +var TIME_MAX = Math.pow(2, 48) - 1; +var TIME_LEN = 10; +var RANDOM_LEN = 16; +var id = factory(); +/** + * Constructs cookie value + * @param value + * @param needsSync + * @returns {string} + */ + +function constructCookieValue(value, needsSync) { + var cookieValue = {}; + cookieValue.id = value; + cookieValue.ts = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"](); + + if (needsSync) { + cookieValue.ns = true; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: cookie Value: ' + JSON.stringify(cookieValue)); + return cookieValue; +} +/** + * Checks if id needs to be synced + * @param configParams + * @param storedId + * @returns {boolean} + */ + + +function isIdSynced(configParams, storedId) { + var needSync = storedId.ns; + + if (needSync) { + return true; + } + + if (!configParams || typeof configParams.syncTime !== 'number') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Sync time is not configured or is not a number'); + } + + var syncTime = !configParams || typeof configParams.syncTime !== 'number' ? DEFAULT_24_HOURS : configParams.syncTime; + + if (syncTime > DEFAULT_24_HOURS) { + syncTime = DEFAULT_24_HOURS; + } + + var cookieTimestamp = storedId.ts; + + if (cookieTimestamp) { + var secondBetweenTwoDate = timeDifferenceInSeconds(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"](), cookieTimestamp); + return secondBetweenTwoDate >= syncTime; + } + + return false; +} +/** + * Gets time difference in secounds + * @param date1 + * @param date2 + * @returns {number} + */ + + +function timeDifferenceInSeconds(date1, date2) { + var diff = (date1 - date2) / 1000; + return Math.abs(Math.round(diff)); +} +/** + * id generation call back + * @param result + * @param callback + * @returns {{success: success, error: error}} + */ + + +function idGenerationCallback(callback) { + return { + success: function success(responseBody) { + var value = {}; + + if (responseBody) { + try { + var responseObj = JSON.parse(responseBody); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Generated SharedId: ' + responseObj.sharedId); + value = constructCookieValue(responseObj.sharedId, false); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + } + + callback(value); + }, + error: function error(statusText, responseBody) { + var value = constructCookieValue(id(), true); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Ulid Generated SharedId: ' + value.id); + callback(value); + } + }; +} +/** + * existing id generation call back + * @param result + * @param callback + * @returns {{success: success, error: error}} + */ + + +function existingIdCallback(storedId, callback) { + return { + success: function success(responseBody) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: id to be synced: ' + storedId.id); + + if (responseBody) { + try { + var responseObj = JSON.parse(responseBody); + storedId = constructCookieValue(responseObj.sharedId, false); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Older SharedId: ' + storedId.id); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + } + + callback(storedId); + }, + error: function error() { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Sync error for id : ' + storedId.id); + callback(storedId); + } + }; +} +/** + * Encode the id + * @param value + * @returns {string|*} + */ + + +function encodeId(value) { + var result = {}; + var sharedId = value && typeof value['id'] === 'string' ? value['id'] : undefined; + + if (sharedId == OPT_OUT_VALUE) { + return undefined; + } + + if (sharedId) { + var bidIds = { + id: sharedId + }; + var ns = value && typeof value['ns'] === 'boolean' ? value['ns'] : undefined; + + if (ns == undefined) { + bidIds.third = sharedId; + } + + result.sharedid = bidIds; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Decoded value ' + JSON.stringify(result)); + return result; + } + + return sharedId; +} +/** + * the factory to generate unique identifier based on time and current pseudorandom number + * @param {string} the current pseudorandom number generator + * @returns {function(*=): *} + */ + + +function factory(currPrng) { + if (!currPrng) { + currPrng = detectPrng(); + } + + return function ulid(seedTime) { + if (isNaN(seedTime)) { + seedTime = Date.now(); + } + + return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, currPrng); + }; +} +/** + * creates and logs the error message + * @function + * @param {string} error message + * @returns {Error} + */ + + +function createError(message) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](message); + var err = new Error(message); + err.source = 'sharedId'; + return err; +} +/** + * gets a a random charcter from generated pseudorandom number + * @param {string} the generated pseudorandom number + * @returns {string} + */ + + +function randomChar(prng) { + var rand = Math.floor(prng() * ENCODING_LEN); + + if (rand === ENCODING_LEN) { + rand = ENCODING_LEN - 1; + } + + return ENCODING.charAt(rand); +} +/** + * encodes the time based on the length + * @param now + * @param len + * @returns {string} encoded time. + */ + + +function encodeTime(now, len) { + if (isNaN(now)) { + throw new Error(now + ' must be a number'); + } + + if (Number.isInteger(now) === false) { + throw createError('time must be an integer'); + } + + if (now > TIME_MAX) { + throw createError('cannot encode time greater than ' + TIME_MAX); + } + + if (now < 0) { + throw createError('time must be positive'); + } + + if (Number.isInteger(len) === false) { + throw createError('length must be an integer'); + } + + if (len < 0) { + throw createError('length must be positive'); + } + + var mod; + var str = ''; + + for (; len > 0; len--) { + mod = now % ENCODING_LEN; + str = ENCODING.charAt(mod) + str; + now = (now - mod) / ENCODING_LEN; + } + + return str; +} +/** + * encodes random character + * @param len + * @param prng + * @returns {string} + */ + + +function encodeRandom(len, prng) { + var str = ''; + + for (; len > 0; len--) { + str = randomChar(prng) + str; + } + + return str; +} +/** + * detects the pseudorandom number generator and generates the random number + * @function + * @param {string} error message + * @returns {string} a random number + */ + + +function detectPrng(root) { + if (!root) { + root = typeof window !== 'undefined' ? window : null; + } + + var browserCrypto = root && (root.crypto || root.msCrypto); + + if (browserCrypto) { + return function () { + var buffer = new Uint8Array(1); + browserCrypto.getRandomValues(buffer); + return buffer[0] / 0xff; + }; + } + + return function () { + return Math.random(); + }; +} +/** @type {Submodule} */ + + +var sharedIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: MODULE_NAME, + + /** + * decode the stored id value for passing to bid requests + * @function + * @param {string} value + * @returns {{sharedid:{ id: string, third:string}} or undefined if value doesn't exists + */ + decode: function decode(value) { + return value ? encodeId(value) : undefined; + }, + + /** + * performs action to obtain id and return a value. + * @function + * @param {SubmoduleParams} [configParams] + * @returns {sharedId} + */ + getId: function getId(configParams) { + var resp = function resp(callback) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Sharedid doesnt exists, new cookie creation'); + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(ID_SVC, idGenerationCallback(callback), undefined, { + method: 'GET', + withCredentials: true + }); + }; + + return { + callback: resp + }; + }, + + /** + * performs actions even if the id exists and returns a value + * @param configParams + * @param storedId + * @returns {{callback: *}} + */ + extendId: function extendId(configParams, storedId) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Existing shared id ' + storedId.id); + + var resp = function resp(callback) { + var needSync = isIdSynced(configParams, storedId); + + if (needSync) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('SharedId: Existing shared id ' + storedId + ' is not synced'); + var sharedIdPayload = {}; + sharedIdPayload.sharedId = storedId.id; + var payloadString = JSON.stringify(sharedIdPayload); + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(ID_SVC, existingIdCallback(storedId, callback), payloadString, { + method: 'POST', + withCredentials: true + }); + } + }; + + return { + callback: resp + }; + } +}; // Register submodule for userId + +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', sharedIdSubmodule); + +/***/ }) + +},[682]); \ No newline at end of file diff --git a/build/dist/sharethroughAnalyticsAdapter.js b/build/dist/sharethroughAnalyticsAdapter.js new file mode 100644 index 00000000000..ad7909dd9ed --- /dev/null +++ b/build/dist/sharethroughAnalyticsAdapter.js @@ -0,0 +1,349 @@ +pbjsChunk([13],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 684: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(685); + + +/***/ }), + +/***/ 685: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + +var utils = __webpack_require__(0); + +var emptyUrl = ''; +var analyticsType = 'endpoint'; +var STR_BIDDER_CODE = 'sharethrough'; +var STR_VERSION = '0.1.0'; + +var sharethroughAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + emptyUrl: emptyUrl, + analyticsType: analyticsType +}), { + STR_BEACON_HOST: 'https://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', "4.2.0"); + 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; + } +}); + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: sharethroughAdapter, + code: 'sharethrough' +}); +/* harmony default export */ __webpack_exports__["default"] = (sharethroughAdapter); + +/***/ }) + +},[684]); \ No newline at end of file diff --git a/build/dist/sharethroughBidAdapter.js b/build/dist/sharethroughBidAdapter.js new file mode 100644 index 00000000000..43208293d18 --- /dev/null +++ b/build/dist/sharethroughBidAdapter.js @@ -0,0 +1,252 @@ +pbjsChunk([107],{ + +/***/ 686: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(687); + + +/***/ }), + +/***/ 687: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sharethroughInternal", function() { return sharethroughInternal; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sharethroughAdapterSpec", function() { return sharethroughAdapterSpec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); + + +var VERSION = '3.2.1'; +var BIDDER_CODE = 'sharethrough'; +var STR_ENDPOINT = 'https://btlr.sharethrough.com/WYu2BXv1/v1'; +var DEFAULT_SIZE = [1, 1]; // this allows stubbing of utility function that is used internally by the sharethrough adapter + +var sharethroughInternal = { + b64EncodeUnicode: b64EncodeUnicode, + handleIframe: handleIframe, + isLockedInFrame: isLockedInFrame, + getProtocol: getProtocol +}; +var sharethroughAdapterSpec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.pkey && bid.bidder === BIDDER_CODE; + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + return bidRequests.map(function (bidRequest) { + var query = { + placement_key: bidRequest.params.pkey, + bidId: bidRequest.bidId, + consent_required: false, + instant_play_capable: canAutoPlayHTML5Video(), + hbSource: 'prebid', + hbVersion: "4.2.0", + strVersion: VERSION + }; + var nonHttp = sharethroughInternal.getProtocol().indexOf('http') < 0; + query.secure = nonHttp || sharethroughInternal.getProtocol().indexOf('https') > -1; + + if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.consentString) { + query.consent_string = bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + query.consent_required = !!bidderRequest.gdprConsent.gdprApplies; + } + + if (bidderRequest && bidderRequest.uspConsent) { + query.us_privacy = bidderRequest.uspConsent; + } + + if (bidRequest.userId && bidRequest.userId.tdid) { + query.ttduid = bidRequest.userId.tdid; + } + + if (bidRequest.schain) { + query.schain = JSON.stringify(bidRequest.schain); + } + + if (bidRequest.bidfloor) { + query.bidfloor = parseFloat(bidRequest.bidfloor); + } // Data that does not need to go to the server, + // but we need as part of interpretResponse() + + + var strData = { + skipIframeBusting: bidRequest.params.iframe, + iframeSize: bidRequest.params.iframeSize, + sizes: bidRequest.sizes + }; + return { + method: 'GET', + url: STR_ENDPOINT, + data: query, + strData: strData + }; + }); + }, + interpretResponse: function interpretResponse(_ref, req) { + var body = _ref.body; + + if (!body || !body.creatives || !body.creatives.length) { + return []; + } + + var creative = body.creatives[0]; + var size = DEFAULT_SIZE; + + if (req.strData.iframeSize || req.strData.sizes.length) { + size = req.strData.iframeSize ? req.strData.iframeSize : getLargestSize(req.strData.sizes); + } + + return [{ + requestId: req.data.bidId, + width: size[0], + height: size[1], + cpm: creative.cpm, + creativeId: creative.creative.creative_key, + dealId: creative.creative.deal_id, + currency: 'USD', + netRevenue: true, + ttl: 360, + ad: generateAd(body, req) + }]; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + var syncParams = uspConsent ? "&us_privacy=".concat(uspConsent) : ''; + var syncs = []; + var shouldCookieSync = syncOptions.pixelEnabled && serverResponses.length > 0 && serverResponses[0].body && serverResponses[0].body.cookieSyncUrls; + + if (shouldCookieSync) { + serverResponses[0].body.cookieSyncUrls.forEach(function (url) { + syncs.push({ + type: 'image', + url: url + syncParams + }); + }); + } + + return syncs; + }, + // Empty implementation for prebid core to be able to find it + onTimeout: function onTimeout(data) {}, + // Empty implementation for prebid core to be able to find it + onBidWon: function onBidWon(bid) {}, + // Empty implementation for prebid core to be able to find it + onSetTargeting: function onSetTargeting(bid) {} +}; + +function getLargestSize(sizes) { + function area(size) { + return size[0] * size[1]; + } + + return sizes.reduce(function (prev, current) { + if (area(current) > area(prev)) { + return current; + } else { + return prev; + } + }); +} + +function generateAd(body, req) { + var strRespId = "str_response_".concat(req.data.bidId); + var adMarkup = "\n
\n
\n \n "); + + if (req.strData.skipIframeBusting) { + // Don't break out of iframe + adMarkup = adMarkup + ""; + } else { + // Add logic to the markup that detects whether or not in top level document is accessible + // this logic will deploy sfp.js and/or iframe buster script(s) as appropriate + adMarkup = adMarkup + "\n \n "); + } + + return adMarkup; +} + +function handleIframe() { + // only load iframe buster JS if we can access the top level document + // if we are 'locked in' to this frame then no point trying to bust out: we may as well render in the frame instead + var iframeBusterLoaded = false; + + if (!window.lockedInFrame) { + var sfpIframeBusterJs = document.createElement('script'); + sfpIframeBusterJs.src = 'https://native.sharethrough.com/assets/sfp-set-targeting.js'; + sfpIframeBusterJs.type = 'text/javascript'; + + try { + window.document.getElementsByTagName('body')[0].appendChild(sfpIframeBusterJs); + iframeBusterLoaded = true; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]('Trouble writing frame buster script, error details:', e); + } + } + + var clientJsLoaded = !iframeBusterLoaded ? !!(window.STR && window.STR.Tag) : !!(window.top.STR && window.top.STR.Tag); + + if (!clientJsLoaded) { + var sfpJs = document.createElement('script'); + sfpJs.src = 'https://native.sharethrough.com/assets/sfp.js'; + sfpJs.type = 'text/javascript'; // only add sfp js to window.top if iframe busting successfully loaded; otherwise, add to iframe + + try { + if (iframeBusterLoaded) { + window.top.document.getElementsByTagName('body')[0].appendChild(sfpJs); + } else { + window.document.getElementsByTagName('body')[0].appendChild(sfpJs); + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"]('Trouble writing sfp script, error details:', e); + } + } +} // determines if we are capable of busting out of the iframe we are in +// if we catch a DOMException when trying to access top-level document, it means we're stuck in the frame we're in + + +function isLockedInFrame() { + window.lockedInFrame = false; + + try { + window.lockedInFrame = !window.top.document; + } catch (e) { + window.lockedInFrame = e instanceof DOMException; + } +} // 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); + })); +} + +function canAutoPlayHTML5Video() { + var userAgent = navigator.userAgent; + if (!userAgent) return false; + var isAndroid = /Android/i.test(userAgent); + var isiOS = /iPhone|iPad|iPod/i.test(userAgent); + var chromeVersion = parseInt((/Chrome\/([0-9]+)/.exec(userAgent) || [0, 0])[1]); + var chromeiOSVersion = parseInt((/CriOS\/([0-9]+)/.exec(userAgent) || [0, 0])[1]); + var safariVersion = parseInt((/Version\/([0-9]+)/.exec(userAgent) || [0, 0])[1]); + + if (isAndroid && chromeVersion >= 53 || isiOS && (safariVersion >= 10 || chromeiOSVersion >= 53) || !(isAndroid || isiOS)) { + return true; + } else { + return false; + } +} + +function getProtocol() { + return document.location.protocol; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(sharethroughAdapterSpec); + +/***/ }) + +},[686]); \ No newline at end of file diff --git a/build/dist/showheroes-bsBidAdapter.js b/build/dist/showheroes-bsBidAdapter.js new file mode 100644 index 00000000000..545e70d64ac --- /dev/null +++ b/build/dist/showheroes-bsBidAdapter.js @@ -0,0 +1,306 @@ +pbjsChunk([106],{ + +/***/ 688: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(689); + + +/***/ }), + +/***/ 689: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_adloader_js__ = __webpack_require__(39); + + + + + + +var PROD_ENDPOINT = 'https://bs.showheroes.com/api/v1/bid'; +var STAGE_ENDPOINT = 'https://bid-service.stage.showheroes.com/api/v1/bid'; +var PROD_PUBLISHER_TAG = 'https://static.showheroes.com/publishertag.js'; +var STAGE_PUBLISHER_TAG = 'https://pubtag.stage.showheroes.com/publishertag.js'; +var PROD_VL = 'https://video-library.showheroes.com'; +var STAGE_VL = 'https://video-library.stage.showheroes.com'; +var BIDDER_CODE = 'showheroes-bs'; +var TTL = 300; + +function getEnvURLs(isStage) { + return { + pubTag: isStage ? STAGE_PUBLISHER_TAG : PROD_PUBLISHER_TAG, + vlHost: isStage ? STAGE_VL : PROD_VL + }; +} + +var spec = { + code: BIDDER_CODE, + aliases: ['showheroesBs'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.playerId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var adUnits = []; + var pageURL = validBidRequests[0].params.contentPageUrl || bidderRequest.refererInfo.referer; + var isStage = !!validBidRequests[0].params.stage; + var isOutstream = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'mediaTypes.video.context') === 'outstream'; + var isCustomRender = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.outstreamOptions.customRender'); + var isNodeRender = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.outstreamOptions.slot') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.outstreamOptions.iframe'); + var isNativeRender = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'renderer'); + var outstreamOptions = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.outstreamOptions'); + var isBanner = !!validBidRequests[0].mediaTypes.banner || isOutstream && !(isCustomRender || isNativeRender || isNodeRender); + var defaultSchain = validBidRequests[0].schain || {}; + validBidRequests.forEach(function (bid) { + var videoSizes = getVideoSizes(bid); + var bannerSizes = getBannerSizes(bid); + var vpaidMode = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('vpaidMode', bid.params); + + var makeBids = function makeBids(type, size) { + var context = ''; + var streamType = 2; + + if (type === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]) { + streamType = 5; + } else { + context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (vpaidMode && context === 'instream') { + streamType = 1; + } + + if (context === 'outstream') { + streamType = 5; + } + } + + return { + type: streamType, + bidId: bid.bidId, + mediaType: type, + context: context, + playerId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('playerId', bid.params), + auctionId: bidderRequest.auctionId, + bidderCode: BIDDER_CODE, + gdprConsent: bidderRequest.gdprConsent, + start: +new Date(), + timeout: 3000, + size: { + width: size[0], + height: size[1] + }, + params: bid.params, + schain: bid.schain || defaultSchain + }; + }; + + videoSizes.forEach(function (size) { + adUnits.push(makeBids(__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */], size)); + }); + bannerSizes.forEach(function (size) { + adUnits.push(makeBids(__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */], size)); + }); + }); + return { + url: isStage ? STAGE_ENDPOINT : PROD_ENDPOINT, + method: 'POST', + options: { + contentType: 'application/json', + accept: 'application/json' + }, + data: { + 'user': [], + 'meta': { + 'adapterVersion': 2, + 'pageURL': encodeURIComponent(pageURL), + 'vastCacheEnabled': !!__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('cache') && !isBanner && !outstreamOptions || false, + 'isDesktop': __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().document.documentElement.clientWidth > 700, + 'xmlAndTag': !!(isOutstream && isCustomRender) || false, + 'stage': isStage || undefined + }, + 'requests': adUnits, + 'debug': validBidRequests[0].params.debug || false + } + }; + }, + interpretResponse: function interpretResponse(response, request) { + return createBids(response.body, request.data); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (!serverResponses.length || !serverResponses[0].body.userSync) { + return syncs; + } + + var userSync = serverResponses[0].body.userSync; + + if (syncOptions.iframeEnabled) { + (userSync.iframes || []).forEach(function (url) { + syncs.push({ + type: 'iframe', + url: url + }); + }); + } + + if (syncOptions.pixelEnabled) { + (userSync.pixels || []).forEach(function (url) { + syncs.push({ + type: 'image', + url: url + }); + }); + } + + return syncs; + } +}; + +function createBids(bidRes, reqData) { + if (bidRes && (!Array.isArray(bidRes.bids) || bidRes.bids.length < 1)) { + return []; + } + + var bids = []; + var bidMap = {}; + (reqData.requests || []).forEach(function (bid) { + bidMap[bid.bidId] = bid; + }); + bidRes.bids.forEach(function (bid) { + var reqBid = bidMap[bid.bidId]; + var currentBidParams = reqBid.params; + var bidUnit = {}; + bidUnit.cpm = bid.cpm; + bidUnit.requestId = bid.bidId; + bidUnit.currency = bid.currency; + bidUnit.mediaType = bid.mediaType || __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]; + bidUnit.ttl = TTL; + bidUnit.creativeId = 'c_' + bid.bidId; + bidUnit.netRevenue = true; + bidUnit.width = bid.size.width; + bidUnit.height = bid.size.height; + + if (bid.vastXml) { + bidUnit.vastXml = bid.vastXml; + bidUnit.adResponse = { + content: bid.vastXml + }; + } + + if (bid.vastTag) { + bidUnit.vastUrl = bid.vastTag; + } + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]) { + bidUnit.ad = getBannerHtml(bid, reqBid, reqData); + } else if (bid.context === 'outstream') { + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + id: bid.bidId, + url: '//', + config: { + playerId: reqBid.playerId, + width: bid.size.width, + height: bid.size.height, + vastUrl: bid.vastTag, + vastXml: bid.vastXml, + debug: reqData.debug, + isStage: !!reqData.meta.stage, + customRender: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('customRender', currentBidParams.outstreamOptions), + slot: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('slot', currentBidParams.outstreamOptions), + iframe: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('iframe', currentBidParams.outstreamOptions) + } + }); + renderer.setRender(outstreamRender); + bidUnit.renderer = renderer; + } + + bids.push(bidUnit); + }); + return bids; +} + +function outstreamRender(bid) { + var embedCode = createOutstreamEmbedCode(bid); + + if (typeof bid.renderer.config.customRender === 'function') { + bid.renderer.config.customRender(bid, embedCode); + } else { + try { + var inIframe = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('iframe', bid.renderer.config); + + if (inIframe && window.document.getElementById(inIframe).nodeName === 'IFRAME') { + var iframe = window.document.getElementById(inIframe); + var framedoc = iframe.contentDocument || iframe.contentWindow && iframe.contentWindow.document; + framedoc.body.appendChild(embedCode); + return; + } + + var slot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('slot', bid.renderer.config) || bid.adUnitCode; + + if (slot && window.document.getElementById(slot)) { + window.document.getElementById(slot).appendChild(embedCode); + } else if (slot) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('[ShowHeroes][renderer] Error: spot not found'); + } + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('[ShowHeroes][renderer] Error:' + err.message); + } + } +} + +function createOutstreamEmbedCode(bid) { + var isStage = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('isStage', bid.renderer.config); + var urls = getEnvURLs(isStage); + var fragment = window.document.createDocumentFragment(); + var script = Object(__WEBPACK_IMPORTED_MODULE_5__src_adloader_js__["a" /* loadExternalScript */])(urls.pubTag, 'outstream', function () { + window.ShowheroesTag = this; + }); + script.setAttribute('data-player-host', urls.vlHost); + var spot = window.document.createElement('div'); + spot.setAttribute('class', 'showheroes-spot'); + spot.setAttribute('data-player', __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('playerId', bid.renderer.config)); + spot.setAttribute('data-debug', __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('debug', bid.renderer.config)); + spot.setAttribute('data-ad-vast-tag', __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('vastUrl', bid.renderer.config)); + spot.setAttribute('data-stream-type', 'outstream'); + fragment.appendChild(spot); + fragment.appendChild(script); + return fragment; +} + +function getBannerHtml(bid, reqBid, reqData) { + var isStage = !!reqData.meta.stage; + var urls = getEnvURLs(isStage); + return "\n \n \n \n
\n \n "); +} + +function getVideoSizes(bidRequest) { + return formatSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize') || []); +} + +function getBannerSizes(bidRequest) { + return formatSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes') || []); +} + +function formatSizes(sizes) { + if (!sizes || !sizes.length) { + return []; + } + + return Array.isArray(sizes[0]) ? sizes : [sizes]; +} + +Object(__WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[688]); \ No newline at end of file diff --git a/build/dist/sigmoidAnalyticsAdapter.js b/build/dist/sigmoidAnalyticsAdapter.js new file mode 100644 index 00000000000..501ee995708 --- /dev/null +++ b/build/dist/sigmoidAnalyticsAdapter.js @@ -0,0 +1,611 @@ +pbjsChunk([12],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 690: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(691); + + +/***/ }), + +/***/ 691: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__ = __webpack_require__(9); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/* Sigmoid Analytics Adapter for prebid.js v1.1.0-pre +Updated : 2018-03-28 */ + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_4__src_storageManager_js__["b" /* getStorageManager */])(); + +var utils = __webpack_require__(0); + +var url = 'https://kinesis.us-east-1.amazonaws.com/'; +var analyticsType = 'endpoint'; +var auctionInitConst = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_INIT; +var auctionEndConst = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_END; +var bidWonConst = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_WON; +var bidRequestConst = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_REQUESTED; +var bidAdjustmentConst = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_ADJUSTMENT; +var bidResponseConst = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_RESPONSE; +var initOptions = { + publisherIds: [], + utmTagData: [], + adUnits: [] +}; +var bidWon = { + options: {}, + events: [] +}; +var eventStack = { + options: {}, + events: [] +}; +var auctionStatus = 'not_started'; +var localStoragePrefix = 'sigmoid_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(); + storage.setDataInLocalStorage(buildSessionIdLocalStorageKey(), newSessionId); + } + + initOptions.sessionId = getSessionId(); + updateSessionIdTimeout(); +} + +function updateSessionIdTimeout() { + storage.setDataInLocalStorage(buildSessionIdTimeoutLocalStorageKey(), Date.now()); +} + +function isSessionIdTimeoutExpired() { + var cpmSessionTimestamp = storage.getDataFromLocalStorage(buildSessionIdTimeoutLocalStorageKey()); + return Date.now() - cpmSessionTimestamp > sessionTimeout; +} + +function getSessionId() { + return storage.getDataFromLocalStorage(buildSessionIdLocalStorageKey()) ? storage.getDataFromLocalStorage(buildSessionIdLocalStorageKey()) : ''; +} + +function updateUtmTimeout() { + storage.setDataInLocalStorage(buildUtmLocalStorageTimeoutKey(), Date.now()); +} + +function isUtmTimeoutExpired() { + var utmTimestamp = storage.getDataFromLocalStorage(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 (__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___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 (__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___default()(initOptions.adUnits, bid.placementCode)) { + filteredBids.push(bid); + } + }); + return filteredBids; +} + +function isValidEvent(eventType, adUnitCode) { + if (checkAdUnitConfig()) { + var validationEvents = [bidAdjustmentConst, bidResponseConst, bidWonConst]; + + if (!__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___default()(initOptions.adUnits, adUnitCode) && __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_includes_js___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 = []; +} + +var sigmoidAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* 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'; + } + + if (eventType === bidWonConst && auctionStatus === 'not_started') { + updateSessionId(); + buildBidWon(eventType, info); + + if (isValidBidWon()) { + send(eventType, bidWon, 'bidWon'); + } + + return; + } + + if (eventType === auctionEndConst) { + updateSessionId(); + buildEventStack(); + + if (isValidEventStack()) { + send(eventType, eventStack, 'eventStack'); + } + + auctionStatus = 'not_started'; + } else { + pushEvent(eventType, info); + } + } +}); + +sigmoidAdapter.originEnableAnalytics = sigmoidAdapter.enableAnalytics; + +sigmoidAdapter.enableAnalytics = function (config) { + initOptions = config.options; + initOptions.utmTagData = this.buildUtmTagData(); + utils.logInfo('Sigmoid Analytics enabled with config', initOptions); + sigmoidAdapter.originEnableAnalytics(config); +}; + +sigmoidAdapter.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) { + storage.setDataInLocalStorage(buildUtmLocalStorageKey(utmTagKey), utmTagData[utmTagKey]); + updateUtmTimeout(); + } else { + if (!isUtmTimeoutExpired()) { + utmTagData[utmTagKey] = storage.getDataFromLocalStorage(buildUtmLocalStorageKey(utmTagKey)) ? storage.getDataFromLocalStorage(buildUtmLocalStorageKey(utmTagKey)) : ''; + updateUtmTimeout(); + } + } + }); + return utmTagData; +}; + +function send(eventType, data, sendDataType) { + // eslint-disable-next-line no-undef + AWS.config.credentials = new AWS.Credentials({ + accessKeyId: 'accesskey', + secretAccessKey: 'secretkey' + }); // eslint-disable-next-line no-undef + + AWS.config.region = 'us-east-1'; // eslint-disable-next-line no-undef + + AWS.config.credentials.get(function (err) { + // attach event listener + if (err) { + utils.logError(err); + return; + } // create kinesis service object + // eslint-disable-next-line no-undef + + + var kinesis = new AWS.Kinesis({ + apiVersion: '2013-12-02' + }); + var dataList = []; + var jsonData = {}; + jsonData['Data'] = JSON.stringify(data) + '\n'; + jsonData['PartitionKey'] = 'partition-' + Math.random().toString(36).substring(7); + dataList.push(jsonData); + kinesis.putRecords({ + Records: dataList, + StreamName: 'sample-stream' + }); + + if (sendDataType === 'eventStack') { + flushEventStack(); + } + }); +} + +; + +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 + }); + } + } +} + +__WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: sigmoidAdapter, + code: 'sigmoid' +}); +/* harmony default export */ __webpack_exports__["default"] = (sigmoidAdapter); + +/***/ }) + +},[690]); \ No newline at end of file diff --git a/build/dist/sizeMappingV2.js b/build/dist/sizeMappingV2.js new file mode 100644 index 00000000000..1b994075935 --- /dev/null +++ b/build/dist/sizeMappingV2.js @@ -0,0 +1,680 @@ +pbjsChunk([105],{ + +/***/ 692: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(693); + + +/***/ }), + +/***/ 693: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "internal", function() { return internal; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sizeMappingInternalStore", function() { return sizeMappingInternalStore; }); +/* harmony export (immutable) */ __webpack_exports__["isUsingNewSizeMapping"] = isUsingNewSizeMapping; +/* harmony export (immutable) */ __webpack_exports__["checkAdUnitSetupHook"] = checkAdUnitSetupHook; +/* harmony export (immutable) */ __webpack_exports__["checkBidderSizeConfigFormat"] = checkBidderSizeConfigFormat; +/* harmony export (immutable) */ __webpack_exports__["isLabelActivated"] = isLabelActivated; +/* harmony export (immutable) */ __webpack_exports__["getFilteredMediaTypes"] = getFilteredMediaTypes; +/* harmony export (immutable) */ __webpack_exports__["isSizeConfigActivated"] = isSizeConfigActivated; +/* harmony export (immutable) */ __webpack_exports__["getActiveSizeBucket"] = getActiveSizeBucket; +/* harmony export (immutable) */ __webpack_exports__["getRelevantMediaTypesForBidder"] = getRelevantMediaTypesForBidder; +/* harmony export (immutable) */ __webpack_exports__["getAdUnitDetail"] = getAdUnitDetail; +/* harmony export (immutable) */ __webpack_exports__["getBids"] = getBids; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_native_js__ = __webpack_require__(35); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adUnits_js__ = __webpack_require__(67); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__ = __webpack_require__(68); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +/** + * This module adds support for the new size mapping spec, Advanced Size Mapping. It's documented here. https://github.com/prebid/Prebid.js/issues/4129 + * The implementation is an alternative to global sizeConfig. It introduces 'Ad Unit' & 'Bidder' level sizeConfigs and also supports 'labels' for conditional + * rendering. Read full API documentation on Prebid.org, http://prebid.org/dev-docs/modules/sizeMappingV2.html + */ + + + + + + // Allows for stubbing of these functions while writing unit tests. + +var internal = { + checkBidderSizeConfigFormat: checkBidderSizeConfigFormat, + getActiveSizeBucket: getActiveSizeBucket, + getFilteredMediaTypes: getFilteredMediaTypes, + getAdUnitDetail: getAdUnitDetail, + getRelevantMediaTypesForBidder: getRelevantMediaTypesForBidder, + isLabelActivated: isLabelActivated +}; +/* + 'sizeMappingInternalStore' contains information on, whether a particular auction is using size mapping V2 (the new size mapping spec), + and it also contains additional information on each adUnit, such as, mediaTypes, activeViewport, etc. This information is required by + the 'getBids' function. +*/ + +var sizeMappingInternalStore = createSizeMappingInternalStore(); + +function createSizeMappingInternalStore() { + var sizeMappingInternalStore = {}; + return { + initializeStore: function initializeStore(auctionId, isUsingSizeMappingBool) { + sizeMappingInternalStore[auctionId] = { + usingSizeMappingV2: isUsingSizeMappingBool, + adUnits: [] + }; + }, + getAuctionDetail: function getAuctionDetail(auctionId) { + return sizeMappingInternalStore[auctionId]; + }, + setAuctionDetail: function setAuctionDetail(auctionId, adUnitDetail) { + sizeMappingInternalStore[auctionId].adUnits.push(adUnitDetail); + } + }; +} +/* + Returns "true" if at least one of the adUnits in the adUnits array is using an Ad Unit and/or Bidder level sizeConfig, + otherwise, returns "false." +*/ + + +function isUsingNewSizeMapping(adUnits) { + var isUsingSizeMappingBool = false; + adUnits.forEach(function (adUnit) { + if (adUnit.mediaTypes) { + // checks for the presence of sizeConfig property at the adUnit.mediaTypes object + Object.keys(adUnit.mediaTypes).forEach(function (mediaType) { + if (adUnit.mediaTypes[mediaType].sizeConfig) { + if (isUsingSizeMappingBool === false) { + isUsingSizeMappingBool = true; + } + } + }); // checks for the presence of sizeConfig property at the adUnit.bids[].bidder object + + adUnit.bids.forEach(function (bidder) { + if (bidder.sizeConfig) { + if (isUsingSizeMappingBool === false) { + isUsingSizeMappingBool = true; + } + } + }); + } + }); + return isUsingSizeMappingBool; +} +/** + This hooked function executes before the function 'checkAdUnitSetup', that is defined in /src/prebid.js. It's necessary to run this funtion before + because it applies a series of checks in order to determine the correctness of the 'sizeConfig' array, which, the original 'checkAdUnitSetup' function + does not recognize. + @params {Array} adUnits + @returns {Array} validateAdUnits - Unrecognized properties are deleted. +*/ + +function checkAdUnitSetupHook(adUnits) { + var validateSizeConfig = function validateSizeConfig(mediaType, sizeConfig, adUnitCode) { + var isValid = true; + var associatedProperty = { + banner: 'sizes', + video: 'playerSize', + native: 'active' + }; + var propertyName = associatedProperty[mediaType]; + var conditionalLogMessages = { + banner: 'Removing mediaTypes.banner from ad unit.', + video: 'Removing mediaTypes.video.sizeConfig from ad unit.', + native: 'Removing mediaTypes.native.sizeConfig from ad unit.' + }; + + if (Array.isArray(sizeConfig)) { + sizeConfig.forEach(function (config, index) { + var keys = Object.keys(config); + /* + Check #1 (Applies to 'banner', 'video' and 'native' media types.) + Verify that all config objects include 'minViewPort' and 'sizes' property. + If they do not, return 'false'. + */ + + if (!(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(keys, 'minViewPort') && __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(keys, propertyName))) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Ad unit ".concat(adUnitCode, ": Missing required property 'minViewPort' or 'sizes' from 'mediaTypes.").concat(mediaType, ".sizeConfig[").concat(index, "]'. ").concat(conditionalLogMessages[mediaType])); + isValid = false; + return; + } + /* + Check #2 (Applies to 'banner', 'video' and 'native' media types.) + Verify that 'config.minViewPort' property is in [width, height] format. + If not, return false. + */ + + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArrayOfNums"](config.minViewPort, 2)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Ad unit ".concat(adUnitCode, ": Invalid declaration of 'minViewPort' in 'mediaTypes.").concat(mediaType, ".sizeConfig[").concat(index, "]'. ").concat(conditionalLogMessages[mediaType])); + isValid = false; + return; + } + /* + Check #3 (Applies only to 'banner' and 'video' media types.) + Verify that 'config.sizes' (in case of banner) or 'config.playerSize' (in case of video) + property is in [width, height] format. If not, return 'false'. + */ + + + if (mediaType === 'banner' || mediaType === 'video') { + var showError = false; + + if (Array.isArray(config[propertyName])) { + var validatedSizes = __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__["adUnitSetupChecks"].validateSizes(config[propertyName]); + + if (config[propertyName].length > 0 && validatedSizes.length === 0) { + isValid = false; + showError = true; + } + } else { + // Either 'sizes' or 'playerSize' is not declared as an array, which makes it invalid by default. + isValid = false; + showError = true; + } + + if (showError) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Ad unit ".concat(adUnitCode, ": Invalid declaration of '").concat(propertyName, "' in 'mediaTypes.").concat(mediaType, ".sizeConfig[").concat(index, "]'. ").concat(conditionalLogMessages[mediaType])); + return; + } + } + /* + Check #4 (Applies only to 'native' media type) + Verify that 'config.active' is a 'boolean'. + If not, return 'false'. + */ + + + if (mediaType === 'native') { + if (typeof config[propertyName] !== 'boolean') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Ad unit ".concat(adUnitCode, ": Invalid declaration of 'active' in 'mediaTypes.").concat(mediaType, ".sizeConfig[").concat(index, "]'. ").concat(conditionalLogMessages[mediaType])); + isValid = false; + } + } + }); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Ad unit ".concat(adUnitCode, ": Invalid declaration of 'sizeConfig' in 'mediaTypes.").concat(mediaType, ".sizeConfig'. ").concat(conditionalLogMessages[mediaType])); + isValid = false; + return isValid; + } // If all checks have passed, isValid should equal 'true' + + + return isValid; + }; + + var validatedAdUnits = []; + adUnits.forEach(function (adUnit) { + var mediaTypes = adUnit.mediaTypes; + var validatedBanner, validatedVideo, validatedNative; + + if (!mediaTypes || Object.keys(mediaTypes).length === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Detected adUnit.code '".concat(adUnit.code, "' did not have a 'mediaTypes' object defined. This is a required field for the auction, so this adUnit has been removed.")); + return; + } + + if (mediaTypes.banner) { + if (mediaTypes.banner.sizes) { + // Ad unit is using 'mediaTypes.banner.sizes' instead of the new property 'sizeConfig'. Apply the old checks! + validatedBanner = __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__["adUnitSetupChecks"].validateBannerMediaType(adUnit); + } else if (mediaTypes.banner.sizeConfig) { + // Ad unit is using the 'sizeConfig' property, 'mediaTypes.banner.sizeConfig'. Apply the new checks! + validatedBanner = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](adUnit); + var isBannerValid = validateSizeConfig('banner', mediaTypes.banner.sizeConfig, adUnit.code); + + if (!isBannerValid) { + delete validatedBanner.mediaTypes.banner; + } else { + /* + Make sure 'sizes' field is always an array of arrays. If not, make it so. + For example, [] becomes [[]], and [360, 400] becomes [[360, 400]] + */ + validatedBanner.mediaTypes.banner.sizeConfig.forEach(function (config) { + if (!Array.isArray(config.sizes[0])) { + config.sizes = [config.sizes]; + } + }); + } + } else { + // Ad unit is invalid since it's mediaType property does not have either 'sizes' or 'sizeConfig' declared. + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Ad unit ".concat(adUnit.code, ": 'mediaTypes.banner' does not contain either 'sizes' or 'sizeConfig' property. Removing 'mediaTypes.banner' from ad unit.")); + validatedBanner = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](adUnit); + delete validatedBanner.mediaTypes.banner; + } + } + + if (mediaTypes.video) { + if (mediaTypes.video.playerSize) { + // Ad unit is using 'mediaTypes.video.playerSize' instead of the new property 'sizeConfig'. Apply the old checks! + validatedVideo = validatedBanner ? __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__["adUnitSetupChecks"].validateVideoMediaType(validatedBanner) : __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__["adUnitSetupChecks"].validateVideoMediaType(adUnit); + } else if (mediaTypes.video.sizeConfig) { + // Ad unit is using the 'sizeConfig' property, 'mediaTypes.video.sizeConfig'. Apply the new checks! + validatedVideo = validatedBanner || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](adUnit); + var isVideoValid = validateSizeConfig('video', mediaTypes.video.sizeConfig, adUnit.code); + + if (!isVideoValid) { + delete validatedVideo.mediaTypes.video.sizeConfig; + } else { + /* + Make sure 'playerSize' field is always an array of arrays. If not, make it so. + For example, [] becomes [[]], and [640, 400] becomes [[640, 400]] + */ + validatedVideo.mediaTypes.video.sizeConfig.forEach(function (config) { + if (!Array.isArray(config.playerSize[0])) { + config.playerSize = [config.playerSize]; + } + }); + } + } + } + + if (mediaTypes.native) { + // Apply the old native checks + validatedNative = validatedVideo ? __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__["adUnitSetupChecks"].validateNativeMediaType(validatedVideo) : validatedBanner ? __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__["adUnitSetupChecks"].validateNativeMediaType(validatedBanner) : __WEBPACK_IMPORTED_MODULE_5__src_prebid_js__["adUnitSetupChecks"].validateNativeMediaType(adUnit); // Apply the new checks if 'mediaTypes.native.sizeConfig' detected + + if (mediaTypes.native.sizeConfig) { + var isNativeValid = validateSizeConfig('native', mediaTypes.native.sizeConfig, adUnit.code); + + if (!isNativeValid) { + delete validatedNative.mediaTypes.native.sizeConfig; + } + } + } + + var validatedAdUnit = _extends({}, validatedBanner, validatedVideo, validatedNative); + + validatedAdUnits.push(validatedAdUnit); + }); + return validatedAdUnits; +} +Object(__WEBPACK_IMPORTED_MODULE_4__src_hook_js__["a" /* getHook */])('checkAdUnitSetup').before(function (fn, adUnits) { + var usingNewSizeMapping = isUsingNewSizeMapping(adUnits); + + if (usingNewSizeMapping) { + // if adUnits are found using the sizeMappingV2 spec, we run additional checks on them for checking the validity of sizeConfig object + // in addition to running the base checks on the mediaType object and return the adUnit without calling the base function. + adUnits = checkAdUnitSetupHook(adUnits); + return fn.bail(adUnits); + } else { + // if presence of sizeMappingV2 spec is not detected on adUnits, we default back to the original checks defined in the base function. + return fn.call(this, adUnits); + } +}); // checks if the sizeConfig object declared at the Bidder level is in the right format or not. + +function checkBidderSizeConfigFormat(sizeConfig) { + var didCheckPass = true; + + if (Array.isArray(sizeConfig) && sizeConfig.length > 0) { + sizeConfig.forEach(function (config) { + var keys = Object.keys(config); + + if (__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(keys, 'minViewPort') && __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(keys, 'relevantMediaTypes') && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArrayOfNums"](config.minViewPort, 2) && Array.isArray(config.relevantMediaTypes) && config.relevantMediaTypes.length > 0 && (config.relevantMediaTypes.length > 1 ? config.relevantMediaTypes.every(function (mt) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(['banner', 'video', 'native'], mt); + }) : ['none', 'banner', 'video', 'native'].indexOf(config.relevantMediaTypes[0]) > -1)) { + didCheckPass = didCheckPass && true; + } else { + didCheckPass = false; + } + }); + } else { + didCheckPass = false; + } + + return didCheckPass; +} +Object(__WEBPACK_IMPORTED_MODULE_4__src_hook_js__["a" /* getHook */])('getBids').before(function (fn, bidderInfo) { + // check if the adUnit is using sizeMappingV2 specs and store the result in _sizeMappingUsageMap. + if (typeof sizeMappingInternalStore.getAuctionDetail(bidderInfo.auctionId) === 'undefined') { + var isUsingSizeMappingBool = isUsingNewSizeMapping(bidderInfo.adUnits); // initialize sizeMappingInternalStore for the first time for a particular auction + + sizeMappingInternalStore.initializeStore(bidderInfo.auctionId, isUsingSizeMappingBool); + } + + if (sizeMappingInternalStore.getAuctionDetail(bidderInfo.auctionId).usingSizeMappingV2) { + // if adUnit is found using sizeMappingV2 specs, run the getBids function which processes the sizeConfig object + // and returns the bids array for a particular bidder. + var bids = getBids(bidderInfo); + return fn.bail(bids); + } else { + // if not using sizeMappingV2, default back to the getBids function defined in adapterManager. + return fn.call(this, bidderInfo); + } +}); +/** + * Given an Ad Unit or a Bid as an input, returns a boolean telling if the Ad Unit/ Bid is active based on label checks + * @param {Object} bidOrAdUnit - Either the Ad Unit object or the Bid object + * @param {Array} activeLabels - List of active labels passed as an argument to pbjs.requestBids function + * @param {string} adUnitCode - Unique string identifier for an Ad Unit. + * @param {number} adUnitInstance - Instance count of an 'Identical' ad unit. + * @returns {boolean} Represents if the Ad Unit or the Bid is active or not + */ + +function isLabelActivated(bidOrAdUnit, activeLabels, adUnitCode, adUnitInstance) { + var labelOperator; + var labelsFound = Object.keys(bidOrAdUnit).filter(function (prop) { + return prop === 'labelAny' || prop === 'labelAll'; + }); + + if (labelsFound && labelsFound.length > 1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("Size Mapping V2:: ".concat(bidOrAdUnit.code ? "Ad Unit: ".concat(bidOrAdUnit.code, "(").concat(adUnitInstance, ") => Ad unit has multiple label operators. Using the first declared operator: ").concat(labelsFound[0]) : "Ad Unit: ".concat(adUnitCode, "(").concat(adUnitInstance, "), Bidder: ").concat(bidOrAdUnit.bidder, " => Bidder has multiple label operators. Using the first declared operator: ").concat(labelsFound[0]))); + } + + labelOperator = labelsFound[0]; + + if (labelOperator && !activeLabels) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("Size Mapping V2:: ".concat(bidOrAdUnit.code ? "Ad Unit: ".concat(bidOrAdUnit.code, "(").concat(adUnitInstance, ") => Found '").concat(labelOperator, "' on ad unit, but 'labels' is not set. Did you pass 'labels' to pbjs.requestBids() ?") : "Ad Unit: ".concat(adUnitCode, "(").concat(adUnitInstance, "), Bidder: ").concat(bidOrAdUnit.bidder, " => Found '").concat(labelOperator, "' on bidder, but 'labels' is not set. Did you pass 'labels' to pbjs.requestBids() ?"))); + return true; + } + + if (labelOperator === 'labelAll' && Array.isArray(bidOrAdUnit[labelOperator])) { + if (bidOrAdUnit.labelAll.length === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("Size Mapping V2:: Ad Unit: ".concat(bidOrAdUnit.code, "(").concat(adUnitInstance, ") => Ad unit has declared property 'labelAll' with an empty array.")); + return true; + } + + return bidOrAdUnit.labelAll.every(function (label) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(activeLabels, label); + }); + } else if (labelOperator === 'labelAny' && Array.isArray(bidOrAdUnit[labelOperator])) { + if (bidOrAdUnit.labelAny.length === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("Size Mapping V2:: Ad Unit: ".concat(bidOrAdUnit.code, "(").concat(adUnitInstance, ") => Ad unit has declared property 'labelAny' with an empty array.")); + return true; + } + + return bidOrAdUnit.labelAny.some(function (label) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(activeLabels, label); + }); + } + + return true; +} +/** + * Processes the MediaTypes object and calculates the active size buckets for each Media Type. Uses `window.innerWidth` and `window.innerHeight` + * to calculate the width and height of the active Viewport. + * @param {MediaTypes} mediaTypes Contains information about supported media types for an Ad Unit and size information for each of those types + * @returns {FilteredMediaTypes} Filtered mediaTypes object with relevant media types filtered by size buckets based on activeViewPort size + */ + +function getFilteredMediaTypes(mediaTypes) { + var activeViewportWidth, activeViewportHeight, transformedMediaTypes; + transformedMediaTypes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepClone"](mediaTypes); + var activeSizeBucket = { + banner: undefined, + video: undefined, + native: undefined + }; + + try { + activeViewportWidth = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().innerWidth; + activeViewportHeight = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"]().innerHeight; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("SizeMappingv2:: Unfriendly iframe blocks viewport size to be evaluated correctly"); + activeViewportWidth = window.innerWidth; + activeViewportHeight = window.innerHeight; + } + + var activeViewport = [activeViewportWidth, activeViewportHeight]; + Object.keys(mediaTypes).map(function (mediaType) { + var sizeConfig = mediaTypes[mediaType].sizeConfig; + + if (sizeConfig) { + activeSizeBucket[mediaType] = getActiveSizeBucket(sizeConfig, activeViewport); + var filteredSizeConfig = sizeConfig.filter(function (config) { + return config.minViewPort === activeSizeBucket[mediaType] && isSizeConfigActivated(mediaType, config); + }); + transformedMediaTypes[mediaType] = _extends({ + filteredSizeConfig: filteredSizeConfig + }, mediaTypes[mediaType]); // transform mediaTypes object + + var config = { + banner: 'sizes', + video: 'playerSize' + }; + + if (transformedMediaTypes[mediaType].filteredSizeConfig.length > 0) { + // map sizes or playerSize property in filteredSizeConfig object to transformedMediaTypes.banner.sizes if mediaType is banner + // or transformedMediaTypes.video.playerSize if the mediaType in video. + // doesn't apply to native mediaType since native doesn't have any property defining 'sizes' or 'playerSize'. + if (mediaType !== 'native') { + transformedMediaTypes[mediaType][config[mediaType]] = transformedMediaTypes[mediaType].filteredSizeConfig[0][config[mediaType]]; + } + } else { + delete transformedMediaTypes[mediaType]; + } + } + }); // filter out 'undefined' values from activeSizeBucket object and attach sizes/playerSize information against the active size bucket. + + var sizeBucketToSizeMap = Object.keys(activeSizeBucket).filter(function (mediaType) { + return activeSizeBucket[mediaType] !== undefined; + }).reduce(function (sizeBucketToSizeMap, mediaType) { + sizeBucketToSizeMap[mediaType] = { + activeSizeBucket: activeSizeBucket[mediaType], + activeSizeDimensions: mediaType === 'banner' ? // banner mediaType gets deleted incase no sizes are specified for a given size bucket, that's why this check is necessary + transformedMediaTypes.banner ? transformedMediaTypes.banner.sizes : [] : mediaType === 'video' ? // video mediaType gets deleted incase no playerSize is specified for a given size bucket, that's why this check is necessary + transformedMediaTypes.video ? transformedMediaTypes.video.playerSize : [] : 'NA' + }; + return sizeBucketToSizeMap; + }, {}); + return { + mediaTypes: mediaTypes, + sizeBucketToSizeMap: sizeBucketToSizeMap, + activeViewport: activeViewport, + transformedMediaTypes: transformedMediaTypes + }; +} +; +/** + * Evaluates the given sizeConfig object and checks for various properties to determine if the sizeConfig is active or not. For example, + * let's suppose the sizeConfig is for a Banner media type. Then, if the sizes property is found empty, it returns false, else returns true. + * In case of a Video media type, it checks the playerSize property. If found empty, returns false, else returns true. + * In case of a Native media type, it checks the active property. If found false, returns false, if found true, returns true. + * @param {string} mediaType It can be 'banner', 'native' or 'video' + * @param {Object} sizeConfig Represents the sizeConfig object which is active based on the current viewport size + * @returns {boolean} Represents if the size config is active or not + */ + +function isSizeConfigActivated(mediaType, sizeConfig) { + switch (mediaType) { + case 'banner': + // we need this check, sizeConfig.sizes[0].length > 0, in place because a sizeBucket can have sizes: [], + // gets converted to sizes: [[]] in the checkAdUnitSetupHook function + return sizeConfig.sizes && sizeConfig.sizes.length > 0 && sizeConfig.sizes[0].length > 0; + + case 'video': + // for why we need the last check, read the above comment + return sizeConfig.playerSize && sizeConfig.playerSize.length > 0 && sizeConfig.playerSize[0].length > 0; + + case 'native': + return sizeConfig.active; + + default: + return false; + } +} +/** + * Returns the active size bucket for a given media type + * @param {Array} sizeConfig SizeConfig defines the characteristics of an Ad Unit categorised into multiple size buckets per media type + * @param {Array} activeViewport Viewport size of the browser in the form [w, h] (w -> width, h -> height) + * Calculated at the time of making call to pbjs.requestBids function + * @returns {Array} The active size bucket matching the activeViewPort, for example: [750, 0] + */ + +function getActiveSizeBucket(sizeConfig, activeViewport) { + var activeSizeBucket = []; + sizeConfig.sort(function (a, b) { + return a.minViewPort[0] - b.minViewPort[0]; + }).forEach(function (config) { + if (activeViewport[0] >= config.minViewPort[0]) { + if (activeViewport[1] >= config.minViewPort[1]) { + activeSizeBucket = config.minViewPort; + } else { + activeSizeBucket = []; + } + } + }); + return activeSizeBucket; +} +function getRelevantMediaTypesForBidder(sizeConfig, activeViewport) { + if (internal.checkBidderSizeConfigFormat(sizeConfig)) { + var activeSizeBucket = internal.getActiveSizeBucket(sizeConfig, activeViewport); + return sizeConfig.filter(function (config) { + return config.minViewPort === activeSizeBucket; + })[0]['relevantMediaTypes']; + } + + return []; +} // sets sizeMappingInternalStore for a given auctionId with relevant adUnit information returned from the call to 'getFilteredMediaTypes' function +// returns adUnit details object. + +function getAdUnitDetail(auctionId, adUnit, labels) { + // fetch all adUnits for an auction from the sizeMappingInternalStore + var adUnitsForAuction = sizeMappingInternalStore.getAuctionDetail(auctionId).adUnits; // check if the adUnit exists already in the sizeMappingInterStore (check for equivalence of 'code' && 'mediaTypes' properties) + + var adUnitDetail = adUnitsForAuction.filter(function (adUnitDetail) { + return adUnitDetail.adUnitCode === adUnit.code && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepEqual"](adUnitDetail.mediaTypes, adUnit.mediaTypes); + }); + + if (adUnitDetail.length > 0) { + adUnitDetail[0].cacheHits++; + return adUnitDetail[0]; + } else { + var identicalAdUnit = adUnitsForAuction.filter(function (adUnitDetail) { + return adUnitDetail.adUnitCode === adUnit.code; + }); + var adUnitInstance = identicalAdUnit.length > 0 && typeof identicalAdUnit[0].instance === 'number' ? identicalAdUnit[identicalAdUnit.length - 1].instance + 1 : 1; + + var _isLabelActivated = internal.isLabelActivated(adUnit, labels, adUnit.code, adUnitInstance); + + var _ref = _isLabelActivated && internal.getFilteredMediaTypes(adUnit.mediaTypes), + _ref$mediaTypes = _ref.mediaTypes, + mediaTypes = _ref$mediaTypes === void 0 ? adUnit.mediaTypes : _ref$mediaTypes, + sizeBucketToSizeMap = _ref.sizeBucketToSizeMap, + activeViewport = _ref.activeViewport, + transformedMediaTypes = _ref.transformedMediaTypes; + + var _adUnitDetail = { + adUnitCode: adUnit.code, + mediaTypes: mediaTypes, + sizeBucketToSizeMap: sizeBucketToSizeMap, + activeViewport: activeViewport, + transformedMediaTypes: transformedMediaTypes, + instance: adUnitInstance, + isLabelActivated: _isLabelActivated, + cacheHits: 0 + }; // set adUnitDetail in sizeMappingInternalStore against the correct 'auctionId'. + + sizeMappingInternalStore.setAuctionDetail(auctionId, _adUnitDetail); + _isLabelActivated && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, "(").concat(adUnitInstance, ") => Active size buckets after filtration: "), sizeBucketToSizeMap); + return _adUnitDetail; + } +} +function getBids(_ref2) { + var bidderCode = _ref2.bidderCode, + auctionId = _ref2.auctionId, + bidderRequestId = _ref2.bidderRequestId, + adUnits = _ref2.adUnits, + labels = _ref2.labels, + src = _ref2.src; + return adUnits.reduce(function (result, adUnit) { + if (adUnit.mediaTypes && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isValidMediaTypes"](adUnit.mediaTypes)) { + var _internal$getAdUnitDe = internal.getAdUnitDetail(auctionId, adUnit, labels), + activeViewport = _internal$getAdUnitDe.activeViewport, + transformedMediaTypes = _internal$getAdUnitDe.transformedMediaTypes, + adUnitInstance = _internal$getAdUnitDe.instance, + _isLabelActivated2 = _internal$getAdUnitDe.isLabelActivated, + cacheHits = _internal$getAdUnitDe.cacheHits; + + if (_isLabelActivated2) { + // check if adUnit has any active media types remaining, if not drop the adUnit from auction, + // else proceed to evaluate the bids object. + if (Object.keys(transformedMediaTypes).length === 0) { + cacheHits === 0 && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, "(").concat(adUnitInstance, ") => Ad unit disabled since there are no active media types after sizeConfig filtration.")); + return result; + } + + result.push(adUnit.bids.filter(function (bid) { + return bid.bidder === bidderCode; + }).reduce(function (bids, bid) { + if (internal.isLabelActivated(bid, labels, adUnit.code, adUnitInstance)) { + // handle native params + var nativeParams = adUnit.nativeParams || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](adUnit, 'mediaTypes.native'); + + if (nativeParams) { + bid = _extends({}, bid, { + nativeParams: Object(__WEBPACK_IMPORTED_MODULE_1__src_native_js__["g" /* processNativeAdUnitParams */])(nativeParams) + }); + } + + bid = _extends({}, bid, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDefinedParams"](adUnit, ['mediaType', 'renderer'])); + + if (bid.sizeConfig) { + var relevantMediaTypes = internal.getRelevantMediaTypesForBidder(bid.sizeConfig, activeViewport); + + if (relevantMediaTypes.length === 0) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, "(").concat(adUnitInstance, "), Bidder: ").concat(bidderCode, " => 'sizeConfig' is not configured properly. This bidder won't be eligible for sizeConfig checks and will remail active.")); + bid = _extends({}, bid); + } else if (relevantMediaTypes[0] !== 'none') { + var bidderMediaTypes = Object.keys(transformedMediaTypes).filter(function (mt) { + return relevantMediaTypes.indexOf(mt) > -1; + }).reduce(function (mediaTypes, mediaType) { + mediaTypes[mediaType] = transformedMediaTypes[mediaType]; + return mediaTypes; + }, {}); + + if (Object.keys(bidderMediaTypes).length > 0) { + bid = _extends({}, bid, { + mediaTypes: bidderMediaTypes + }); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, "(").concat(adUnitInstance, "), Bidder: ").concat(bid.bidder, " => 'relevantMediaTypes' does not match with any of the active mediaTypes at the Ad Unit level. This bidder is disabled.")); + return bids; + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, "(").concat(adUnitInstance, "), Bidder: ").concat(bid.bidder, " => 'relevantMediaTypes' is set to 'none' in sizeConfig for current viewport size. This bidder is disabled.")); + return bids; + } + } + + bids.push(_extends({}, bid, { + adUnitCode: adUnit.code, + transactionId: adUnit.transactionId, + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](transformedMediaTypes, 'banner.sizes') || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](transformedMediaTypes, 'video.playerSize') || [], + mediaTypes: bid.mediaTypes || transformedMediaTypes, + bidId: bid.bid_id || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + bidderRequestId: bidderRequestId, + auctionId: auctionId, + src: src, + bidRequestsCount: __WEBPACK_IMPORTED_MODULE_2__src_adUnits_js__["a" /* adunitCounter */].getRequestsCounter(adUnit.code), + bidderRequestsCount: __WEBPACK_IMPORTED_MODULE_2__src_adUnits_js__["a" /* adunitCounter */].getBidderRequestsCounter(adUnit.code, bid.bidder), + bidderWinsCount: __WEBPACK_IMPORTED_MODULE_2__src_adUnits_js__["a" /* adunitCounter */].getBidderWinsCounter(adUnit.code, bid.bidder) + })); + return bids; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, "(").concat(adUnitInstance, "), Bidder: ").concat(bid.bidder, " => Label check for this bidder has failed. This bidder is disabled.")); + return bids; + } + }, [])); + } else { + cacheHits === 0 && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, "(").concat(adUnitInstance, ") => Ad unit is disabled due to failing label check.")); + } + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("Size Mapping V2:: Ad Unit: ".concat(adUnit.code, " => Ad unit has declared invalid 'mediaTypes' or has not declared a 'mediaTypes' property")); + return result; + } + + return result; + }, []).reduce(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["flatten"], []).filter(function (val) { + return val !== ''; + }); +} + +/***/ }) + +},[692]); \ No newline at end of file diff --git a/build/dist/slimcutBidAdapter.js b/build/dist/slimcutBidAdapter.js new file mode 100644 index 00000000000..9b1c39b309e --- /dev/null +++ b/build/dist/slimcutBidAdapter.js @@ -0,0 +1,151 @@ +pbjsChunk([104],{ + +/***/ 694: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(695); + + +/***/ }), + +/***/ 695: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_ajax_js__ = __webpack_require__(4); + + + +var BIDDER_CODE = 'slimcut'; +var ENDPOINT_URL = 'https://sb.freeskreen.com/pbr'; +var spec = { + code: BIDDER_CODE, + aliases: ['scm'], + supportedMediaTypes: ['video', 'banner'], + + /** + * 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 isValid = false; + + if (typeof bid.params !== 'undefined' && !isNaN(parseInt(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getValue"](bid.params, 'placementId'))) && parseInt(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getValue"](bid.params, 'placementId')) > 0) { + isValid = true; + } + + return isValid; + }, + + /** + * 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 bids = validBidRequests.map(buildRequestObject); + var payload = { + referrer: getReferrerInfo(bidderRequest), + data: bids, + deviceWidth: screen.width + }; + var gdpr = bidderRequest.gdprConsent; + + if (bidderRequest && gdpr) { + var isCmp = typeof gdpr.gdprApplies === 'boolean'; + var isConsentString = typeof gdpr.consentString === 'string'; + payload.gdpr_iab = { + consent: isConsentString ? gdpr.consentString : '', + status: isCmp ? gdpr.gdprApplies : -1 + }; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: ENDPOINT_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, request) { + var bidResponses = []; + serverResponse = serverResponse.body; + + if (serverResponse.responses) { + serverResponse.responses.forEach(function (bid) { + var bidResponse = { + cpm: bid.cpm, + width: bid.width, + height: bid.height, + currency: bid.currency, + netRevenue: bid.netRevenue, + ttl: bid.ttl, + ad: bid.ad, + requestId: bid.requestId, + creativeId: bid.creativeId, + transactionId: bid.tranactionId, + winUrl: bid.winUrl + }; + bidResponses.push(bidResponse); + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: 'https://sb.freeskreen.com/async_usersync.html' + }]; + } + + return []; + }, + onBidWon: function onBidWon(bid) { + Object(__WEBPACK_IMPORTED_MODULE_2__src_ajax_js__["a" /* ajax */])(bid.winUrl + bid.cpm, null); + } +}; + +function buildRequestObject(bid) { + var reqObj = {}; + var placementId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getValue"](bid.params, 'placementId'); + reqObj.sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes); + reqObj.bidId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidId', bid); + reqObj.bidderRequestId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidderRequestId', bid); + reqObj.placementId = parseInt(placementId); + reqObj.adUnitCode = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('adUnitCode', bid); + reqObj.auctionId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('auctionId', bid); + reqObj.transactionId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('transactionId', bid); + return reqObj; +} + +function getReferrerInfo(bidderRequest) { + var ref = window.location.href; + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + ref = bidderRequest.refererInfo.referer; + } + + return ref; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[694]); \ No newline at end of file diff --git a/build/dist/smaatoBidAdapter.js b/build/dist/smaatoBidAdapter.js new file mode 100644 index 00000000000..5e62389b1df --- /dev/null +++ b/build/dist/smaatoBidAdapter.js @@ -0,0 +1,291 @@ +pbjsChunk([103],{ + +/***/ 696: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(697); + + +/***/ }), + +/***/ 697: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + +var BIDDER_CODE = 'smaato'; +var SMAATO_ENDPOINT = 'https://prebid.ad.smaato.net/oapi/prebid'; +var CLIENT = "prebid_js_4.2.0_1.0"; +/** +* Transform BidRequest to OpenRTB-formatted BidRequest Object +* @param {Array} validBidRequests +* @param {any} bidderRequest +* @returns {string} +*/ + +var buildOpenRtbBidRequestPayload = function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) { + /** + * Turn incoming prebid sizes into openRtb format mapping. + * @param {*} sizes in format [[10, 10], [20, 20]] + * @returns array of openRtb format mappings [{w: 10, h: 10}, {w: 20, h: 20}] + */ + var parseSizes = function parseSizes(sizes) { + return sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }); + }; + + var imp = validBidRequests.map(function (br) { + var bannerMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](br, 'mediaTypes.banner'); + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](br, 'mediaTypes.video'); + var result = { + id: br.bidId, + tagid: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](br, 'params.adspaceId') + }; + + if (bannerMediaType) { + var sizes = parseSizes(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getAdUnitSizes"](br)); + result.banner = { + w: sizes[0].w, + h: sizes[0].h, + format: sizes + }; + } + + if (videoMediaType) { + result.video = { + mimes: videoMediaType.mimes, + minduration: videoMediaType.minduration, + startdelay: videoMediaType.startdelay, + linearity: videoMediaType.linearity, + w: videoMediaType.playerSize[0][0], + h: videoMediaType.playerSize[0][1], + maxduration: videoMediaType.maxduration, + skip: videoMediaType.skip, + protocols: videoMediaType.protocols, + ext: { + rewarded: videoMediaType.ext && videoMediaType.ext.rewarded ? videoMediaType.ext.rewarded : 0 + }, + skipmin: videoMediaType.skipmin, + api: videoMediaType.api + }; + } + + return result; + }); + var request = { + id: bidderRequest.auctionId, + at: 1, + imp: imp, + cur: ['USD'], + tmax: bidderRequest.timeout, + site: { + id: window.location.hostname, + publisher: { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.publisherId') + }, + domain: window.location.hostname, + page: window.location.href, + ref: bidderRequest.refererInfo.referer + }, + device: { + language: navigator && navigator.language ? navigator.language.split('-')[0] : '', + ua: navigator.userAgent, + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0, + h: screen.height, + w: screen.width + }, + regs: { + coppa: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa') === true ? 1 : 0, + ext: {} + }, + user: { + ext: {} + }, + ext: { + client: CLIENT + } + }; + + _extends(request.user, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.user')); + + _extends(request.site, __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('fpd.context')); + + if (bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies === true) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + } + + if (bidderRequest.uspConsent !== undefined) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](request, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[SMAATO] OpenRTB Request:', request); + return JSON.stringify(request); +}; + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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 _typeof(bid.params) === 'object' && typeof bid.params.publisherId === 'string' && typeof bid.params.adspaceId === 'string'; + }, + + /** + * 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[SMAATO] Client version:', CLIENT); + return { + method: 'POST', + url: validBidRequests[0].params.endpoint || SMAATO_ENDPOINT, + data: buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest), + options: { + withCredentials: true, + crossOrigin: true + } + }; + }, + + /** + * 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) { + // response is empty (HTTP 204) + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](serverResponse.body)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[SMAATO] Empty response body HTTP 204, no bids'); + return []; // no bids + } + + var serverResponseHeaders = serverResponse.headers; + var smtAdType = serverResponseHeaders.get('X-SMT-ADTYPE'); + var smtExpires = serverResponseHeaders.get('X-SMT-Expires'); + var ttlSec = 300; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[SMAATO] Expires:', smtExpires); + + if (smtExpires) { + ttlSec = Math.floor((smtExpires - Date.now()) / 1000); + } + + var res = serverResponse.body; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[SMAATO] OpenRTB Response:', res); + var bids = []; + res.seatbid.forEach(function (sb) { + sb.bid.forEach(function (b) { + var resultingBid = { + requestId: b.impid, + cpm: b.price || 0, + width: b.w, + height: b.h, + ttl: ttlSec, + creativeId: b.crid, + dealId: b.dealid || null, + netRevenue: true, + currency: res.cur, + meta: { + advertiserDomains: b.adomain, + networkName: b.bidderName, + agencyId: sb.seat + } + }; + + switch (smtAdType) { + case 'Img': + resultingBid.ad = createImgAd(b.adm); + resultingBid.meta.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + bids.push(resultingBid); + break; + + case 'Richmedia': + resultingBid.ad = createRichmediaAd(b.adm); + resultingBid.meta.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + bids.push(resultingBid); + break; + + case 'Video': + resultingBid.vastXml = b.adm; + resultingBid.meta.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + bids.push(resultingBid); + break; + + default: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[SMAATO] Invalid ad type:', smtAdType); + } + }); + }); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[SMAATO] Prebid bids:', bids); + return bids; + }, + + /** + * 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, gdprConsent, uspConsent) { + var syncs = []; + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +var createImgAd = function createImgAd(adm) { + var image = JSON.parse(adm).image; + var clickEvent = ''; + image.clicktrackers.forEach(function (src) { + clickEvent += "fetch(decodeURIComponent('".concat(encodeURIComponent(src), "'), {cache: 'no-cache'});"); + }); + var markup = "
"); + image.impressiontrackers.forEach(function (src) { + markup += "\"\""); + }); + return markup + '
'; +}; + +var createRichmediaAd = function createRichmediaAd(adm) { + var rich = JSON.parse(adm).richmedia; + var clickEvent = ''; + rich.clicktrackers.forEach(function (src) { + clickEvent += "fetch(decodeURIComponent('".concat(encodeURIComponent(src), "'), {cache: 'no-cache'});"); + }); + var markup = "
").concat(rich.mediadata.content); + rich.impressiontrackers.forEach(function (src) { + markup += "\"\""); + }); + return markup + '
'; +}; + +/***/ }) + +},[696]); \ No newline at end of file diff --git a/build/dist/smartadserverBidAdapter.js b/build/dist/smartadserverBidAdapter.js new file mode 100644 index 00000000000..93c2e1cf0ef --- /dev/null +++ b/build/dist/smartadserverBidAdapter.js @@ -0,0 +1,380 @@ +pbjsChunk([11],{ + +/***/ 44: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = createEidsArray; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); + // Each user-id sub-module is expected to mention respective config here + +var USER_IDS_CONFIG = { + // key-name : {config} + // intentIqId + 'intentIqId': { + source: 'intentiq.com', + atype: 1 + }, + // pubCommonId + 'pubcid': { + source: 'pubcid.org', + atype: 1 + }, + // unifiedId + 'tdid': { + source: 'adserver.org', + atype: 1, + getUidExt: function getUidExt() { + return { + rtiPartner: 'TDID' + }; + } + }, + // id5Id + 'id5id': { + source: 'id5-sync.com', + atype: 1 + }, + // parrableId + 'parrableId': { + source: 'parrable.com', + atype: 1, + getValue: function getValue(parrableId) { + if (parrableId.eid) { + return parrableId.eid; + } + + if (parrableId.ccpaOptout) { + // If the EID was suppressed due to a non consenting ccpa optout then + // we still wish to provide this as a reason to the adapters + return ''; + } + + return null; + }, + getUidExt: function getUidExt(parrableId) { + var extendedData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["pick"](parrableId, ['ibaOptout', 'ccpaOptout']); + + if (Object.keys(extendedData).length) { + return extendedData; + } + } + }, + // identityLink + 'idl_env': { + source: 'liveramp.com', + atype: 1 + }, + // liveIntentId + 'lipb': { + getValue: function getValue(data) { + return data.lipbid; + }, + source: 'liveintent.com', + atype: 1, + getEidExt: function getEidExt(data) { + if (Array.isArray(data.segments) && data.segments.length) { + return { + segments: data.segments + }; + } + } + }, + // britepoolId + 'britepoolid': { + source: 'britepool.com', + atype: 1 + }, + // lotamePanoramaId + lotamePanoramaId: { + source: 'crwdcntrl.net', + atype: 1 + }, + // criteo + 'criteoId': { + source: 'criteo.com', + atype: 1 + }, + // NetId + 'netId': { + source: 'netid.de', + atype: 1 + }, + // sharedid + 'sharedid': { + source: 'sharedid.org', + atype: 1, + getValue: function getValue(data) { + return data.id; + }, + getUidExt: function getUidExt(data) { + return data && data.third ? { + third: data.third + } : undefined; + } + } +}; // this function will create an eid object for the given UserId sub-module + +function createEidObject(userIdData, subModuleKey) { + var conf = USER_IDS_CONFIG[subModuleKey]; + + if (conf && userIdData) { + var eid = {}; + eid.source = conf['source']; + var value = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getValue']) ? conf['getValue'](userIdData) : userIdData; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value)) { + var uid = { + id: value, + atype: conf['atype'] + }; // getUidExt + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getUidExt'])) { + var uidExt = conf['getUidExt'](userIdData); + + if (uidExt) { + uid.ext = uidExt; + } + } + + eid.uids = [uid]; // getEidExt + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getEidExt'])) { + var eidExt = conf['getEidExt'](userIdData); + + if (eidExt) { + eid.ext = eidExt; + } + } + + return eid; + } + } + + return null; +} // this function will generate eids array for all available IDs in bidRequest.userId +// this function will be called by userId module +// if any adapter does not want any particular userId to be passed then adapter can use Array.filter(e => e.source != 'tdid') + + +function createEidsArray(bidRequestUserId) { + var eids = []; + + for (var subModuleKey in bidRequestUserId) { + if (bidRequestUserId.hasOwnProperty(subModuleKey)) { + var eid = createEidObject(bidRequestUserId[subModuleKey], subModuleKey); + + if (eid) { + eids.push(eid); + } + } + } + + return eids; +} + +/***/ }), + +/***/ 698: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(699); + + +/***/ }), + +/***/ 699: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__userId_eids_js__ = __webpack_require__(44); + + + + + +var BIDDER_CODE = 'smartadserver'; +var spec = { + code: BIDDER_CODE, + aliases: ['smart'], + // short code + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* 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 && bid.params.siteId && bid.params.pageId && bid.params.formatId); + }, + + /** + * Serialize a supply chain object to a string uri encoded + * + * @param {*} schain object + */ + serializeSupplyChain: function serializeSupplyChain(schain) { + if (!schain || !schain.nodes) return null; + var nodesProperties = ['asi', 'sid', 'hp', 'rid', 'name', 'domain']; + return "".concat(schain.ver, ",").concat(schain.complete, "!") + schain.nodes.map(function (node) { + return nodesProperties.map(function (prop) { + return node[prop] ? encodeURIComponent(node[prop]) : ''; + }).join(','); + }).join('!'); + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests an array of bids + * @param {BidderRequest} bidderRequest bidder request object + * @return {ServerRequest[]} Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + // 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) { + // Common bid request attributes for banner, outstream and instream. + var payload = { + siteid: bid.params.siteId, + pageid: bid.params.pageId, + formatid: bid.params.formatId, + currencyCode: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency'), + bidfloor: bid.params.bidfloor || 0.0, + targeting: bid.params.target && bid.params.target !== '' ? bid.params.target : undefined, + buid: bid.params.buId && bid.params.buId !== '' ? bid.params.buId : undefined, + appname: bid.params.appName && bid.params.appName !== '' ? bid.params.appName : undefined, + ckid: bid.params.ckId || 0, + tagId: bid.adUnitCode, + pageDomain: bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer ? bidderRequest.refererInfo.referer : undefined, + transactionId: bid.transactionId, + timeout: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout'), + bidId: bid.bidId, + prebidVersion: "4.2.0", + schain: spec.serializeSupplyChain(bid.schain) + }; + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); + + if (!videoMediaType) { + var bannerMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner'); + payload.sizes = bannerMediaType.sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }); + } else if (videoMediaType && videoMediaType.context === 'instream') { + // Specific attributes for instream. + var playerSize = videoMediaType.playerSize[0]; + payload.isVideo = true; + payload.videoData = { + videoProtocol: bid.params.video.protocol, + playerWidth: playerSize[0], + playerHeight: playerSize[1], + adBreak: bid.params.video.startDelay || 1 + }; + } else { + return {}; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + payload.gdpr = bidderRequest.gdprConsent.gdprApplies; // we're handling the undefined case server side + } + + if (bid && bid.userId) { + payload.eids = Object(__WEBPACK_IMPORTED_MODULE_4__userId_eids_js__["a" /* createEidsArray */])(bid.userId); + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: (bid.params.domain !== undefined ? bid.params.domain : 'https://prg.smartadserver.com') + '/prebid/v1', + data: payloadString + }; + }); + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {*} serverResponse A successful response from the server. + * @param {*} bidRequestString + * @return {Bid[]} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, bidRequestString) { + var bidResponses = []; + var response = serverResponse.body; + + try { + if (response) { + var bidRequest = JSON.parse(bidRequestString.data); + var bidResponse = { + requestId: bidRequest.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 + }; + + if (bidRequest.isVideo) { + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.vastUrl = response.adUrl; + bidResponse.vastXml = response.ad; + } else { + bidResponse.adUrl = response.adUrl; + bidResponse.ad = response.ad; + } + + bidResponses.push(bidResponse); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error while parsing smart server response', error); + } + + return bidResponses; + }, + + /** + * User syncs. + * + * @param {*} syncOptions Publisher prebid configuration. + * @param {*} serverResponses A successful response from the server. + * @return {syncs[]} An array of syncs that should be executed. + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.iframeEnabled && serverResponses.length > 0) { + syncs.push({ + type: 'iframe', + url: serverResponses[0].body.cSyncUrl + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[698]); \ No newline at end of file diff --git a/build/dist/smartrtbBidAdapter.js b/build/dist/smartrtbBidAdapter.js new file mode 100644 index 00000000000..3fd9237ef3b --- /dev/null +++ b/build/dist/smartrtbBidAdapter.js @@ -0,0 +1,152 @@ +pbjsChunk([102],{ + +/***/ 700: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(701); + + +/***/ }), + +/***/ 701: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + +var BIDDER_CODE = 'smartrtb'; + +function getDomain() { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["inIframe"]()) { + return window.location.hostname; + } + + var origins = window.document.location.ancestorOrigins; + + if (origins && origins.length > 0) { + return origins[origins.length - 1]; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['banner', 'video'], + aliases: ['smrtb'], + isBidRequestValid: function isBidRequestValid(bid) { + return bid.params.pubId !== null && bid.params.medId !== null && bid.params.zoneId !== null; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var stack = bidderRequest.refererInfo && bidderRequest.refererInfo.stack ? bidderRequest.refererInfo : []; + var spb = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('userSync') && __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('userSync').syncsPerBidder ? __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('userSync').syncsPerBidder : 5; + var payload = { + start_time: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["timestamp"](), + language: window.navigator.userLanguage || window.navigator.language, + site: { + domain: getDomain(), + iframe: !bidderRequest.refererInfo.reachedTop, + url: stack && stack.length > 0 ? [stack.length - 1] : null, + https: window.location.protocol === 'https:', + referrer: bidderRequest.refererInfo.referer + }, + imps: [], + user_ids: validBidRequests[0].userId, + sync_limit: spb + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr = { + applies: bidderRequest.gdprConsent.gdprApplies, + consent: bidderRequest.gdprConsent.consentString + }; + } + + for (var x = 0; x < validBidRequests.length; x++) { + var req = validBidRequests[x]; + payload.imps.push({ + zone_id: req.params.zoneId, + bid_id: req.bidId, + imp_id: req.transactionId, + sizes: req.sizes, + force_bid: req.params.forceBid, + media_types: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](req, 'mediaTypes'), + has_renderer: req.renderer !== undefined + }); + } + + var params = validBidRequests[0].params; + var url = params.endpoint ? params.endpoint : 'https://market-global.smrtb.com/json/publisher/prebid'; + return { + method: 'POST', + url: url, + data: JSON.stringify(payload) + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + + if (!serverResponse || !serverResponse.body) { + return bidResponses; + } + + var res = serverResponse.body; + + if (!res.bids || !res.bids.length) { + return []; + } + + for (var x = 0; x < serverResponse.body.bids.length; x++) { + var bid = serverResponse.body.bids[x]; + bidResponses.push({ + requestId: bid.bid_id, + cpm: bid.cpm, + width: bid.w, + height: bid.h, + ad: bid.html, + vastUrl: bid.vast_url, + vastXml: bid.vast_xml, + mediaType: bid.html ? 'banner' : 'video', + ttl: 120, + creativeId: bid.crid, + dealId: bid.deal_id, + netRevenue: true, + currency: 'USD' + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (!serverResponses.length || !serverResponses[0].body) { + return syncs; + } + + var pixels = serverResponses[0].body.pixels; + + if (!pixels || !pixels.length) { + return syncs; + } + + for (var x = 0; x < pixels.length; x++) { + var pixel = pixels[x]; + + if (pixel.type === 'iframe' && syncOptions.iframeEnabled || pixel.type === 'image' && syncOptions.pixelEnabled) { + syncs.push(pixel); + } + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[700]); \ No newline at end of file diff --git a/build/dist/smartyadsBidAdapter.js b/build/dist/smartyadsBidAdapter.js new file mode 100644 index 00000000000..9d9915728d2 --- /dev/null +++ b/build/dist/smartyadsBidAdapter.js @@ -0,0 +1,138 @@ +pbjsChunk([101],{ + +/***/ 702: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(703); + + +/***/ }), + +/***/ 703: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'smartyads'; +var AD_URL = 'https://ssp-nj.webtradehub.com/?c=o&m=multi'; +var URL_SYNC = 'https://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 __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + return Boolean(bid.native && bid.native.title && bid.native.image && bid.native.impressionTrackers); + + default: + return false; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* 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 bidderRequest = arguments.length > 1 ? arguments[1] : undefined; + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + var placements = []; + var request = { + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'language': navigator && navigator.language ? navigator.language : '', + 'secure': 1, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + request.language.indexOf('-') != -1 && (request.language = request.language.split('-')[0]); + + if (bidderRequest) { + if (bidderRequest.uspConsent) { + request.ccpa = bidderRequest.uspConsent; + } + + if (bidderRequest.gdprConsent) { + request.gdpr = bidderRequest.gdprConsent; + } + } + + var len = validBidRequests.length; + + for (var i = 0; i < len; i++) { + var bid = validBidRequests[i]; + var traff = bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + placements.push({ + placementId: bid.params.placementId, + bidId: bid.bidId, + sizes: bid.mediaTypes && bid.mediaTypes[traff] && bid.mediaTypes[traff].sizes ? bid.mediaTypes[traff].sizes : [], + traffic: traff + }); + + if (bid.schain) { + placements.schain = bid.schain; + } + } + + return { + method: 'POST', + url: AD_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)) { + response.push(resItem); + } + } + + return response; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + return [{ + type: 'image', + url: URL_SYNC + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[702]); \ No newline at end of file diff --git a/build/dist/smilewantedBidAdapter.js b/build/dist/smilewantedBidAdapter.js new file mode 100644 index 00000000000..0419e1b7fc0 --- /dev/null +++ b/build/dist/smilewantedBidAdapter.js @@ -0,0 +1,193 @@ +pbjsChunk([100],{ + +/***/ 704: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(705); + + +/***/ }), + +/***/ 705: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); + + + + + +var spec = { + code: 'smilewanted', + aliases: ['smile', 'sw'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* 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 && bid.params.zoneId); + }, + + /** + * 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, bidderRequest) { + return validBidRequests.map(function (bid) { + var payload = { + zoneId: bid.params.zoneId, + currencyCode: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency') || 'EUR', + bidfloor: bid.params.bidfloor || 0.0, + tagId: bid.adUnitCode, + sizes: bid.sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }), + transactionId: bid.transactionId, + timeout: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout'), + bidId: bid.bidId, + prebidVersion: "4.2.0" + }; + + if (bidderRequest && bidderRequest.refererInfo) { + payload.pageDomain = bidderRequest.refererInfo.referer || ''; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + payload.gdpr = bidderRequest.gdprConsent.gdprApplies; // we're handling the undefined case server side + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: 'https://prebid.smilewanted.com', + 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, + ad: response.ad + }; + + if (response.formatTypeSw == 'video_instream' || response.formatTypeSw == 'video_outstream') { + bidResponse['mediaType'] = 'video'; + bidResponse['vastUrl'] = response.ad; + bidResponse['ad'] = null; + } + + if (response.formatTypeSw == 'video_outstream') { + bidResponse['renderer'] = newRenderer(JSON.parse(bidRequest.data), response); + } + + bidResponses.push(bidResponse); + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Error while parsing smilewanted response', error); + } + + return bidResponses; + }, + + /** + * User syncs. + * + * @param {*} syncOptions Publisher prebid configuration. + * @param {*} serverResponses A successful response from the server. + * @return {Syncs[]} An array of syncs that should be executed. + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.iframeEnabled && serverResponses.length > 0) { + if (serverResponses[0].body.cSyncUrl === 'https://csync.smilewanted.com') { + syncs.push({ + type: 'iframe', + url: serverResponses[0].body.cSyncUrl + }); + } + } + + return syncs; + } +}; +/** + * Create SmileWanted renderer + * @param requestId + * @returns {*} + */ + +function newRenderer(bidRequest, bidResponse) { + var renderer = __WEBPACK_IMPORTED_MODULE_1__src_Renderer_js__["a" /* Renderer */].install({ + id: bidRequest.bidId, + url: bidResponse.OustreamTemplateUrl, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on newRenderer', err); + } + + return renderer; +} +/** + * Initialise SmileWanted outstream + * @param bid + */ + + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.SmileWantedOutStreamInit({ + width: bid.width, + height: bid.height, + vastUrl: bid.vastUrl, + elId: bid.adUnitCode + }); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_3__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[704]); \ No newline at end of file diff --git a/build/dist/smmsBidAdapter.js b/build/dist/smmsBidAdapter.js new file mode 100644 index 00000000000..6de64a769fa --- /dev/null +++ b/build/dist/smmsBidAdapter.js @@ -0,0 +1,188 @@ +pbjsChunk([99],{ + +/***/ 706: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(707); + + +/***/ }), + +/***/ 707: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["_getUrlVars"] = _getUrlVars; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var BIDDER_CODE = 'smms'; +var ENDPOINT_BANNER = 'https://bidder.mediams.mb.softbank.jp/api/v1/prebid/banner'; +var ENDPOINT_NATIVE = 'https://bidder.mediams.mb.softbank.jp/api/v1/prebid/native'; +var COOKIE_SYNC_URL = 'https://bidder.mediams.mb.softbank.jp/api/v1/cookie/gen'; +var SUPPORTED_MEDIA_TYPES = ['banner', 'native']; +var SUPPORTED_CURRENCIES = ['USD', 'JPY']; +var DEFAULT_CURRENCY = 'JPY'; +var NET_REVENUE = true; + +function _encodeURIComponent(a) { + var b = window.encodeURIComponent(a); + b = b.replace(/'/g, '%27'); + return b; +} + +function _getUrlVars(url) { + var hash; + var myJson = {}; + var hashes = url.slice(url.indexOf('?') + 1).split('&'); + + for (var i = 0; i < hashes.length; i++) { + hash = hashes[i].split('='); + myJson[hash[0]] = hash[1]; + } + + return myJson; +} +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: SUPPORTED_MEDIA_TYPES, + isBidRequestValid: function isBidRequestValid(bid) { + var valid = !!bid.params.placementId; + + if (valid && bid.params.hasOwnProperty('currency')) { + if (SUPPORTED_CURRENCIES.indexOf(bid.params.currency) === -1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Invalid currency type, we support only JPY and USD!'); + valid = false; + } + } + + return valid; + }, + + /** + * 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 serverRequests = []; + var refererInfo; + + if (bidderRequest && bidderRequest.refererInfo) { + refererInfo = bidderRequest.refererInfo; + } // eslint-disable-next-line no-undef + + + var g = typeof geparams !== 'undefined' && (typeof geparams === "undefined" ? "undefined" : _typeof(geparams)) == 'object' && geparams ? geparams : {}; + validBidRequests.forEach(function (bid, i) { + var endpoint = ENDPOINT_BANNER; + var data = { + 'placementid': bid.params.placementId, + 'cur': bid.params.hasOwnProperty('currency') ? bid.params.currency : DEFAULT_CURRENCY, + 'ua': navigator.userAgent, + 'adtk': _encodeURIComponent(g.lat ? '0' : '1'), + 'loc': refererInfo && refererInfo.referer ? refererInfo.referer : '', + 'topframe': window.parent == window.self ? 1 : 0, + 'sw': screen && screen.width, + 'sh': screen && screen.height, + 'cb': Math.floor(Math.random() * 99999999999), + 'tpaf': 1, + 'cks': 1, + 'requestid': bid.bidId, + 'referer': refererInfo && refererInfo.referer ? refererInfo.referer : '' + }; + + if (bid.hasOwnProperty('nativeParams')) { + endpoint = ENDPOINT_NATIVE; + data.tkf = 1; // return url tracker + + data.ad_track = '1'; + data.apiv = '1.1.0'; + } + + serverRequests.push({ + method: 'GET', + url: endpoint, + data: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](data) + }); + }); + return serverRequests; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var data = _getUrlVars(request.data); + + var successBid = serverResponse.body || {}; + var bidResponses = []; + + if (successBid.hasOwnProperty(data.placementid)) { + var bid = successBid[data.placementid]; + var bidResponse = { + requestId: bid.requestid, + cpm: bid.price, + creativeId: bid.creativeId, + currency: bid.cur, + netRevenue: NET_REVENUE, + ttl: 700 + }; + + if (bid.hasOwnProperty('title')) { + // it is native ad response + bidResponse.mediaType = 'native'; + bidResponse.native = { + title: bid.title, + body: bid.description, + cta: bid.cta, + sponsoredBy: bid.advertiser, + clickUrl: _encodeURIComponent(bid.landingURL), + impressionTrackers: bid.trackings + }; + + if (bid.screenshots) { + bidResponse.native.image = { + url: bid.screenshots.url, + height: bid.screenshots.height, + width: bid.screenshots.width + }; + } + + if (bid.icon) { + bidResponse.native.icon = { + url: bid.icon.url, + height: bid.icon.height, + width: bid.icon.width + }; + } + } else { + bidResponse.ad = bid.adm; + bidResponse.width = bid.width; + bidResponse.height = bid.height; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + syncs.push({ + type: 'image', + url: COOKIE_SYNC_URL + }); + return syncs; + }, + onTimeout: function onTimeout(timeoutData) {}, + onBidWon: function onBidWon(bid) {}, + onSetTargeting: function onSetTargeting(bid) {} +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[706]); \ No newline at end of file diff --git a/build/dist/somoBidAdapter.js b/build/dist/somoBidAdapter.js new file mode 100644 index 00000000000..f29ca8553cb --- /dev/null +++ b/build/dist/somoBidAdapter.js @@ -0,0 +1,325 @@ +pbjsChunk([98],{ + +/***/ 708: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(709); + + +/***/ }), + +/***/ 709: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var VIDEO_TARGETING = ['mimes', 'minduration', 'maxduration', 'protocols', 'startdelay', 'linearity', 'skip', 'delivery', 'pos', 'api', 'ext', 'battr']; +var BANNER_TARGETING = ['battr', 'btype', 'pos', 'mimes', 'ext']; +var SITE_TARGETING = ['name', 'domain', 'cat', 'keywords', 'content']; +var APP_TARGETING = ['name', 'bundle', 'domain', 'storeUrl', 'cat', 'ver', 'keywords', 'content']; +var spec = { + code: 'somo', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + aliases: ['somoaudience'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.placementId); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + return bidRequests.map(function (bidRequest) { + var da = openRtbRequest(bidRequest, bidderRequest); + return { + method: 'POST', + url: 'https://publisher-east.mobileadtrading.com/rtb/bid?s=' + bidRequest.params.placementId.toString(), + data: da, + bidRequest: bidRequest + }; + }); + }, + interpretResponse: function interpretResponse(response, request) { + return bidResponseAvailable(request, response); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent) { + var syncs = []; + var url = 'https://publisher-east.mobileadtrading.com/usersync'; + + if (syncOptions.pixelEnabled) { + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + // add 'gdpr' only if 'gdprApplies' is defined + if (typeof gdprConsent.gdprApplies === 'boolean') { + url += "?gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } + } + + syncs.push({ + type: 'image', + url: url + }); + } + + return syncs; + } +}; + +function bidResponseAvailable(bidRequest, bidResponse) { + var bidResponses = []; + + if (bidResponse.body) { + var bidData = bidResponse.body.seatbid[0].bid[0]; + var bid = { + requestId: bidResponse.body.id, + cpm: bidData.price, + width: bidData.w, + height: bidData.h, + ad: bidData.adm, + ttl: 360, + creativeId: bidData.crid, + adId: bidData.impid, + netRevenue: false, + currency: 'USD', + adUnitCode: bidRequest.bidRequest.adUnitCode + }; + + if (isVideo(bidRequest.bidRequest)) { + bid.vastXml = bidData.adm; + bid.mediaType = 'video'; + } else { + bid.ad = bidData.adm; + bid.mediaType = 'banner'; + } + + bidResponses.push(bid); + } + + return bidResponses; +} + +function openRtbRequest(bidRequest, bidderRequest) { + var openRtbRequest = { + id: bidRequest.bidId, + imp: [openRtbImpression(bidRequest)], + at: 1, + tmax: 400, + site: openRtbSite(bidRequest, bidderRequest), + app: openRtbApp(bidRequest), + device: openRtbDevice(), + bcat: openRtbBCat(bidRequest), + badv: openRtbBAdv(bidRequest), + ext: { + prebid: "4.2.0" + } + }; + + if (typeof bidderRequest !== 'undefined') { + openRtbRequest = populateOpenRtbGdpr(bidderRequest.gdprConsent, openRtbRequest); + } + + return openRtbRequest; +} + +function populateOpenRtbGdpr(gdpr, bidRequest) { + if (gdpr && bidRequest && 'gdprApplies' in gdpr) { + if (!('reqs' in bidRequest)) { + bidRequest.reqs = {}; + } + + if (!('ext' in bidRequest.reqs)) { + bidRequest.reqs.ext = {}; + } + + bidRequest.reqs.ext.gdpr = gdpr.gdprApplies; + + if ('consentString' in gdpr) { + if (!('user' in bidRequest)) { + bidRequest.user = {}; + } + + if (!('ext' in bidRequest.user)) { + bidRequest.user.ext = {}; + } + + bidRequest.user.ext.consent = gdpr.consentString; + } + } + + return bidRequest; +} + +function openRtbImpression(bidRequest) { + var imp = { + 'id': bidRequest.bidId, + bidfloor: bidRequest.params.bidfloor || 0 + }; + + if (isVideo(bidRequest)) { + imp.video = {}; + + if (bidRequest.mediaTypes && bidRequest.mediaTypes.video && bidRequest.mediaTypes.video.sizes) { + var sizes = getSizes(bidRequest.mediaTypes.video.sizes); + imp.video.w = sizes[0]; + imp.video.h = sizes[1]; + } + + if (bidRequest.params.video) { + Object.keys(bidRequest.params.video).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).forEach(function (param) { + return imp.video[param] = bidRequest.params.video[param]; + }); + } + } else { + imp.banner = { + topframe: 0 + }; + + if (bidRequest.mediaTypes && bidRequest.mediaTypes.banner && bidRequest.mediaTypes.banner.sizes) { + var _sizes = getSizes(bidRequest.mediaTypes.banner.sizes); + + imp.banner.w = _sizes[0]; + imp.banner.h = _sizes[1]; + } + + if (bidRequest.params.banner) { + Object.keys(bidRequest.params.banner).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(BANNER_TARGETING, param); + }).forEach(function (param) { + return imp.banner[param] = bidRequest.params.banner[param]; + }); + } + } + + return imp; +} + +function isApp(bidRequest) { + if (bidRequest.params.app) { + return true; + } else { + return false; + } +} + +function openRtbSite(bidRequest, bidderRequest) { + if (!isApp(bidRequest)) { + var site = {}; + + if (bidderRequest && bidderRequest.refererInfo) { + site.ref = bidderRequest.refererInfo.referer; + site.page = bidderRequest.refererInfo.canonicalUrl; + } + + if (bidRequest.params.site) { + Object.keys(bidRequest.params.site).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(SITE_TARGETING, param); + }).forEach(function (param) { + return site[param] = bidRequest.params.site[param]; + }); + } + + if (typeof site.domain === 'undefined' && typeof site.page !== 'undefined') { + if (typeof window.URL === 'function') { + site.domain = new window.URL(site.page).hostname; + } else { + site.domain = getDomainFromUrl(site.page); + } + } + + return site; + } else { + return null; + } +} + +function getDomainFromUrl(url) { + var domain = url; + + if (url.indexOf('//') > -1) { + domain = url.split('/')[2]; + } else { + domain = url.split('/')[0]; + } + + domain = domain.split(':')[0]; + domain = domain.split('?')[0]; + return domain; +} + +function openRtbApp(bidRequest) { + if (isApp(bidRequest)) { + var app = {}; + Object.keys(bidRequest.params.app).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(APP_TARGETING, param); + }).forEach(function (param) { + return app[param] = bidRequest.params.app[param]; + }); + return app; + } else { + return null; + } +} + +function openRtbDevice() { + return { + ip: 'check', + ua: navigator.userAgent, + language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage + }; +} + +function openRtbBCat(bidRequest) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidRequest.params.bcat)) { + return bidRequest.params.bcat; + } + + return []; +} + +function openRtbBAdv(bidRequest) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidRequest.params.badv)) { + return bidRequest.params.badv; + } + + return []; +} + +function isVideo(format) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](format, 'mediaTypes.video') || format.mediaType == 'video'; +} +/* Turn bid request sizes into compatible format */ + + +function getSizes(requestSizes) { + var width = 0; + var height = 0; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes) && requestSizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes[0])) { + width = parseInt(requestSizes[0], 10); + height = parseInt(requestSizes[1], 10); + } else if (_typeof(requestSizes) === 'object') { + for (var i = 0; i < requestSizes.length; i++) { + var size = requestSizes[i]; + width = parseInt(size[0], 10); + height = parseInt(size[1], 10); + break; + } + } + + return [width, height]; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[708]); \ No newline at end of file diff --git a/build/dist/sonobiAnalyticsAdapter.js b/build/dist/sonobiAnalyticsAdapter.js new file mode 100644 index 00000000000..03bb712df6b --- /dev/null +++ b/build/dist/sonobiAnalyticsAdapter.js @@ -0,0 +1,630 @@ +pbjsChunk([10],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 710: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(711); + + +/***/ }), + +/***/ 711: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 ajax = Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["b" /* ajaxBuilder */])(0); +var DEFAULT_EVENT_URL = 'apex.go.sonobi.com/keymaker'; +var analyticsType = 'endpoint'; +var QUEUE_TIMEOUT_DEFAULT = 200; +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT; +var initOptions = {}; +var auctionCache = {}; +var auctionTtl = 60 * 60 * 1000; + +function deleteOldAuctions() { + for (var auctionId in auctionCache) { + var auction = auctionCache[auctionId]; + + if (Date.now() - auction.start > auctionTtl) { + delete auctionCache[auctionId]; + } + } +} + +function buildAuctionEntity(args) { + return { + 'id': args.auctionId, + 'start': args.timestamp, + 'timeout': args.timeout, + 'adUnits': {}, + 'stats': {}, + 'queue': [], + 'qTimeout': false + }; +} + +function buildAdUnit(data) { + return "/".concat(initOptions.pubId, "/").concat(initOptions.siteId, "/").concat(data.adUnitCode.toLowerCase()); +} + +function getLatency(data) { + if (!data.responseTimestamp) { + return -1; + } else { + return data.responseTimestamp - data.requestTimestamp; + } +} + +function getBid(data) { + if (data.cpm) { + return Math.round(data.cpm * 100); + } else { + return 0; + } +} + +function buildItem(data, response) { + var phase = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var size = data.width ? { + width: data.width, + height: data.height + } : { + width: data.sizes[0][0], + height: data.sizes[0][1] + }; + return { + 'bidid': data.bidId || data.requestId, + 'p': phase, + 'buyerid': data.bidder.toLowerCase(), + 'bid': getBid(data), + 'adunit_code': buildAdUnit(data), + 's': "".concat(size.width, "x").concat(size.height), + 'latency': getLatency(data), + 'response': response, + 'jsLatency': getLatency(data), + 'buyername': data.bidder.toLowerCase() + }; +} + +function sendQueue(auctionId) { + var auction = auctionCache[auctionId]; + var data = auction.queue; + auction.queue = []; + auction.qTimeout = false; + sonobiAdapter.sendData(auction, data); +} + +function addToAuctionQueue(auctionId, id) { + var auction = auctionCache[auctionId]; + auction.queue = auction.queue.filter(function (item) { + if (item.bidid !== id) { + return true; + } + + return auction.stats[id].data.p !== item.p; + }); + auction.queue.push(utils.deepClone(auction.stats[id].data)); + + if (!auction.qTimeout) { + auction.qTimeout = setTimeout(function () { + sendQueue(auctionId); + }, initOptions.delay); + } +} + +function updateBidStats(auctionId, id, data) { + var auction = auctionCache[auctionId]; + auction.stats[id].data = _objectSpread(_objectSpread({}, auction.stats[id].data), data); + addToAuctionQueue(auctionId, id); + logInfo('Updated Bid Stats: ', auction.stats[id]); + return auction.stats[id]; +} + +function handleOtherEvents(eventType, args) { + logInfo('Other Event: ' + eventType, args); +} + +function handlerAuctionInit(args) { + auctionCache[args.auctionId] = buildAuctionEntity(args); + deleteOldAuctions(); + logInfo('Auction Init', args); +} + +function handlerBidRequested(args) { + var auction = auctionCache[args.auctionId]; + var data = []; + var phase = 1; + var response = 1; + args.bids.forEach(function (bidRequest) { + auction = auctionCache[bidRequest.auctionId]; + var built = buildItem(bidRequest, response, phase); + auction.stats[built.bidid] = { + id: built.bidid, + adUnitCode: bidRequest.adUnitCode, + data: built + }; + addToAuctionQueue(args.auctionId, built.bidid); + }); + logInfo('Bids Requested ', data); +} + +function handlerBidAdjustment(args) { + logInfo('Bid Adjustment', args); +} + +function handlerBidderDone(args) { + logInfo('Bidder Done', args); +} + +function handlerAuctionEnd(args) { + var winners = {}; + args.bidsReceived.forEach(function (bid) { + if (!winners[bid.adUnitCode]) { + winners[bid.adUnitCode] = { + bidId: bid.requestId, + cpm: bid.cpm + }; + } else if (winners[bid.adUnitCode].cpm < bid.cpm) { + winners[bid.adUnitCode] = { + bidId: bid.requestId, + cpm: bid.cpm + }; + } + }); + args.adUnitCodes.forEach(function (adUnitCode) { + if (winners[adUnitCode]) { + var bidId = winners[adUnitCode].bidId; + updateBidStats(args.auctionId, bidId, { + response: 4 + }); + } + }); + logInfo('Auction End', args); + logInfo('Auction Cache', auctionCache[args.auctionId].stats); +} + +function handlerBidWon(args) { + var auctionId = args.auctionId, + requestId = args.requestId; + var res = updateBidStats(auctionId, requestId, { + p: 3, + response: 6 + }); + logInfo('Bid Won ', args); + logInfo('Bid Update Result: ', res); +} + +function handlerBidResponse(args) { + var auctionId = args.auctionId, + requestId = args.requestId, + cpm = args.cpm, + size = args.size, + timeToRespond = args.timeToRespond; + updateBidStats(auctionId, requestId, { + bid: cpm, + s: size, + jsLatency: timeToRespond, + latency: timeToRespond, + p: 2, + response: 9 + }); + logInfo('Bid Response ', args); +} + +function handlerBidTimeout(args) { + var auctionId = args.auctionId, + bidId = args.bidId; + logInfo('Bid Timeout ', args); + updateBidStats(auctionId, bidId, { + p: 2, + response: 0, + latency: args.timeout, + jsLatency: args.timeout + }); +} + +var sonobiAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + url: DEFAULT_EVENT_URL, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + switch (eventType) { + case AUCTION_INIT: + handlerAuctionInit(args); + break; + + case BID_REQUESTED: + handlerBidRequested(args); + break; + + case BID_ADJUSTMENT: + handlerBidAdjustment(args); + break; + + case BIDDER_DONE: + handlerBidderDone(args); + break; + + case AUCTION_END: + handlerAuctionEnd(args); + break; + + case BID_WON: + handlerBidWon(args); + break; + + case BID_RESPONSE: + handlerBidResponse(args); + break; + + case BID_TIMEOUT: + handlerBidTimeout(args); + break; + + default: + handleOtherEvents(eventType, args); + break; + } + } +}); + +sonobiAdapter.originEnableAnalytics = sonobiAdapter.enableAnalytics; + +sonobiAdapter.enableAnalytics = function (config) { + if (this.initConfig(config)) { + logInfo('Analytics adapter enabled', initOptions); + sonobiAdapter.originEnableAnalytics(config); + } +}; + +sonobiAdapter.initConfig = function (config) { + var isCorrectConfig = true; + initOptions = {}; + initOptions.options = utils.deepClone(config.options); + initOptions.pubId = initOptions.options.pubId || null; + initOptions.siteId = initOptions.options.siteId || null; + initOptions.delay = initOptions.options.delay || QUEUE_TIMEOUT_DEFAULT; + + if (!initOptions.pubId) { + logError('"options.pubId" is empty'); + isCorrectConfig = false; + } + + if (!initOptions.siteId) { + logError('"options.siteId" is empty'); + isCorrectConfig = false; + } + + initOptions.server = DEFAULT_EVENT_URL; + initOptions.host = initOptions.options.host || window.location.hostname; + this.initOptions = initOptions; + return isCorrectConfig; +}; + +sonobiAdapter.getOptions = function () { + return initOptions; +}; + +sonobiAdapter.sendData = function (auction, data) { + var url = 'https://' + initOptions.server + '?pageviewid=' + auction.id + '&corscred=1&pubId=' + initOptions.pubId + '&siteId=' + initOptions.siteId; + ajax(url, function () { + logInfo('Auction [' + auction.id + '] sent ', data); + }, JSON.stringify(data), { + method: 'POST', + // withCredentials: true, + contentType: 'text/plain' + }); +}; + +function logInfo(message, meta) { + utils.logInfo(buildLogMessage(message), meta); +} + +function logError(message) { + utils.logError(buildLogMessage(message)); +} + +function buildLogMessage(message) { + return 'Sonobi Prebid Analytics: ' + message; +} + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: sonobiAdapter, + code: 'sonobi' +}); +/* harmony default export */ __webpack_exports__["default"] = (sonobiAdapter); + +/***/ }) + +},[710]); \ No newline at end of file diff --git a/build/dist/sonobiBidAdapter.js b/build/dist/sonobiBidAdapter.js new file mode 100644 index 00000000000..70f96652300 --- /dev/null +++ b/build/dist/sonobiBidAdapter.js @@ -0,0 +1,464 @@ +pbjsChunk([97],{ + +/***/ 712: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(713); + + +/***/ }), + +/***/ 713: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_isInbounds", function() { return _isInbounds; }); +/* harmony export (immutable) */ __webpack_exports__["_getPlatform"] = _getPlatform; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_userSync_js__ = __webpack_require__(43); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +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 = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["generateUUID"])(); +var OUTSTREAM_REDNERER_URL = 'https://mtrx.go.sonobi.com/sbi_outstream_renderer.js'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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.params) { + return false; + } + + if (!bid.params.ad_unit && !bid.params.placement_id) { + return false; + } + + if (!Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.banner') && !Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.video')) { + return false; + } + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.banner')) { + // Sonobi does not support multi type bids, favor banner over video + if (!Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.banner.sizes') && !bid.params.sizes) { + // sizes at the banner or params level is required. + return false; + } + } else if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.video')) { + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.video.context') === 'outstream' && !bid.params.sizes) { + // bids.params.sizes is required for outstream video adUnits + return false; + } + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.video.context') === 'instream' && !Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.video.playerSize')) { + // playerSize is required for instream adUnits. + return false; + } + } + + return true; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - an array of bids + * @return {object} ServerRequest - Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var bids = validBidRequests.map(function (bid) { + var slotIdentifier = _validateSlot(bid); + + if (/^[\/]?[\d]+[[\/].+[\/]?]?$/.test(slotIdentifier)) { + slotIdentifier = slotIdentifier.charAt(0) === '/' ? slotIdentifier : '/' + slotIdentifier; + return _defineProperty({}, "".concat(slotIdentifier, "|").concat(bid.bidId), "".concat(_validateSize(bid)).concat(_validateFloor(bid))); + } else if (/^[0-9a-fA-F]{20}$/.test(slotIdentifier) && slotIdentifier.length === 20) { + return _defineProperty({}, bid.bidId, "".concat(slotIdentifier, "|").concat(_validateSize(bid)).concat(_validateFloor(bid))); + } else { + Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"])("The ad unit code or Sonobi Placement id for slot ".concat(bid.bidId, " is invalid")); + } + }); + var data = {}; + bids.forEach(function (bid) { + _extends(data, bid); + }); + var payload = { + 'key_maker': JSON.stringify(data), + 'ref': bidderRequest.refererInfo.referer, + 's': Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["generateUUID"])(), + 'pv': PAGEVIEW_ID, + 'vp': _getPlatform(), + 'lib_name': 'prebid', + 'lib_v': "4.2.0", + 'us': 0 + }; + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('userSync') && __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('userSync').syncsPerBidder) { + payload.us = __WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('userSync').syncsPerBidder; + } // use userSync's internal function to determine if we can drop an iframe sync pixel + + + if (_iframeAllowed()) { + payload.ius = 1; + } else { + payload.ius = 0; + } + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'params.hfa')) { + payload.hfa = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'params.hfa'); + } + + if (validBidRequests[0].params.referrer) { + payload.ref = validBidRequests[0].params.referrer; + } // Apply GDPR parameters to request. + + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr = bidderRequest.gdprConsent.gdprApplies ? 'true' : 'false'; + + if (bidderRequest.gdprConsent.consentString) { + payload.consent_string = bidderRequest.gdprConsent.consentString; + } + } + + if (validBidRequests[0].schain) { + payload.schain = JSON.stringify(validBidRequests[0].schain); + } + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'userId') && Object.keys(validBidRequests[0].userId).length > 0) { + payload.userid = JSON.stringify(validBidRequests[0].userId); + } + + var keywords = validBidRequests[0].params.keywords; // a CSV of keywords + + if (keywords) { + payload.kw = keywords; + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } // If there is no key_maker data, then don't make the request. + + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"])(data)) { + return null; + } + + var url = STR_ENDPOINT; + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'params.bid_request_url')) { + url = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(validBidRequests[0], 'params.bid_request_url'); + } + + return { + method: 'GET', + url: url, + withCredentials: true, + data: payload, + bidderRequests: validBidRequests + }; + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {*} serverResponse A successful response from the server. + * @param {*} bidderRequest - Info describing the request to the server. + * @return {Bid[]} An array of bids which were nested inside the server. + */ + interpretResponse: function interpretResponse(serverResponse, bidderRequest) { + var bidResponse = serverResponse.body; + var bidsReturned = []; + var referrer = bidderRequest.data.ref; + + if (Object.keys(bidResponse.slots).length === 0) { + return bidsReturned; + } + + Object.keys(bidResponse.slots).forEach(function (slot) { + var bid = bidResponse.slots[slot]; + + var bidId = _getBidIdFromTrinityKey(slot); + + var bidRequest = _findBidderRequest(bidderRequest.bidderRequests, bidId); + + var mediaType = null; + + if (bid.sbi_ct === 'video') { + mediaType = 'video'; + var context = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bidRequest, 'mediaTypes.video.context'); + + if (context === 'outstream') { + mediaType = 'outstream'; + } + } + + var createCreative = _creative(mediaType, referrer); + + if (bid.sbi_aid && bid.sbi_mouse && bid.sbi_size) { + var _bid$sbi_size$split = bid.sbi_size.split('x'), + _bid$sbi_size$split2 = _slicedToArray(_bid$sbi_size$split, 2), + _bid$sbi_size$split2$ = _bid$sbi_size$split2[0], + width = _bid$sbi_size$split2$ === void 0 ? 1 : _bid$sbi_size$split2$, + _bid$sbi_size$split2$2 = _bid$sbi_size$split2[1], + height = _bid$sbi_size$split2$2 === void 0 ? 1 : _bid$sbi_size$split2$2; + + var bids = { + requestId: bidId, + cpm: Number(bid.sbi_mouse), + width: Number(width), + height: Number(height), + ad: createCreative(bidResponse.sbi_dc, bid.sbi_aid), + ttl: 500, + creativeId: bid.sbi_crid || bid.sbi_aid, + aid: bid.sbi_aid, + netRevenue: true, + currency: 'USD' + }; + + if (bid.sbi_dozer) { + bids.dealId = bid.sbi_dozer; + } + + if (mediaType === 'video') { + bids.mediaType = 'video'; + bids.vastUrl = createCreative(bidResponse.sbi_dc, bid.sbi_aid); + delete bids.ad; + delete bids.width; + delete bids.height; + } else if (mediaType === 'outstream' && bidRequest) { + bids.mediaType = 'video'; + bids.vastUrl = createCreative(bidResponse.sbi_dc, bid.sbi_aid); + bids.renderer = newRenderer(bidRequest.adUnitCode, bids, Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bidRequest, 'renderer.options')); + var videoSize = Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bidRequest, 'params.sizes'); + + if (Array.isArray(videoSize) && Array.isArray(videoSize[0])) { + // handle case of multiple sizes + videoSize = videoSize[0]; // Only take the first size for outstream + } + + if (videoSize) { + bids.width = videoSize[0]; + bids.height = videoSize[1]; + } + } + + bidsReturned.push(bids); + } + }); + return bidsReturned; + }, + + /** + * Register User Sync. + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + var syncs = []; + + try { + if (syncOptions.pixelEnabled) { + serverResponses[0].body.sbi_px.forEach(function (pixel) { + syncs.push({ + type: pixel.type, + url: pixel.url + }); + }); + } + } catch (e) {} + + return syncs; + } +}; + +function _findBidderRequest(bidderRequests, bidId) { + for (var i = 0; i < bidderRequests.length; i++) { + if (bidderRequests[i].bidId === bidId) { + return bidderRequests[i]; + } + } +} + +function _validateSize(bid) { + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.video')) { + return ''; // Video bids arent allowed to override sizes via the trinity request + } + + if (bid.params.sizes) { + return Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["parseSizesInput"])(bid.params.sizes).join(','); + } + + if (Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.banner.sizes')) { + return Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["parseSizesInput"])(Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"])(bid, 'mediaTypes.banner.sizes')).join(','); + } // Handle deprecated sizes definition + + + if (bid.sizes) { + return Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["parseSizesInput"])(bid.sizes).join(','); + } +} + +function _validateSlot(bid) { + if (bid.params.ad_unit) { + return bid.params.ad_unit; + } + + return bid.params.placement_id; +} + +function _validateFloor(bid) { + if (bid.params.floor) { + return "|f=".concat(bid.params.floor); + } + + return ''; +} + +var _creative = function _creative(mediaType, referer) { + return function (sbiDc, sbiAid) { + if (mediaType === 'video' || mediaType === 'outstream') { + return _videoCreative(sbiDc, sbiAid, referer); + } + + var src = "https://".concat(sbiDc, "apex.go.sonobi.com/sbi.js?aid=").concat(sbiAid, "&as=null&ref=").concat(encodeURIComponent(referer)); + return ''; + }; +}; + +function _videoCreative(sbiDc, sbiAid, referer) { + return "https://".concat(sbiDc, "apex.go.sonobi.com/vast.xml?vid=").concat(sbiAid, "&ref=").concat(encodeURIComponent(referer)); +} + +function _getBidIdFromTrinityKey(key) { + return key.split('|').slice(-1)[0]; +} +/** + * @param context - the window to determine the innerWidth from. This is purely for test purposes as it should always be the current window + */ + + +var _isInbounds = function _isInbounds() { + var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + return function () { + var lowerBound = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var upperBound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_SAFE_INTEGER; + return context.innerWidth >= lowerBound && context.innerWidth < upperBound; + }; +}; +/** + * @param context - the window to determine the innerWidth from. This is purely for test purposes as it should always be the current window + */ + +function _getPlatform() { + var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + + var isInBounds = _isInbounds(context); + + var MOBILE_VIEWPORT = { + lt: 768 + }; + var TABLET_VIEWPORT = { + lt: 992, + ge: 768 + }; + + if (isInBounds(0, MOBILE_VIEWPORT.lt)) { + return 'mobile'; + } + + if (isInBounds(TABLET_VIEWPORT.ge, TABLET_VIEWPORT.lt)) { + return 'tablet'; + } + + return 'desktop'; +} + +function newRenderer(adUnitCode, bid) { + var rendererOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__["a" /* Renderer */].install({ + id: bid.aid, + url: OUTSTREAM_REDNERER_URL, + config: rendererOptions, + loaded: false, + adUnitCode: adUnitCode + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"])('Prebid Error calling setRender on renderer', err); + } + + renderer.setEventHandlers({ + impression: function impression() { + return Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"])('Sonobi outstream video impression event'); + }, + loaded: function loaded() { + return Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"])('Sonobi outstream video loaded event'); + }, + ended: function ended() { + Object(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"])('Sonobi outstream renderer video event'); // document.querySelector(`#${adUnitCode}`).style.display = 'none'; + } + }); + return renderer; +} + +function outstreamRender(bid) { + // push to render queue because SbiOutstreamRenderer may not be loaded yet + bid.renderer.push(function () { + var _bid$getSize$split = bid.getSize().split('x'), + _bid$getSize$split2 = _slicedToArray(_bid$getSize$split, 2), + width = _bid$getSize$split2[0], + height = _bid$getSize$split2[1]; + + var renderer = new window.SbiOutstreamRenderer(); + renderer.init({ + vastUrl: bid.vastUrl, + height: height, + width: width + }); + renderer.setRootElement(bid.adUnitCode); + }); +} + +function _iframeAllowed() { + return __WEBPACK_IMPORTED_MODULE_5__src_userSync_js__["a" /* userSync */].canBidderRegisterSync('iframe', BIDDER_CODE); +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[712]); \ No newline at end of file diff --git a/build/dist/sortableAnalyticsAdapter.js b/build/dist/sortableAnalyticsAdapter.js new file mode 100644 index 00000000000..19d1bf3f829 --- /dev/null +++ b/build/dist/sortableAnalyticsAdapter.js @@ -0,0 +1,911 @@ +pbjsChunk([9],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 714: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(715); + + +/***/ }), + +/***/ 715: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_PBID_TIMEOUT", function() { return DEFAULT_PBID_TIMEOUT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TIMEOUT_FOR_REGISTRY", function() { return TIMEOUT_FOR_REGISTRY; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_config_js__ = __webpack_require__(3); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + +var DEFAULT_PROTOCOL = 'https'; +var DEFAULT_HOST = 'pa.deployads.com'; +var DEFAULT_URL = "".concat(DEFAULT_PROTOCOL, "://").concat(DEFAULT_HOST, "/pae"); +var ANALYTICS_TYPE = 'endpoint'; +var UTM_STORE_KEY = 'sortable_utm'; +var DEFAULT_PBID_TIMEOUT = 1000; +var TIMEOUT_FOR_REGISTRY = 250; +var settings = {}; +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT; + +var minsToMillis = function minsToMillis(mins) { + return mins * 60 * 1000; +}; + +var UTM_TTL = minsToMillis(30); +var SORTABLE_EVENTS = { + BID_WON: 'pbrw', + BID_TIMEOUT: 'pbto', + ERROR: 'pber', + PB_BID: 'pbid' +}; +var UTM_PARAMS = ['utm_campaign', 'utm_source', 'utm_medium', 'utm_content', 'utm_term']; +var EVENT_KEYS_SHORT_NAMES = { + 'auctionId': 'ai', + 'adUnitCode': 'ac', + 'adId': 'adi', + 'bidderAlias': 'bs', + 'bidFactor': 'bif', + 'bidId': 'bid', + 'bidRequestCount': 'brc', + 'bidderRequestId': 'brid', + 'bidRequestedSizes': 'rs', + 'bidTopCpm': 'btcp', + 'bidTopCpmCurrency': 'btcc', + 'bidTopIsNetRevenue': 'btin', + 'bidTopFactor': 'btif', + 'bidTopSrc': 'btsrc', + 'cpm': 'c', + 'currency': 'cc', + 'dealId': 'did', + 'isNetRevenue': 'inr', + 'isTop': 'it', + 'isWinner': 'iw', + 'isTimeout': 'ito', + 'mediaType': 'mt', + 'reachedTop': 'rtp', + 'numIframes': 'nif', + 'size': 'siz', + 'start': 'st', + 'tagId': 'tgid', + 'transactionId': 'trid', + 'ttl': 'ttl', + 'ttr': 'ttr', + 'url': 'u', + 'utm_campaign': 'uc', + 'utm_source': 'us', + 'utm_medium': 'um', + 'utm_content': 'un', + 'utm_term': 'ut' +}; +var auctionCache = {}; +var bidderFactors = null; +var timeoutId = null; +var eventsToBeSent = []; + +function getStorage() { + try { + return window['sessionStorage']; + } catch (e) { + return null; + } +} + +function putParams(k, v) { + try { + var storage = getStorage(); + + if (!storage) { + return false; + } + + if (v === null) { + storage.removeItem(k); + } else { + storage.setItem(k, JSON.stringify(v)); + } + + return true; + } catch (e) { + return false; + } +} + +function getParams(k) { + try { + var storage = getStorage(); + + if (!storage) { + return null; + } + + var value = storage.getItem(k); + return value === null ? null : JSON.parse(value); + } catch (e) { + return null; + } +} + +function storeParams(key, paramsToSave) { + if (!settings.disableSessionTracking) { + for (var property in paramsToSave) { + if (paramsToSave.hasOwnProperty(property)) { + putParams(key, paramsToSave); + break; + } + } + } +} + +function getSiteKey(options) { + var sortableConfig = __WEBPACK_IMPORTED_MODULE_6__src_config_js__["b" /* config */].getConfig('sortable') || {}; + var globalSiteId = sortableConfig.siteId; + return globalSiteId || options.siteId; +} + +function generateRandomId() { + var s = (+new Date()).toString(36); + + for (var i = 0; i < 6; ++i) { + s += (Math.random() * 36 | 0).toString(36); + } + + return s; +} + +function getSessionParams() { + var stillValid = function stillValid(paramsFromStorage) { + return paramsFromStorage.created < +new Date() + UTM_TTL; + }; + + var sessionParams = null; + + if (!settings.disableSessionTracking) { + var paramsFromStorage = getParams(UTM_STORE_KEY); + sessionParams = paramsFromStorage && stillValid(paramsFromStorage) ? paramsFromStorage : null; + } + + sessionParams = sessionParams || { + 'created': +new Date(), + 'sessionId': generateRandomId() + }; + var urlParams = UTM_PARAMS.map(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["getParameterByName"]); + + if (UTM_PARAMS.every(function (key) { + return !sessionParams[key]; + })) { + UTM_PARAMS.forEach(function (v, i) { + return sessionParams[v] = urlParams[i] || sessionParams[v]; + }); + sessionParams.created = +new Date(); + storeParams(UTM_STORE_KEY, sessionParams); + } + + return sessionParams; +} + +function getPrebidVersion() { + return Object(__WEBPACK_IMPORTED_MODULE_5__src_prebidGlobal_js__["a" /* getGlobal */])().version; +} + +function getFactor(bidder) { + if (bidder && bidder.bidCpmAdjustment) { + return bidder.bidCpmAdjustment(1.0); + } else { + return null; + } +} + +function getBiddersFactors() { + var pb = Object(__WEBPACK_IMPORTED_MODULE_5__src_prebidGlobal_js__["a" /* getGlobal */])(); + var result = {}; + + if (pb && pb.bidderSettings) { + Object.keys(pb.bidderSettings).forEach(function (bidderKey) { + var bidder = pb.bidderSettings[bidderKey]; + var factor = getFactor(bidder); + + if (factor !== null) { + result[bidderKey] = factor; + } + }); + } + + return result; +} + +function getBaseEvent(auctionId, adUnitCode, bidderCode) { + var event = {}; + event.s = settings.key; + event.ai = auctionId; + event.ac = adUnitCode; + event.bs = bidderCode; + return event; +} + +function getBidBaseEvent(auctionId, adUnitCode, bidderCode) { + var sessionParams = getSessionParams(); + var prebidVersion = getPrebidVersion(); + var event = getBaseEvent(auctionId, adUnitCode, bidderCode); + event.sid = sessionParams.sessionId; + event.pv = settings.pageviewId; + event.to = auctionCache[auctionId].timeout; + event.pbv = prebidVersion; + UTM_PARAMS.filter(function (k) { + return sessionParams[k]; + }).forEach(function (k) { + return event[EVENT_KEYS_SHORT_NAMES[k]] = sessionParams[k]; + }); + return event; +} + +function createPBBidEvent(bid) { + var event = getBidBaseEvent(bid.auctionId, bid.adUnitCode, bid.bidderAlias); + Object.keys(bid).forEach(function (k) { + var shortName = EVENT_KEYS_SHORT_NAMES[k]; + + if (shortName) { + event[shortName] = bid[k]; + } + }); + event._type = SORTABLE_EVENTS.PB_BID; + return event; +} + +function getBidFactor(bidderAlias) { + if (!bidderFactors) { + bidderFactors = getBiddersFactors(); + } + + var factor = bidderFactors[bidderAlias]; + return typeof factor !== 'undefined' ? factor : 1.0; +} + +function createPrebidBidWonEvent(_ref) { + var auctionId = _ref.auctionId, + adUnitCode = _ref.adUnitCode, + bidderAlias = _ref.bidderAlias, + cpm = _ref.cpm, + currency = _ref.currency, + isNetRevenue = _ref.isNetRevenue; + var bidFactor = getBidFactor(bidderAlias); + var event = getBaseEvent(auctionId, adUnitCode, bidderAlias); + event.bif = bidFactor; + bidderFactors = null; + event.c = cpm; + event.cc = currency; + event.inr = isNetRevenue; + event._type = SORTABLE_EVENTS.BID_WON; + return event; +} + +function createPrebidTimeoutEvent(_ref2) { + var auctionId = _ref2.auctionId, + adUnitCode = _ref2.adUnitCode, + bidderAlias = _ref2.bidderAlias; + var event = getBaseEvent(auctionId, adUnitCode, bidderAlias); + event._type = SORTABLE_EVENTS.BID_TIMEOUT; + return event; +} + +function getDistinct(arr) { + return arr.filter(function (v, i, a) { + return a.indexOf(v) === i; + }); +} + +function groupBy(list, keyGetterFn) { + var map = {}; + list.forEach(function (item) { + var key = keyGetterFn(item); + map[key] = map[key] ? map[key].concat(item) : [item]; + }); + return map; +} + +function mergeAndCompressEventsByType(events, type) { + if (!events.length) { + return {}; + } + + var allKeys = getDistinct(events.map(function (ev) { + return Object.keys(ev); + }).reduce(function (prev, curr) { + return prev.concat(curr); + }, [])); + var eventsAsMap = {}; + allKeys.forEach(function (k) { + events.forEach(function (ev) { + return eventsAsMap[k] = eventsAsMap[k] ? eventsAsMap[k].concat(ev[k]) : [ev[k]]; + }); + }); + + var allSame = function allSame(arr) { + return arr.every(function (el) { + return arr[0] === el; + }); + }; + + Object.keys(eventsAsMap).forEach(function (k) { + return eventsAsMap[k] = eventsAsMap[k].length && allSame(eventsAsMap[k]) ? eventsAsMap[k][0] : eventsAsMap[k]; + }); + eventsAsMap._count = events.length; + var result = {}; + result[type] = eventsAsMap; + return result; +} + +function mergeAndCompressEvents(events) { + var types = getDistinct(events.map(function (e) { + return e._type; + })); + var groupedEvents = groupBy(events, function (e) { + return e._type; + }); + var results = types.map(function (t) { + return groupedEvents[t]; + }).map(function (events) { + return mergeAndCompressEventsByType(events, events[0]._type); + }); + return results.reduce(function (prev, eventMap) { + var key = Object.keys(eventMap)[0]; + prev[key] = eventMap[key]; + return prev; + }, {}); +} + +function registerEvents(events) { + eventsToBeSent = eventsToBeSent.concat(events); + + if (!timeoutId) { + timeoutId = setTimeout(function () { + var _eventsToBeSent = eventsToBeSent.slice(); + + eventsToBeSent = []; + sendEvents(_eventsToBeSent); + timeoutId = null; + }, TIMEOUT_FOR_REGISTRY); + } +} + +function sendEvents(events) { + var url = settings.url; + var mergedEvents = mergeAndCompressEvents(events); + var options = { + 'contentType': 'text/plain', + 'method': 'POST', + 'withCredentials': true + }; + + var onSend = function onSend() { + return __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]('Sortable Analytics data sent'); + }; + + Object(__WEBPACK_IMPORTED_MODULE_4__src_ajax_js__["a" /* ajax */])(url, onSend, JSON.stringify(mergedEvents), options); +} // converts [[300, 250], [728, 90]] to '300x250,728x90' + + +function sizesToString(sizes) { + return sizes.map(function (s) { + return s.join('x'); + }).join(','); +} + +function dimsToSizeString(width, height) { + return "".concat(width, "x").concat(height); +} + +function handleBidRequested(event) { + var refererInfo = event.refererInfo; + var url = refererInfo.referer; + var reachedTop = refererInfo.reachedTop; + var numIframes = refererInfo.numIframes; + event.bids.forEach(function (bid) { + var auctionId = bid.auctionId; + var adUnitCode = bid.adUnitCode; + var tagId = bid.bidder === 'sortable' ? bid.params.tagId : ''; + + if (!auctionCache[auctionId].adUnits[adUnitCode]) { + auctionCache[auctionId].adUnits[adUnitCode] = { + bids: {} + }; + } + + var adUnit = auctionCache[auctionId].adUnits[adUnitCode]; + var bids = adUnit.bids; + var newBid = { + adUnitCode: bid.adUnitCode, + auctionId: event.auctionId, + bidderAlias: bid.bidder, + bidId: bid.bidId, + bidderRequestId: bid.bidderRequestId, + bidRequestCount: bid.bidRequestsCount, + bidRequestedSizes: sizesToString(bid.sizes), + currency: bid.currency, + cpm: 0.0, + isTimeout: false, + isTop: false, + isWinner: false, + numIframes: numIframes, + start: event.start, + tagId: tagId, + transactionId: bid.transactionId, + reachedTop: reachedTop, + url: encodeURI(url) + }; + bids[newBid.bidderAlias] = newBid; + }); +} + +function handleBidAdjustment(event) { + var auctionId = event.auctionId; + var adUnitCode = event.adUnitCode; + var adUnit = auctionCache[auctionId].adUnits[adUnitCode]; + var bid = adUnit.bids[event.bidderCode]; + var bidFactor = getBidFactor(event.bidderCode); + bid.adId = event.adId; + bid.adUnitCode = event.adUnitCode; + bid.auctionId = event.auctionId; + bid.bidderAlias = event.bidderCode; + bid.bidFactor = bidFactor; + bid.cpm = event.cpm; + bid.currency = event.currency; + bid.dealId = event.dealId; + bid.isNetRevenue = event.netRevenue; + bid.mediaType = event.mediaType; + bid.responseTimestamp = event.responseTimestamp; + bid.size = dimsToSizeString(event.width, event.height); + bid.ttl = event.ttl; + bid.ttr = event.timeToRespond; +} + +function handleBidWon(event) { + var auctionId = event.auctionId; + var auction = auctionCache[auctionId]; + + if (auction) { + var adUnitCode = event.adUnitCode; + var adUnit = auction.adUnits[adUnitCode]; + Object.keys(adUnit.bids).forEach(function (bidderCode) { + var bidFromUnit = adUnit.bids[bidderCode]; + bidFromUnit.isWinner = event.bidderCode === bidderCode; + }); + } else { + var ev = createPrebidBidWonEvent({ + adUnitCode: event.adUnitCode, + auctionId: event.auctionId, + bidderAlias: event.bidderCode, + currency: event.currency, + cpm: event.cpm, + isNetRevenue: event.netRevenue + }); + registerEvents([ev]); + } +} + +function handleBidTimeout(event) { + event.forEach(function (timeout) { + var auctionId = timeout.auctionId; + var adUnitCode = timeout.adUnitCode; + var bidderAlias = timeout.bidder; + var auction = auctionCache[auctionId]; + + if (auction) { + var adUnit = auction.adUnits[adUnitCode]; + var bid = adUnit.bids[bidderAlias]; + bid.isTimeout = true; + } else { + var prebidTimeoutEvent = createPrebidTimeoutEvent({ + auctionId: auctionId, + adUnitCode: adUnitCode, + bidderAlias: bidderAlias + }); + registerEvents([prebidTimeoutEvent]); + } + }); +} + +function handleAuctionInit(event) { + var auctionId = event.auctionId; + var timeout = event.timeout; + auctionCache[auctionId] = { + timeout: timeout, + auctionId: auctionId, + adUnits: {} + }; +} + +function handleAuctionEnd(event) { + var auction = auctionCache[event.auctionId]; + var adUnits = auction.adUnits; + setTimeout(function () { + var events = Object.keys(adUnits).map(function (adUnitCode) { + var bidderKeys = Object.keys(auction.adUnits[adUnitCode].bids); + var bids = bidderKeys.map(function (bidderCode) { + return auction.adUnits[adUnitCode].bids[bidderCode]; + }); + var highestBid = bids.length ? bids.reduce(__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["getOldestHighestCpmBid"]) : null; + return bidderKeys.map(function (bidderCode) { + var bid = auction.adUnits[adUnitCode].bids[bidderCode]; + + if (highestBid && highestBid.cpm) { + bid.isTop = highestBid.bidderAlias === bid.bidderAlias; + bid.bidTopFactor = getBidFactor(highestBid.bidderAlias); + bid.bidTopCpm = highestBid.cpm; + bid.bidTopCpmCurrency = highestBid.currency; + bid.bidTopIsNetRevenue = highestBid.isNetRevenue; + bid.bidTopSrc = highestBid.bidderAlias; + } + + return createPBBidEvent(bid); + }); + }).reduce(function (prev, curr) { + return prev.concat(curr); + }, []); + bidderFactors = null; + sendEvents(events); + delete auctionCache[event.auctionId]; + }, settings.timeoutForPbid); +} + +function handleError(eventType, event, e) { + var ev = {}; + ev.s = settings.key; + ev.ti = eventType; + ev.args = JSON.stringify(event); + ev.msg = e.message; + ev._type = SORTABLE_EVENTS.ERROR; + registerEvents([ev]); +} + +var sortableAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + url: DEFAULT_URL, + ANALYTICS_TYPE: ANALYTICS_TYPE +}), { + track: function track(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args; + + try { + switch (eventType) { + case AUCTION_INIT: + handleAuctionInit(args); + break; + + case AUCTION_END: + handleAuctionEnd(args); + break; + + case BID_REQUESTED: + handleBidRequested(args); + break; + + case BID_ADJUSTMENT: + handleBidAdjustment(args); + break; + + case BID_WON: + handleBidWon(args); + break; + + case BID_TIMEOUT: + handleBidTimeout(args); + break; + } + } catch (e) { + handleError(eventType, args, e); + } + } +}); + +sortableAnalyticsAdapter.originEnableAnalytics = sortableAnalyticsAdapter.enableAnalytics; + +sortableAnalyticsAdapter.enableAnalytics = function (setupConfig) { + if (this.initConfig(setupConfig)) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]('Sortable Analytics adapter enabled'); + sortableAnalyticsAdapter.originEnableAnalytics(setupConfig); + } +}; + +sortableAnalyticsAdapter.initConfig = function (setupConfig) { + settings.disableSessionTracking = setupConfig.disableSessionTracking === undefined ? false : setupConfig.disableSessionTracking; + settings.key = getSiteKey(setupConfig.options); + settings.protocol = setupConfig.options.protocol || DEFAULT_PROTOCOL; + settings.url = "".concat(settings.protocol, "://").concat(setupConfig.options.eventHost || DEFAULT_HOST, "/pae/").concat(settings.key); + settings.pageviewId = generateRandomId(); + settings.timeoutForPbid = setupConfig.timeoutForPbid ? Math.max(setupConfig.timeoutForPbid, 0) : DEFAULT_PBID_TIMEOUT; + return !!settings.key; +}; + +sortableAnalyticsAdapter.getOptions = function () { + return settings; +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: sortableAnalyticsAdapter, + code: 'sortable' +}); +/* harmony default export */ __webpack_exports__["default"] = (sortableAnalyticsAdapter); + +/***/ }) + +},[714]); \ No newline at end of file diff --git a/build/dist/sortableBidAdapter.js b/build/dist/sortableBidAdapter.js new file mode 100644 index 00000000000..e86b37012b6 --- /dev/null +++ b/build/dist/sortableBidAdapter.js @@ -0,0 +1,461 @@ +pbjsChunk([96],{ + +/***/ 716: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(717); + + +/***/ }), + +/***/ 717: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + +var BIDDER_CODE = 'sortable'; +var SERVER_URL = 'https://c.deployads.com'; + +function setAssetRequired(native, asset) { + if (native.required) { + asset.required = 1; + } + + return asset; +} + +function buildNativeRequest(nativeMediaType) { + var assets = []; + var title = nativeMediaType.title; + + if (title) { + assets.push(setAssetRequired(title, { + title: { + len: title.len + } + })); + } + + var img = nativeMediaType.image; + + if (img) { + assets.push(setAssetRequired(img, { + img: { + type: 3, + // Main + wmin: 1, + hmin: 1 + } + })); + } + + var icon = nativeMediaType.icon; + + if (icon) { + assets.push(setAssetRequired(icon, { + img: { + type: 1, + // Icon + wmin: 1, + hmin: 1 + } + })); + } + + var body = nativeMediaType.body; + + if (body) { + assets.push(setAssetRequired(body, { + data: { + type: 2 + } + })); + } + + var cta = nativeMediaType.cta; + + if (cta) { + assets.push(setAssetRequired(cta, { + data: { + type: 12 + } + })); + } + + var sponsoredBy = nativeMediaType.sponsoredBy; + + if (sponsoredBy) { + assets.push(setAssetRequired(sponsoredBy, { + data: { + type: 1 + } + })); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](assets, function (asset, id) { + return asset.id = id; + }); + + return { + ver: '1', + request: JSON.stringify({ + ver: '1', + assets: assets + }) + }; +} + +function tryParseNativeResponse(adm) { + var native = null; + + try { + native = JSON.parse(adm); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Sortable bid adapter unable to parse native bid response:\n\n' + e); + } + + return native && native.native; +} + +function createImgObject(img) { + if (img.w || img.h) { + return { + url: img.url, + width: img.w, + height: img.h + }; + } else { + return img.url; + } +} + +function interpretNativeResponse(response) { + var native = {}; + + if (response.link) { + native.clickUrl = response.link.url; + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](response.assets, function (asset) { + switch (asset.id) { + case 1: + native.title = asset.title.text; + break; + + case 2: + native.image = createImgObject(asset.img); + break; + + case 3: + native.icon = createImgObject(asset.img); + break; + + case 4: + native.body = asset.data.value; + break; + + case 5: + native.cta = asset.data.value; + break; + + case 6: + native.sponsoredBy = asset.data.value; + break; + } + }); + + return native; +} + +function transformSyncs(responses, type, syncs) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](responses, function (res) { + if (res.body && res.body.ext && res.body.ext.sync_dsps && res.body.ext.sync_dsps.length) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](res.body.ext.sync_dsps, function (sync) { + if (sync[0] === type && sync[1]) { + syncs.push({ + type: type, + url: sync[1] + }); + } + }); + } + }); +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + var sortableConfig = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('sortable'); + var haveSiteId = sortableConfig && !!sortableConfig.siteId || bid.params.siteId; + var validFloor = !bid.params.floor || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.params.floor); + var validSize = /\d+x\d+/; + var validFloorSizeMap = !bid.params.floorSizeMap || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](bid.params.floorSizeMap) && Object.keys(bid.params.floorSizeMap).every(function (size) { + return size.match(validSize) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.params.floorSizeMap[size]); + }); + var validKeywords = !bid.params.keywords || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](bid.params.keywords) && Object.keys(bid.params.keywords).every(function (key) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](key) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](bid.params.keywords[key]); + }); + var isBanner = !bid.mediaTypes || bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]] || !(bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]] || bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]]); + var bannerSizes = isBanner ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaType.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], ".sizes")) || bid.sizes : null; + return !!(bid.params.tagId && haveSiteId && validFloor && validFloorSizeMap && validKeywords && (!isBanner || bannerSizes && bannerSizes.length > 0 && bannerSizes.every(function (sizeArr) { + return sizeArr.length == 2 && sizeArr.every(function (num) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](num); + }); + }))); + }, + buildRequests: function buildRequests(validBidReqs, bidderRequest) { + var sortableConfig = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('sortable') || {}; + var globalSiteId = sortableConfig.siteId; + var loc = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](bidderRequest.refererInfo.referer); + + var sortableImps = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](validBidReqs, function (bid) { + var rv = { + id: bid.bidId, + tagid: bid.params.tagId, + ext: {} + }; + var bannerMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */])); + var nativeMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */])); + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */])); + + if (bannerMediaType || !(nativeMediaType || videoMediaType)) { + var bannerSizes = bannerMediaType && bannerMediaType.sizes || bid.sizes; + rv.banner = { + format: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](bannerSizes, function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + width = _ref2[0], + height = _ref2[1]; + + return { + w: width, + h: height + }; + }) + }; + } + + if (nativeMediaType) { + rv.native = buildNativeRequest(nativeMediaType); + } + + if (videoMediaType && videoMediaType.context === 'instream') { + var video = { + placement: 1 + }; + video.mimes = videoMediaType.mimes || []; + video.minduration = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.minduration') || 10; + video.maxduration = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.maxduration') || 60; + var startDelay = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.video.startdelay'); + + if (startDelay != null) { + video.startdelay = startDelay; + } + + if (videoMediaType.playerSize && videoMediaType.playerSize.length) { + var size = videoMediaType.playerSize[0]; + video.w = size[0]; + video.h = size[1]; + } + + if (videoMediaType.api) { + video.api = videoMediaType.api; + } + + if (videoMediaType.protocols) { + video.protocols = videoMediaType.protocols; + } + + if (videoMediaType.playbackmethod) { + video.playbackmethod = videoMediaType.playbackmethod; + } + + rv.video = video; + } + + if (bid.params.floor) { + rv.bidfloor = bid.params.floor; + } + + if (bid.params.keywords) { + rv.ext.keywords = bid.params.keywords; + } + + if (bid.params.bidderParams) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bid.params.bidderParams, function (params, partner) { + rv.ext[partner] = params; + }); + } + + if (bid.params.floorSizeMap) { + rv.ext.floorSizeMap = bid.params.floorSizeMap; + } + + return rv; + }); + + var gdprConsent = bidderRequest && bidderRequest.gdprConsent; + var sortableBidReq = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: sortableImps, + source: { + ext: { + schain: validBidReqs[0].schain + } + }, + regs: { + ext: {} + }, + site: { + domain: loc.hostname, + page: loc.href, + ref: loc.href, + publisher: { + id: globalSiteId || validBidReqs[0].params.siteId + }, + device: { + w: screen.width, + h: screen.height + } + } + }; + + if (bidderRequest && bidderRequest.timeout > 0) { + sortableBidReq.tmax = bidderRequest.timeout; + } + + if (gdprConsent) { + sortableBidReq.user = { + ext: { + consent: gdprConsent.consentString + } + }; + + if (typeof gdprConsent.gdprApplies == 'boolean') { + sortableBidReq.regs.ext.gdpr = gdprConsent.gdprApplies ? 1 : 0; + } + } + + if (bidderRequest.uspConsent) { + sortableBidReq.regs.ext.us_privacy = bidderRequest.uspConsent; + } + + return { + method: 'POST', + url: "".concat(SERVER_URL, "/openrtb2/auction?src=Genius_prebid_4.2.0&host=").concat(loc.hostname), + data: JSON.stringify(sortableBidReq), + options: { + contentType: 'text/plain' + } + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var _serverResponse$body = serverResponse.body, + id = _serverResponse$body.id, + seatbid = _serverResponse$body.seatbid; + var sortableBids = []; + + if (id && seatbid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](seatbid, function (seatbid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](seatbid.bid, function (bid) { + var bidObj = { + requestId: bid.impid, + cpm: parseFloat(bid.price), + width: parseInt(bid.w), + height: parseInt(bid.h), + creativeId: bid.crid || bid.id, + dealId: bid.dealid || null, + currency: 'USD', + netRevenue: true, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], + ttl: 60 + }; + + if (bid.adm) { + var adFormat = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'ext.ad_format'); + + if (adFormat === 'native') { + var native = tryParseNativeResponse(bid.adm); + + if (!native) { + return; + } + + bidObj.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]; + bidObj.native = interpretNativeResponse(native); + } else if (adFormat === 'instream') { + bidObj.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + bidObj.vastXml = bid.adm; + } else { + bidObj.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + bidObj.ad = bid.adm; + + if (bid.nurl) { + bidObj.ad += __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["createTrackPixelHtml"](decodeURIComponent(bid.nurl)); + } + } + } else if (bid.nurl) { + bidObj.adUrl = bid.nurl; + } + + if (bid.ext) { + bidObj[BIDDER_CODE] = bid.ext; + } + + sortableBids.push(bidObj); + }); + }); + } + + return sortableBids; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + transformSyncs(responses, 'iframe', syncs); + } + + if (syncOptions.pixelEnabled) { + transformSyncs(responses, 'image', syncs); + } + + return syncs; + }, + onTimeout: function onTimeout(details) { + fetch("".concat(SERVER_URL, "/prebid/timeout"), { + method: 'POST', + body: JSON.stringify(details), + mode: 'no-cors', + headers: new Headers({ + 'Content-Type': 'text/plain' + }) + }); + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[716]); \ No newline at end of file diff --git a/build/dist/sovrnAnalyticsAdapter.js b/build/dist/sovrnAnalyticsAdapter.js new file mode 100644 index 00000000000..74a0d377e1b --- /dev/null +++ b/build/dist/sovrnAnalyticsAdapter.js @@ -0,0 +1,682 @@ +pbjsChunk([8],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 718: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(719); + + +/***/ }), + +/***/ 719: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js__); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + + +var ajax = Object(__WEBPACK_IMPORTED_MODULE_3__src_ajax_js__["b" /* ajaxBuilder */])(0); +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + BID_WON = _CONSTANTS$EVENTS.BID_WON; +var pbaUrl = 'https://pba.aws.lijit.com/analytics'; +var currentAuctions = {}; +var analyticsType = 'endpoint'; + +var getClosestTop = function getClosestTop() { + var topFrame = window; + var err = false; + + try { + while (topFrame.parent.document !== topFrame.document) { + if (topFrame.parent.document) { + topFrame = topFrame.parent; + } else { + throw new Error(); + } + } + } catch (e) {// bException = true; + } + + return { + topFrame: topFrame, + err: err + }; +}; + +var getBestPageUrl = function getBestPageUrl(_ref) { + var crossDomainError = _ref.err, + topFrame = _ref.topFrame; + var sBestPageUrl = ''; + + if (!crossDomainError) { + // easy case- we can get top frame location + sBestPageUrl = topFrame.location.href; + } else { + try { + try { + sBestPageUrl = window.top.location.href; + } catch (e) { + var aOrigins = window.location.ancestorOrigins; + sBestPageUrl = aOrigins[aOrigins.length - 1]; + } + } catch (e) { + sBestPageUrl = topFrame.document.referrer; + } + } + + return sBestPageUrl; +}; + +var rootURL = getBestPageUrl(getClosestTop()); + +var sovrnAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + url: pbaUrl, + analyticsType: analyticsType +}), { + track: function track(_ref2) { + var eventType = _ref2.eventType, + args = _ref2.args; + + try { + if (eventType === BID_WON) { + new BidWinner(this.sovrnId, args).send(); + return; + } + + if (args && args.auctionId && currentAuctions[args.auctionId] && currentAuctions[args.auctionId].status === 'complete') { + throw new Error('Event Received after Auction Close Auction Id ' + args.auctionId); + } + + if (args && args.auctionId && currentAuctions[args.auctionId] === undefined) { + currentAuctions[args.auctionId] = new AuctionData(this.sovrnId, args.auctionId); + } + + switch (eventType) { + case BID_REQUESTED: + currentAuctions[args.auctionId].bidRequested(args); + break; + + case BID_ADJUSTMENT: + currentAuctions[args.auctionId].originalBid(args); + break; + + case BID_RESPONSE: + currentAuctions[args.auctionId].adjustedBid(args); + break; + + case AUCTION_END: + currentAuctions[args.auctionId].send(); + break; + } + } catch (e) { + new LogError(e, this.sovrnId, { + eventType: eventType, + args: args + }).send(); + } + } +}); + +sovrnAnalyticsAdapter.getAuctions = function () { + return currentAuctions; +}; + +sovrnAnalyticsAdapter.originEnableAnalytics = sovrnAnalyticsAdapter.enableAnalytics; // override enableAnalytics so we can get access to the config passed in from the page + +sovrnAnalyticsAdapter.enableAnalytics = function (config) { + var sovrnId = ''; + + if (config && config.options && (config.options.sovrnId || config.options.affiliateId)) { + sovrnId = config.options.sovrnId || config.options.affiliateId; + } else { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"]('Need Sovrn Id to log auction results. Please contact a Sovrn representative if you do not know your Sovrn Id.'); + return; + } + + sovrnAnalyticsAdapter.sovrnId = sovrnId; + + if (config.options.pbaUrl) { + pbaUrl = config.options.pbaUrl; + } + + sovrnAnalyticsAdapter.originEnableAnalytics(config); // call the base class function +}; + +__WEBPACK_IMPORTED_MODULE_1__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: sovrnAnalyticsAdapter, + code: 'sovrn' +}); +/** Class Representing a Winning Bid */ + +var BidWinner = /*#__PURE__*/function () { + /** + * Creates a new bid winner + * @param {string} sovrnId - the affiliate id from the analytics config + * @param {*} event - the args object from the auction event + */ + function BidWinner(sovrnId, event) { + _classCallCheck(this, BidWinner); + + this.body = {}; // eslint-disable-next-line no-undef + + this.body.prebidVersion = "Genius_prebid_4.2.0"; + this.body.sovrnId = sovrnId; + this.body.winningBid = JSON.parse(JSON.stringify(event)); + this.body.url = rootURL; + this.body.payload = 'winner'; + delete this.body.winningBid.ad; + } + /** + * Sends the auction to the the ingest server + */ + + + _createClass(BidWinner, [{ + key: "send", + value: function send() { + this.body.ts = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["timestamp"](); + ajax(pbaUrl, null, JSON.stringify(this.body), { + contentType: 'application/json', + method: 'POST' + }); + } + }]); + + return BidWinner; +}(); +/** Class representing an Auction */ + + +var AuctionData = /*#__PURE__*/function () { + /** + * Create a new auction data collector + * @param {string} sovrnId - the affiliate id from the analytics config + * @param {string} auctionId - the auction id from the auction event + */ + function AuctionData(sovrnId, auctionId) { + _classCallCheck(this, AuctionData); + + this.auction = {}; // eslint-disable-next-line no-undef + + this.auction.prebidVersion = "Genius_prebid_4.2.0"; + this.auction.sovrnId = sovrnId; + this.auction.auctionId = auctionId; + this.auction.payload = 'auction'; + this.auction.timeouts = { + buffer: __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('timeoutBuffer'), + bidder: __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; + this.auction.priceGranularity = __WEBPACK_IMPORTED_MODULE_5__src_config_js__["b" /* config */].getConfig('priceGranularity'); + this.auction.url = rootURL; + this.auction.requests = []; + this.auction.unsynced = []; + this.dropBidFields = ['auctionId', 'ad', 'requestId', 'bidderCode']; + setTimeout(function (id) { + delete currentAuctions[id]; + }, 300000, this.auction.auctionId); + } + /** + * Record a bid request event + * @param {*} event - the args object from the auction event + */ + + + _createClass(AuctionData, [{ + key: "bidRequested", + value: function bidRequested(event) { + var eventCopy = JSON.parse(JSON.stringify(event)); + delete eventCopy.doneCbCallCount; + delete eventCopy.auctionId; + this.auction.requests.push(eventCopy); + } + /** + * Finds the bid from the auction that the event is associated with + * @param {*} event - the args object from the auction event + * @return {*} - the bid + */ + + }, { + key: "findBid", + value: function findBid(event) { + var bidder = __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default()(this.auction.requests, function (r) { + return r.bidderCode === event.bidderCode; + }); + + if (!bidder) { + this.auction.unsynced.push(JSON.parse(JSON.stringify(event))); + } + + var bid = __WEBPACK_IMPORTED_MODULE_6_core_js_pure_features_array_find_js___default()(bidder.bids, function (b) { + return b.bidId === event.requestId; + }); + + if (!bid) { + event.unmatched = true; + bidder.bids.push(JSON.parse(JSON.stringify(event))); + } + + return bid; + } + /** + * Records the original bid before any adjustments have been made + * @param {*} event - the args object from the auction event + * NOTE: the bid adjustment occurs before the bid response + * the bid adjustment seems to be the bid ready to be adjusted + */ + + }, { + key: "originalBid", + value: function originalBid(event) { + var bid = this.findBid(event); + + if (bid) { + _extends(bid, JSON.parse(JSON.stringify(event))); + + this.dropBidFields.forEach(function (f) { + return delete bid[f]; + }); + } + } + /** + * Replaces original values with adjusted values and records the original values for changed values + * in bid.originalValues + * @param {*} event - the args object from the auction event + */ + + }, { + key: "adjustedBid", + value: function adjustedBid(event) { + var _this = this; + + var bid = this.findBid(event); + + if (bid) { + bid.originalValues = Object.keys(event).reduce(function (o, k) { + if (JSON.stringify(bid[k]) !== JSON.stringify(event[k]) && !__WEBPACK_IMPORTED_MODULE_7_core_js_pure_features_array_includes_js___default()(_this.dropBidFields, k)) { + o[k] = bid[k]; + bid[k] = event[k]; + } + + return o; + }, {}); + } + } + /** + * Sends the auction to the the ingest server + */ + + }, { + key: "send", + value: function send() { + var _this2 = this; + + var maxBids = {}; + this.auction.requests.forEach(function (request) { + request.bids.forEach(function (bid) { + maxBids[bid.adUnitCode] = maxBids[bid.adUnitCode] || { + cpm: 0 + }; + + if (bid.cpm > maxBids[bid.adUnitCode].cpm) { + maxBids[bid.adUnitCode] = bid; + } + }); + }); + Object.keys(maxBids).forEach(function (unit) { + maxBids[unit].isAuctionWinner = true; + }); + this.auction.ts = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["timestamp"](); + ajax(pbaUrl, function () { + currentAuctions[_this2.auction.auctionId] = { + status: 'complete', + auctionId: _this2.auction.auctionId + }; + }, JSON.stringify(this.auction), { + contentType: 'application/json', + method: 'POST' + }); + } + }]); + + return AuctionData; +}(); + +var LogError = /*#__PURE__*/function () { + function LogError(e, sovrnId, data) { + _classCallCheck(this, LogError); + + this.error = {}; + this.error.payload = 'error'; + this.error.message = e.message; + this.error.stack = e.stack; + this.error.data = data; // eslint-disable-next-line no-undef + + this.error.prebidVersion = "Genius_prebid_4.2.0"; + this.error.sovrnId = sovrnId; + this.error.url = rootURL; + this.error.userAgent = navigator.userAgent; + } + + _createClass(LogError, [{ + key: "send", + value: function send() { + if (this.error.data && this.error.data.requests) { + this.error.data.requests.forEach(function (request) { + if (request.bids) { + request.bids.forEach(function (bid) { + if (bid.ad) { + delete bid.ad; + } + }); + } + }); + } + + if (ErrorEvent.data && this.error.data.ad) { + delete this.error.data.ad; + } + + this.error.ts = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["timestamp"](); + ajax(pbaUrl, null, JSON.stringify(this.error), { + contentType: 'application/json', + method: 'POST' + }); + } + }]); + + return LogError; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (sovrnAnalyticsAdapter); + +/***/ }) + +},[718]); \ No newline at end of file diff --git a/build/dist/sovrnBidAdapter.js b/build/dist/sovrnBidAdapter.js new file mode 100644 index 00000000000..8f0d0de6c98 --- /dev/null +++ b/build/dist/sovrnBidAdapter.js @@ -0,0 +1,233 @@ +pbjsChunk([95],{ + +/***/ 720: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(721); + + +/***/ }), + +/***/ 721: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var spec = { + code: 'sovrn', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * Check if the bid is a valid zone ID in either number or string form + * @param {object} bid the Sovrn bid to validate + * @return boolean for whether or not a bid is valid + */ + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid.params.tagid && !isNaN(parseFloat(bid.params.tagid)) && isFinite(bid.params.tagid)); + }, + + /** + * Format the bid request object for our endpoint + * @param {BidRequest[]} bidRequests Array of Sovrn bidders + * @return object of parameters for Prebid AJAX request + */ + buildRequests: function buildRequests(bidReqs, bidderRequest) { + try { + var sovrnImps = []; + var iv; + var schain; + var unifiedID; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bidReqs, function (bid) { + if (!unifiedID) { + unifiedID = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'userId.tdid'); + } + + if (bid.schain) { + schain = schain || bid.schain; + } + + iv = iv || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('iv', bid.params); + var bidSizes = bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes || bid.sizes; + bidSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidSizes) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidSizes[0]) ? bidSizes : [bidSizes]; + bidSizes = bidSizes.filter(function (size) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](size); + }); + var processedSizes = bidSizes.map(function (size) { + return { + w: parseInt(size[0], 10), + h: parseInt(size[1], 10) + }; + }); + sovrnImps.push({ + adunitcode: bid.adUnitCode, + id: bid.bidId, + banner: { + format: processedSizes, + w: 1, + h: 1 + }, + tagid: String(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('tagid', bid.params)), + bidfloor: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('bidfloor', bid.params) + }); + }); + + var page = bidderRequest.refererInfo.referer; // clever trick to get the domain + + var domain = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](page).hostname; + var sovrnBidReq = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: sovrnImps, + site: { + page: page, + domain: domain + } + }; + + if (schain) { + sovrnBidReq.source = { + ext: { + schain: schain + } + }; + } + + if (bidderRequest.gdprConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](sovrnBidReq, 'regs.ext.gdpr', +bidderRequest.gdprConsent.gdprApplies); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](sovrnBidReq, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + } + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](sovrnBidReq, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (unifiedID) { + var idArray = [{ + source: 'adserver.org', + uids: [{ + id: unifiedID, + ext: { + rtiPartner: 'TDID' + } + }] + }]; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](sovrnBidReq, 'user.ext.eids', idArray); + } + + var url = "https://ap.lijit.com/rtb/bid?src=Genius_prebid_4.2.0"; + if (iv) url += "&iv=".concat(iv); + return { + method: 'POST', + url: url, + data: JSON.stringify(sovrnBidReq), + options: { + contentType: 'text/plain' + } + }; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Could not build bidrequest, error deatils:', e); + } + }, + + /** + * Format Sovrn responses as Prebid bid responses + * @param {id, seatbid} sovrnResponse A successful response from Sovrn. + * @return {Bid[]} An array of formatted bids. + */ + interpretResponse: function interpretResponse(_ref) { + var _ref$body = _ref.body, + id = _ref$body.id, + seatbid = _ref$body.seatbid; + + try { + var sovrnBidResponses = []; + + if (id && seatbid && seatbid.length > 0 && seatbid[0].bid && seatbid[0].bid.length > 0) { + seatbid[0].bid.map(function (sovrnBid) { + sovrnBidResponses.push({ + requestId: sovrnBid.impid, + cpm: parseFloat(sovrnBid.price), + width: parseInt(sovrnBid.w), + height: parseInt(sovrnBid.h), + creativeId: sovrnBid.crid || sovrnBid.id, + dealId: sovrnBid.dealid || null, + currency: 'USD', + netRevenue: true, + mediaType: __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], + ad: decodeURIComponent("".concat(sovrnBid.adm, "")), + ttl: 60 + }); + }); + } + + return sovrnBidResponses; + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('Could not intrepret bidresponse, error deatils:', e); + } + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { + try { + var tracks = []; + + if (serverResponses && serverResponses.length !== 0) { + if (syncOptions.iframeEnabled) { + var iidArr = serverResponses.filter(function (resp) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](resp, 'body.ext.iid'); + }).map(function (resp) { + return resp.body.ext.iid; + }); + var params = []; + + if (gdprConsent && gdprConsent.gdprApplies && typeof gdprConsent.consentString === 'string') { + params.push(['gdpr_consent', gdprConsent.consentString]); + } + + if (uspConsent) { + params.push(['us_privacy', uspConsent]); + } + + if (iidArr[0]) { + params.push(['informer', iidArr[0]]); + tracks.push({ + type: 'iframe', + url: 'https://ap.lijit.com/beacon?' + params.map(function (p) { + return p.join('='); + }).join('&') + }); + } + } + + if (syncOptions.pixelEnabled) { + serverResponses.filter(function (resp) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](resp, 'body.ext.sync.pixels'); + }).reduce(function (acc, resp) { + return acc.concat(resp.body.ext.sync.pixels); + }, []).map(function (pixel) { + return pixel.url; + }).forEach(function (url) { + return tracks.push({ + type: 'image', + url: url + }); + }); + } + } + + return tracks; + } catch (e) { + return []; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[720]); \ No newline at end of file diff --git a/build/dist/spotxBidAdapter.js b/build/dist/spotxBidAdapter.js new file mode 100644 index 00000000000..cc7e4e0e4cc --- /dev/null +++ b/build/dist/spotxBidAdapter.js @@ -0,0 +1,524 @@ +pbjsChunk([94],{ + +/***/ 722: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(723); + + +/***/ }), + +/***/ 723: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GOOGLE_CONSENT", function() { return GOOGLE_CONSENT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'spotx'; +var URL = 'https://search.spotxchange.com/openrtb/2.3/dados/'; +var ORTB_VERSION = '2.3'; +var GOOGLE_CONSENT = { + consented_providers: ['3', '7', '11', '12', '15', '20', '22', '35', '43', '46', '48', '55', '57', '61', '62', '66', '70', '80', '83', '85', '86', '89', '93', '108', '122', '124', '125', '126', '131', '134', '135', '136', '143', '144', '147', '149', '153', '154', '159', '161', '162', '165', '167', '171', '178', '184', '188', '192', '195', '196', '202', '209', '211', '218', '221', '228', '229', '230', '236', '239', '241', '253', '255', '259', '266', '271', '272', '274', '286', '291', '294', '303', '308', '310', '311', '313', '314', '316', '317', '322', '323', '327', '336', '338', '340', '348', '350', '358', '359', '363', '367', '370', '371', '384', '385', '389', '393', '394', '397', '398', '407', '414', '415', '424', '429', '430', '432', '436', '438', '440', '442', '443', '445', '448', '449', '453', '459', '479', '482', '486', '491', '492', '494', '495', '503', '505', '510', '522', '523', '528', '537', '540', '550', '559', '560', '568', '571', '574', '575', '576', '584', '585', '587', '588', '590', '591', '592', '595', '609', '621', '624', '723', '725', '733', '737', '776', '780', '782', '787', '797', '798', '802', '803', '814', '817', '820', '821', '827', '829', '839', '853', '864', '867', '874', '899', '904', '922', '926', '931', '932', '933', '938', '955', '973', '976', '979', '981', '985', '987', '991', '1003', '1024', '1025', '1027', '1028', '1029', '1033', '1034', '1040', '1047', '1048', '1051', '1052', '1053', '1054', '1062', '1063', '1067', '1072', '1085', '1092', '1095', '1097', '1099', '1100', '1107', '1126', '1127', '1143', '1149', '1152', '1162', '1166', '1167', '1170', '1171', '1172', '1188', '1192', '1199', '1201', '1204', '1205', '1211', '1212', '1215', '1220', '1225', '1226', '1227', '1230', '1232', '1236', '1241', '1248', '1250', '1252', '1268', '1275', '1276', '1284', '1286', '1298', '1301', '1307', '1312', '1313', '1317', '1329', '1336', '1344', '1345', '1356', '1362', '1365', '1375', '1403', '1409', '1411', '1415', '1416', '1419', '1423', '1440', '1442', '1449', '1451', '1455', '1456', '1468', '1496', '1503', '1509', '1512', '1514', '1517', '1520', '1525', '1540', '1547', '1548', '1555', '1558', '1570', '1575', '1577', '1579', '1583', '1584', '1591', '1598', '1603', '1608', '1613', '1616', '1626', '1631', '1633', '1638', '1642', '1648', '1651', '1652', '1653', '1660', '1665', '1667', '1669', '1671', '1674', '1677', '1678', '1682', '1684', '1697', '1703', '1705', '1716', '1720', '1721', '1722', '1725', '1732', '1733', '1735', '1739', '1741', '1745', '1750', '1753', '1760', '1765', '1769', '1776', '1780', '1782', '1786', '1791', '1794', '1799', '1800', '1801', '1810', '1827', '1831', '1832', '1834', '1837', '1840', '1843', '1844', '1845', '1858', '1859', '1863', '1866', '1870', '1872', '1875', '1878', '1880', '1882', '1883', '1889', '1892', '1896', '1898', '1899', '1902', '1905', '1911', '1922', '1928', '1929', '1934', '1942', '1943', '1944', '1945', '1958', '1960', '1962', '1963', '1964', '1967', '1968', '1978', '1985', '1986', '1987', '1998', '2003', '2007', '2012', '2013', '2027', '2035', '2038', '2039', '2044', '2047', '2052', '2056', '2059', '2062', '2064', '2068', '2070', '2072', '2078', '2079', '2084', '2088', '2090', '2095', '2100', '2103', '2107', '2109', '2113', '2115', '2121', '2127', '2130', '2133', '2137', '2140', '2141', '2145', '2147', '2150', '2156', '2166', '2170', '2171', '2176', '2177', '2179', '2183', '2186', '2192', '2198', '2202', '2205', '2214', '2216', '2219', '2220', '2222', '2223', '2224', '2225', '2227', '2228', '2234', '2238', '2247', '2251', '2253', '2262', '2264', '2271', '2276', '2278', '2279', '2282', '2290', '2292', '2295', '2299', '2305', '2306', '2310', '2311', '2312', '2315', '2320', '2325', '2328', '2331', '2334', '2335', '2336', '2337', '2343', '2346', '2354', '2357', '2358', '2359', '2366', '2370', '2373', '2376', '2377', '2380', '2382', '2387', '2389', '2392', '2394', '2400', '2403', '2405', '2406', '2407', '2410', '2411', '2413', '2414', '2415', '2416', '2418', '2422', '2425', '2427', '2435', '2437', '2440', '2441', '2447', '2453', '2459', '2461', '2462', '2464', '2467', '2468', '2472', '2477', '2481', '2484', '2486', '2492', '2493', '2496', '2497', '2498', '2499', '2504', '2506', '2510', '2511', '2512', '2517', '2526', '2527', '2531', '2532', '2534', '2542', '2544', '2552', '2555', '2559', '2563', '2564', '2567', '2568', '2569', '2571', '2572', '2573', '2575', '2577', '2579', '2583', '2584', '2586', '2589', '2595', '2596', '2597', '2601', '2604', '2605', '2609', '2610', '2612', '2614', '2621', '2622', '2624', '2628', '2629', '2632', '2634', '2636', '2639', '2643', '2645', '2646', '2647', '2649', '2650', '2651', '2652', '2656', '2657', '2658', '2660', '2661', '2662', '2663', '2664', '2669', '2670', '2673', '2676', '2677', '2678', '2681', '2682', '2684', '2685', '2686', '2689', '2690', '2691', '2695', '2698', '2699', '2702', '2704', '2705', '2706', '2707', '2709', '2710', '2713', '2714', '2727', '2729', '2739', '2758', '2765', '2766', '2767', '2768', '2770', '2771', '2772', '2776', '2777', '2778', '2779', '2780', '2783', '2784', '2786', '2787', '2791', '2792', '2793', '2797', '2798', '2801', '2802', '2803', '2805', '2808', '2809', '2810', '2811', '2812', '2813', '2814', '2817', '2818', '2824', '2826', '2827', '2829', '2830', '2831', '2832', '2834', '2836', '2838', '2840', '2842', '2843', '2844', '2850', '2851', '2852', '2854', '2858', '2860', '2862', '2864', '2865', '2866', '2867', '2868', '2869', '2871'] +}; +var spec = { + code: BIDDER_CODE, + gvlid: 165, + aliases: ['spotx'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + + /** + * Determines whether or not the given bid request is valid. + * From Prebid.js: isBidRequestValid - Verify the the AdUnits.bids, respond with true (valid) or false (invalid). + * + * @param {object} bid The bid to validate. + * @return boolean True if this is a valid bid, and false otherwise. + */ + isBidRequestValid: function isBidRequestValid(bid) { + if (bid && _typeof(bid.params) !== 'object') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](BIDDER_CODE + ': params is not defined or is incorrect in the bidder settings.'); + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video')) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](BIDDER_CODE + ': mediaTypes.video is not present in the bidder settings.'); + return false; + } + + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize'); + + if (!playerSize || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](playerSize)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](BIDDER_CODE + ': mediaTypes.video.playerSize is not defined in the bidder settings.'); + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('channel_id', bid.params)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](BIDDER_CODE + ': channel_id is not present in bidder params'); + return false; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context') == 'outstream' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.ad_unit') == 'outstream') { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('outstream_function', bid.params)) { + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('outstream_options', bid.params)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](BIDDER_CODE + ': please define outstream_options parameter or override the default SpotX outstream rendering by defining your own Outstream function using field outstream_function.'); + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('slot', bid.params.outstream_options)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](BIDDER_CODE + ': please define parameters slot outstream_options object in the configuration.'); + return false; + } + } + } + + return true; + }, + + /** + * Make a server request from the list of BidRequests. + * from Prebid.js: buildRequests - Takes an array of valid bid requests, all of which are guaranteed to have passed the isBidRequestValid() test. + * + * @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 page = bidderRequest.refererInfo.referer; + var isPageSecure = !!page.match(/^https:/); + var siteId = ''; + var spotxRequests = bidRequests.map(function (bid) { + var channelId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('channel_id', bid.params); + var pubcid = null; + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize'); + var contentWidth = playerSize[0][0]; + var contentHeight = playerSize[0][1]; + var secure = isPageSecure || (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('secure', bid.params) ? 1 : 0); + var ext = { + sdk_name: 'Prebid 1+', + versionOrtb: ORTB_VERSION + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('hide_skin', bid.params) != '') { + ext.hide_skin = +!!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('hide_skin', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('ad_volume', bid.params) != '') { + ext.ad_volume = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('ad_volume', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('ad_unit', bid.params) != '') { + ext.ad_unit = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('ad_unit', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('outstream_options', bid.params) != '') { + ext.outstream_options = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('outstream_options', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('outstream_function', bid.params) != '') { + ext.outstream_function = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('outstream_function', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('custom', bid.params) != '') { + ext.custom = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('custom', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('pre_market_bids', bid.params) != '' && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('pre_market_bids', bid.params))) { + var preMarketBids = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('pre_market_bids', bid.params); + ext.pre_market_bids = []; + + for (var i in preMarketBids) { + var preMarketBid = preMarketBids[i]; + var vastStr = ''; + + if (preMarketBid['vast_url']) { + vastStr = '' + preMarketBid['vast_url'] + ''; + } else if (preMarketBid['vast_string']) { + vastStr = preMarketBid['vast_string']; + } + + ext.pre_market_bids.push({ + id: preMarketBid['deal_id'], + seatbid: [{ + bid: [{ + impid: Date.now(), + dealid: preMarketBid['deal_id'], + price: preMarketBid['price'], + adm: vastStr + }] + }], + cur: preMarketBid['currency'], + ext: { + event_log: [{}] + } + }); + } + } + + var mimes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('mimes', bid.params) || ['application/javascript', 'video/mp4', 'video/webm']; + var spotxReq = { + id: bid.bidId, + secure: secure, + video: { + w: contentWidth, + h: contentHeight, + ext: ext, + mimes: mimes + } + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('price_floor', bid.params) != '') { + spotxReq.bidfloor = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('price_floor', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('start_delay', bid.params) != '') { + spotxReq.video.startdelay = 0 + Boolean(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('start_delay', bid.params)); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('min_duration', bid.params) != '') { + spotxReq.video.minduration = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('min_duration', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('max_duration', bid.params) != '') { + spotxReq.video.maxduration = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('max_duration', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('placement_type', bid.params) != '') { + spotxReq.video.ext.placement = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('placement_type', bid.params); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('position', bid.params) != '') { + spotxReq.video.ext.pos = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('position', bid.params); + } + + if (bid.crumbs && bid.crumbs.pubcid) { + pubcid = bid.crumbs.pubcid; + } + + var language = navigator.language ? 'language' : 'userLanguage'; + var device = { + h: screen.height, + w: screen.width, + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0, + language: navigator[language].split('-')[0], + make: navigator.vendor ? navigator.vendor : '', + ua: navigator.userAgent + }; + var requestPayload = { + id: channelId, + imp: spotxReq, + site: { + id: siteId, + page: page, + content: 'content' + }, + device: device, + ext: { + wrap_response: 1 + } + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('number_of_ads', bid.params)) { + requestPayload['ext']['number_of_ads'] = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('number_of_ads', bid.params); + } + + var userExt = {}; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('spotx_all_google_consent', bid.params) == 1) { + userExt['consented_providers_settings'] = GOOGLE_CONSENT; + } // Add GDPR flag and consent string + + + if (bidderRequest && bidderRequest.gdprConsent) { + userExt.consent = bidderRequest.gdprConsent.consentString; + + if (typeof bidderRequest.gdprConsent.gdprApplies !== 'undefined') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](requestPayload, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"](requestPayload, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } // ID5 fied + + + if (bid && bid.userId && bid.userId.id5id) { + userExt.eids = userExt.eids || []; + userExt.eids.push({ + source: 'id5-sync.com', + uids: [{ + id: bid.userId.id5id + }] + }); + } // Add common id if available + + + if (pubcid) { + userExt.fpc = pubcid; + } // Add schain object if it is present + + + if (bid && bid.schain) { + requestPayload['source'] = { + ext: { + schain: bid.schain + } + }; + } + + if (bid && bid.userId && bid.userId.tdid) { + userExt.eids = userExt.eids || []; + userExt.eids.push({ + source: 'adserver.org', + uids: [{ + id: bid.userId.tdid, + ext: { + rtiPartner: 'TDID' + } + }] + }); + } // Only add the user object if it's not empty + + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](userExt)) { + requestPayload.user = { + ext: userExt + }; + } + + return { + method: 'POST', + url: URL + channelId, + data: requestPayload, + bidRequest: bidderRequest + }; + }); + return spotxRequests; + }, + + /** + * 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, bidderRequest) { + var bidResponses = []; + var serverResponseBody = serverResponse.body; + + if (serverResponseBody && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverResponseBody.seatbid)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponseBody.seatbid, function (bids) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](bids.bid, function (spotxBid) { + var currentBidRequest = {}; + + for (var i in bidderRequest.bidRequest.bids) { + if (spotxBid.impid == bidderRequest.bidRequest.bids[i].bidId) { + currentBidRequest = bidderRequest.bidRequest.bids[i]; + } + } + /** + * Make sure currency and price are the right ones + * TODO: what about the pre_market_bid partners sizes? + */ + + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](currentBidRequest.params.pre_market_bids, function (pmb) { + if (pmb.deal_id == spotxBid.id) { + spotxBid.price = pmb.price; + serverResponseBody.cur = pmb.currency; + } + }); + + var bid = { + requestId: currentBidRequest.bidId, + currency: serverResponseBody.cur || 'USD', + cpm: spotxBid.price, + creativeId: spotxBid.crid || '', + ttl: 360, + netRevenue: true, + channel_id: serverResponseBody.id, + cache_key: spotxBid.ext.cache_key, + vastUrl: 'https://search.spotxchange.com/ad/vast.html?key=' + spotxBid.ext.cache_key, + videoCacheKey: spotxBid.ext.cache_key, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], + width: spotxBid.w, + height: spotxBid.h + }; + bid.meta = bid.meta || {}; + + if (spotxBid && spotxBid.adomain && spotxBid.adomain.length > 0) { + bid.meta.advertiserDomains = spotxBid.adomain; + } + + var context1 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](currentBidRequest, 'mediaTypes.video.context'); + var context2 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](currentBidRequest, 'params.ad_unit'); + + if (context1 == 'outstream' || context2 == 'outstream') { + var playersize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](currentBidRequest, 'mediaTypes.video.playerSize'); + var renderer = __WEBPACK_IMPORTED_MODULE_1__src_Renderer_js__["a" /* Renderer */].install({ + id: 0, + url: '//', + config: { + adText: 'SpotX Outstream Video Ad via Prebid.js', + player_width: playersize[0][0], + player_height: playersize[0][1], + content_page_url: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'data.site.page'), + ad_mute: +!!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](currentBidRequest, 'params.ad_mute'), + hide_skin: +!!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](currentBidRequest, 'params.hide_skin'), + outstream_options: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](currentBidRequest, 'params.outstream_options'), + outstream_function: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](currentBidRequest, 'params.outstream_function') + } + }); + + try { + renderer.setRender(outstreamRender); + renderer.setEventHandlers({ + impression: function impression() { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('SpotX outstream video impression event'); + }, + loaded: function loaded() { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('SpotX outstream video loaded event'); + }, + ended: function ended() { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('SpotX outstream renderer video event'); + } + }); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender or setEve,tHandlers on renderer', err); + } + + bid.renderer = renderer; + } + + bidResponses.push(bid); + }); + }); + } + + return bidResponses; + } +}; + +function createOutstreamScript(bid) { + var slot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('slot', bid.renderer.config.outstream_options); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('[SPOTX][renderer] Handle SpotX outstream renderer'); + var script = window.document.createElement('script'); + script.type = 'text/javascript'; + script.src = 'https://js.spotx.tv/easi/v1/' + bid.channel_id + '.js'; + var dataSpotXParams = {}; + dataSpotXParams['data-spotx_channel_id'] = '' + bid.channel_id; + dataSpotXParams['data-spotx_vast_url'] = '' + bid.vastUrl; + dataSpotXParams['data-spotx_content_page_url'] = bid.renderer.config.content_page_url; + dataSpotXParams['data-spotx_ad_unit'] = 'incontent'; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('[SPOTX][renderer] Default beahavior'); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('ad_mute', bid.renderer.config.outstream_options)) { + dataSpotXParams['data-spotx_ad_mute'] = '0'; + } + + dataSpotXParams['data-spotx_collapse'] = '0'; + dataSpotXParams['data-spotx_autoplay'] = '1'; + dataSpotXParams['data-spotx_blocked_autoplay_override_mode'] = '1'; + dataSpotXParams['data-spotx_video_slot_can_autoplay'] = '1'; + var playersizeAutoAdapt = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('playersize_auto_adapt', bid.renderer.config.outstream_options); + + if (playersizeAutoAdapt && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isBoolean"](playersizeAutoAdapt) && playersizeAutoAdapt === true) { + if (bid.width && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.width) && bid.height && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isNumber"](bid.height)) { + var ratio = bid.width / bid.height; + var slotClientWidth = window.document.getElementById(slot).clientWidth; + var playerWidth = bid.renderer.config.player_width; + var playerHeight = bid.renderer.config.player_height; + var contentWidth = 0; + var contentHeight = 0; + + if (slotClientWidth < playerWidth) { + playerWidth = slotClientWidth; + playerHeight = playerWidth / ratio; + } + + if (ratio <= 1) { + contentWidth = Math.round(playerHeight * ratio); + contentHeight = playerHeight; + } else { + contentWidth = playerWidth; + contentHeight = Math.round(playerWidth / ratio); + } + + dataSpotXParams['data-spotx_content_width'] = '' + contentWidth; + dataSpotXParams['data-spotx_content_height'] = '' + contentHeight; + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('[SPOTX][renderer] PlayerSize auto adapt: bid.width and bid.height are incorrect'); + } + } + + var customOverride = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('custom_override', bid.renderer.config.outstream_options); + + if (customOverride && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](customOverride)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('[SPOTX][renderer] Custom beahavior.'); + + for (var name in customOverride) { + if (customOverride.hasOwnProperty(name)) { + if (name === 'channel_id' || name === 'vast_url' || name === 'content_page_url' || name === 'ad_unit') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('[SPOTX][renderer] Custom beahavior: following option cannot be overrided: ' + name); + } else { + dataSpotXParams['data-spotx_' + name] = customOverride[name]; + } + } + } + } + + for (var key in dataSpotXParams) { + if (dataSpotXParams.hasOwnProperty(key)) { + script.setAttribute(key, dataSpotXParams[key]); + } + } + + return script; +} + +function outstreamRender(bid) { + var script = createOutstreamScript(bid); + + if (bid.renderer.config.outstream_function != null && typeof bid.renderer.config.outstream_function === 'function') { + bid.renderer.config.outstream_function(bid, script); + } else { + try { + var inIframe = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('in_iframe', bid.renderer.config.outstream_options); + + if (inIframe && window.document.getElementById(inIframe).nodeName == 'IFRAME') { + var rawframe = window.document.getElementById(inIframe); + var framedoc = rawframe.contentDocument; + + if (!framedoc && rawframe.contentWindow) { + framedoc = rawframe.contentWindow.document; + } + + framedoc.body.appendChild(script); + } else { + var slot = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('slot', bid.renderer.config.outstream_options); + + if (slot && window.document.getElementById(slot)) { + window.document.getElementById(slot).appendChild(script); + } else { + window.document.getElementsByTagName('head')[0].appendChild(script); + } + } + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('[SPOTX][renderer] Error:' + err.message); + } + } +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[722]); \ No newline at end of file diff --git a/build/dist/staqAnalyticsAdapter.js b/build/dist/staqAnalyticsAdapter.js new file mode 100644 index 00000000000..94143dee869 --- /dev/null +++ b/build/dist/staqAnalyticsAdapter.js @@ -0,0 +1,798 @@ +pbjsChunk([7],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 724: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(725); + + +/***/ }), + +/***/ 725: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (immutable) */ __webpack_exports__["getUmtSource"] = getUmtSource; +/* harmony export (immutable) */ __webpack_exports__["ExpiringQueue"] = ExpiringQueue; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_refererDetection_js__ = __webpack_require__(30); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_storageManager_js__ = __webpack_require__(9); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + +var storageObj = Object(__WEBPACK_IMPORTED_MODULE_6__src_storageManager_js__["b" /* getStorageManager */])(); +var ANALYTICS_VERSION = '1.0.0'; +var DEFAULT_QUEUE_TIMEOUT = 4000; +var DEFAULT_HOST = 'tag.staq.com'; +var staqAdapterRefWin; +var STAQ_EVENTS = { + AUCTION_INIT: 'auctionInit', + BID_REQUEST: 'bidRequested', + BID_RESPONSE: 'bidResponse', + BID_WON: 'bidWon', + AUCTION_END: 'auctionEnd', + TIMEOUT: 'adapterTimedOut' +}; + +function buildRequestTemplate(connId) { + var url = staqAdapterRefWin.referer; + var ref = staqAdapterRefWin.referer; + var topLocation = staqAdapterRefWin.referer; + return { + ver: ANALYTICS_VERSION, + domain: topLocation.hostname, + path: topLocation.pathname, + userAgent: navigator.userAgent, + connId: connId, + env: { + screen: { + w: window.screen.width, + h: window.screen.height + }, + lang: navigator.language + }, + src: getUmtSource(url, ref) + }; +} + +var analyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_0__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: 'endpoint' +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (!analyticsAdapter.context) { + return; + } + + var handler = null; + + switch (eventType) { + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_INIT: + if (analyticsAdapter.context.queue) { + analyticsAdapter.context.queue.init(); + } + + handler = trackAuctionInit; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_REQUESTED: + handler = trackBidRequest; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_RESPONSE: + handler = trackBidResponse; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_WON: + handler = trackBidWon; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_TIMEOUT: + handler = trackBidTimeout; + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_END: + handler = trackAuctionEnd; + break; + } + + if (handler) { + var events = handler(args); + + if (analyticsAdapter.context.queue) { + analyticsAdapter.context.queue.push(events); + + if (eventType === __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.BID_WON) { + analyticsAdapter.context.queue.updateWithWins(events); + } + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_1__src_constants_json___default.a.EVENTS.AUCTION_END) { + sendAll(); + } + } + } +}); + +analyticsAdapter.context = {}; +analyticsAdapter.originEnableAnalytics = analyticsAdapter.enableAnalytics; + +analyticsAdapter.enableAnalytics = function (config) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('Enabling STAQ Adapter'); + staqAdapterRefWin = Object(__WEBPACK_IMPORTED_MODULE_3__src_refererDetection_js__["a" /* getRefererInfo */])(window); + + if (!config.options.connId) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"]('ConnId is not defined. STAQ Analytics won\'t work'); + return; + } + + if (!config.options.url) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logError"]('URL is not defined. STAQ Analytics won\'t work'); + return; + } + + analyticsAdapter.context = { + host: config.options.host || DEFAULT_HOST, + url: config.options.url, + connectionId: config.options.connId, + requestTemplate: buildRequestTemplate(config.options.connId), + queue: new ExpiringQueue(sendAll, config.options.queueTimeout || DEFAULT_QUEUE_TIMEOUT) + }; + analyticsAdapter.originEnableAnalytics(config); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: analyticsAdapter, + code: 'staq' +}); +/* harmony default export */ __webpack_exports__["default"] = (analyticsAdapter); + +function sendAll() { + var events = analyticsAdapter.context.queue.popAll(); + + if (events.length !== 0) { + var req = analyticsAdapter.context.requestTemplate; + req.auctionId = analyticsAdapter.context.auctionId; + req.events = events; + analyticsAdapter.ajaxCall(JSON.stringify(req)); + } +} + +analyticsAdapter.ajaxCall = function ajaxCall(data) { + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"]('SENDING DATA: ' + data); + Object(__WEBPACK_IMPORTED_MODULE_5__src_ajax_js__["a" /* ajax */])("https://".concat(analyticsAdapter.context.url, "/prebid/").concat(analyticsAdapter.context.connectionId), function () {}, data, { + contentType: 'text/plain' + }); +}; + +function trackAuctionInit(args) { + analyticsAdapter.context.auctionTimeStart = Date.now(); + analyticsAdapter.context.auctionId = args.auctionId; + var event = createHbEvent(args.auctionId, undefined, STAQ_EVENTS.AUCTION_INIT); + return [event]; +} + +function trackBidRequest(args) { + return args.bids.map(function (bid) { + return createHbEvent(args.auctionId, args.bidderCode, STAQ_EVENTS.BID_REQUEST, bid.adUnitCode); + }); +} + +function trackBidResponse(args) { + var event = createHbEvent(args.auctionId, args.bidderCode, STAQ_EVENTS.BID_RESPONSE, args.adUnitCode, args.cpm, args.timeToRespond / 1000, false, args); + return [event]; +} + +function trackBidWon(args) { + var event = createHbEvent(args.auctionId, args.bidderCode, STAQ_EVENTS.BID_WON, args.adUnitCode, args.cpm, undefined, true, args); + return [event]; +} + +function trackAuctionEnd(args) { + var event = createHbEvent(args.auctionId, undefined, STAQ_EVENTS.AUCTION_END, undefined, undefined, (Date.now() - analyticsAdapter.context.auctionTimeStart) / 1000); + return [event]; +} + +function trackBidTimeout(args) { + return args.map(function (arg) { + return createHbEvent(arg.auctionId, arg.bidderCode, STAQ_EVENTS.TIMEOUT); + }); +} + +function createHbEvent(auctionId, adapter, event) { + var adUnitCode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined; + var value = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + var time = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; + var bidWon = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined; + var eventArgs = arguments.length > 7 ? arguments[7] : undefined; + var ev = { + event: event + }; + + if (adapter) { + ev.adapter = adapter; + ev.bidderName = adapter; + } + + if (adUnitCode) { + ev.adUnitCode = adUnitCode; + } + + if (value) { + ev.cpm = value; + } + + if (time) { + ev.timeToRespond = time; + } + + if (typeof bidWon !== 'undefined') { + ev.bidWon = bidWon; + } else if (event === 'bidResponse') { + ev.bidWon = false; + } + + ev.auctionId = auctionId; + + if (eventArgs) { + if (STAQ_EVENTS.BID_RESPONSE == event || STAQ_EVENTS.BID_WON == event) { + ev.width = eventArgs.width; + ev.height = eventArgs.height; + ev.adId = eventArgs.adId; + } + } + + 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 STAQ_PREBID_KEY = 'staq_analytics'; +var DIRECT = '(direct)'; +var REFERRAL = '(referral)'; +var ORGANIC = '(organic)'; +var storage = { + getItem: function getItem(name) { + return storageObj.getDataFromLocalStorage(name); + }, + setItem: function setItem(name, value) { + storageObj.setDataInLocalStorage(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(STAQ_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 = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["parseUrl"](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 = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["parseUrl"](referrer); + return [ref.hostname, ref.pathname]; + } + + function getUTM(pageUrl) { + var urlParameters = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["parseUrl"](pageUrl).search; + + if (!urlParameters['utm_campaign'] || !urlParameters['utm_source']) { + return; + } + + var utmArgs = []; + + __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["_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(STAQ_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; + + this.push = function (event) { + if (event instanceof Array) { + queue.push.apply(queue, event); + } else { + queue.push(event); + } + + reset(); + }; + + this.updateWithWins = function (winEvents) { + winEvents.forEach(function (winEvent) { + queue.forEach(function (prevEvent) { + if (prevEvent.event === 'bidResponse' && prevEvent.auctionId == winEvent.auctionId && prevEvent.adUnitCode == winEvent.adUnitCode && prevEvent.adId == winEvent.adId && prevEvent.adapter == winEvent.adapter) { + prevEvent.bidWon = true; + } + }); + }); + }; + + 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); + } +} + +/***/ }) + +},[724]); \ No newline at end of file diff --git a/build/dist/stvBidAdapter.js b/build/dist/stvBidAdapter.js new file mode 100644 index 00000000000..82d724e4944 --- /dev/null +++ b/build/dist/stvBidAdapter.js @@ -0,0 +1,176 @@ +pbjsChunk([93],{ + +/***/ 726: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(727); + + +/***/ }), + +/***/ 727: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'stv'; +var VADS_ENDPOINT_URL = 'https://ads.smartstream.tv/r/'; +var DEFAULT_VIDEO_SOURCE = 'vads'; +var DEFAULT_BANNER_FORMAT = 'vast2'; +var spec = { + code: BIDDER_CODE, + aliases: ['vads'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placement; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bidRequest) { + var params = bidRequest.params; + var videoData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video') || {}; + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](videoData.playerSize || bidRequest.sizes)[0]; + var width = sizes.split('x')[0]; + var height = sizes.split('x')[1]; + var placementId = params.placement; + var rnd = Math.floor(Math.random() * 99999999999); + var referrer = bidderRequest.refererInfo.referer; + var bidId = bidRequest.bidId; + var endpoint = VADS_ENDPOINT_URL; + var payload = {}; + + if (isVideoRequest(bidRequest)) { + var source = params.source || DEFAULT_VIDEO_SOURCE; + + if (source === 'vads') { + payload = { + _f: 'vast2', + alternative: 'prebid_js', + _ps: placementId, + srw: width, + srh: height, + idt: 100, + rnd: rnd, + ref: referrer, + bid_id: bidId + }; + endpoint = VADS_ENDPOINT_URL; + } + } else { + var outputFormat = params.format || DEFAULT_BANNER_FORMAT; + payload = { + _f: outputFormat, + alternative: 'prebid_js', + inventory_item_id: placementId, + srw: width, + srh: height, + idt: 100, + rnd: rnd, + ref: referrer, + bid_id: bidId + }; + } + + prepareExtraParams(params, payload); + return { + method: 'GET', + url: endpoint, + data: objectToQueryString(payload) + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + var crid = response.crid || 0; + var cpm = response.cpm / 1000000 || 0; + + if (cpm !== 0 && crid !== 0) { + var dealId = response.dealid || ''; + var currency = response.currency || 'EUR'; + var netRevenue = response.netRevenue === undefined ? true : response.netRevenue; + var bidResponse = { + requestId: response.bid_id, + cpm: cpm, + width: response.width, + height: response.height, + creativeId: crid, + dealId: dealId, + currency: currency, + netRevenue: netRevenue, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout') + }; + + if (response.vastXml) { + bidResponse.vastXml = response.vastXml; + bidResponse.mediaType = 'video'; + } else { + bidResponse.ad = response.adTag; + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + } +}; + +function objectToQueryString(obj, prefix) { + var str = []; + var p; + + for (p in obj) { + if (obj.hasOwnProperty(p)) { + var k = prefix ? prefix + '[' + p + ']' : p; + var v = obj[p]; + str.push(v !== null && _typeof(v) === 'object' ? objectToQueryString(v, k) : encodeURIComponent(k) + '=' + (k == '_ps' ? v : encodeURIComponent(v))); + } + } + + return str.join('&'); +} +/** + * 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' || !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video'); +} + +function prepareExtraParams(params, payload) { + if (params.pfilter !== undefined) { + payload.pfilter = params.pfilter; + } + + if (params.bcat !== undefined) { + payload.bcat = params.bcat; + } + + if (params.noskip !== undefined) { + payload.noskip = params.noskip; + } + + if (params.dvt !== undefined) { + payload.dvt = params.dvt; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[726]); \ No newline at end of file diff --git a/build/dist/sublimeBidAdapter.js b/build/dist/sublimeBidAdapter.js new file mode 100644 index 00000000000..10398ef9988 --- /dev/null +++ b/build/dist/sublimeBidAdapter.js @@ -0,0 +1,246 @@ +pbjsChunk([92],{ + +/***/ 728: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(729); + + +/***/ }), + +/***/ 729: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["log"] = log; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "state", function() { return state; }); +/* harmony export (immutable) */ __webpack_exports__["setState"] = setState; +/* harmony export (immutable) */ __webpack_exports__["sendEvent"] = sendEvent; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + +var BIDDER_CODE = 'sublime'; +var BIDDER_GVLID = 114; +var DEFAULT_BID_HOST = 'pbjs.sskzlabs.com'; +var DEFAULT_CURRENCY = 'EUR'; +var DEFAULT_PROTOCOL = 'https'; +var DEFAULT_TTL = 600; +var SUBLIME_ANTENNA = 'antenna.ayads.co'; +var SUBLIME_VERSION = '0.5.2'; +/** + * Debug log message + * @param {String} msg + * @param {Object=} obj + */ + +function log(msg, obj) { + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logInfo"]('SublimeBidAdapter - ' + msg, obj); +} // Default state + +var state = { + zoneId: '', + transactionId: '' +}; +/** + * Set a new state + * @param {Object} value + */ + +function setState(value) { + _extends(state, value); + + log('State has been updated :', state); +} +/** + * Send pixel to our debug endpoint + * @param {string} eventName - Event name that will be send in the e= query string + */ + +function sendEvent(eventName) { + var ts = Date.now(); + var eventObject = { + t: ts, + tse: ts, + z: state.zoneId, + e: eventName, + src: 'pa', + puid: state.transactionId, + trId: state.transactionId, + ver: SUBLIME_VERSION + }; + log('Sending pixel for event: ' + eventName, eventObject); + var queryString = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["formatQS"](eventObject); + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["triggerPixel"]('https://' + SUBLIME_ANTENNA + '/?' + queryString); +} +/** + * 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) { + return !!Number(bid.params.zoneId); +} +/** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - An array of bids + * @param {Object} bidderRequest - Info describing the request to the server. + * @return {ServerRequest|ServerRequest[]} - Info describing the request to the server. + */ + + +function buildRequests(validBidRequests, bidderRequest) { + var commonPayload = { + pbav: SUBLIME_VERSION, + // Current Prebid params + prebidVersion: "4.2.0", + currencyCode: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency') || DEFAULT_CURRENCY, + timeout: _typeof(bidderRequest) === 'object' && !!bidderRequest ? bidderRequest.timeout : __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; // RefererInfo + + if (bidderRequest && bidderRequest.refererInfo) { + commonPayload.referer = bidderRequest.refererInfo.referer; + commonPayload.numIframes = bidderRequest.refererInfo.numIframes; + } // GDPR handling + + + if (bidderRequest && bidderRequest.gdprConsent) { + commonPayload.gdprConsent = bidderRequest.gdprConsent.consentString; + commonPayload.gdpr = bidderRequest.gdprConsent.gdprApplies; // we're handling the undefined case server side + } + + return validBidRequests.map(function (bid) { + var bidHost = bid.params.bidHost || DEFAULT_BID_HOST; + var protocol = bid.params.protocol || DEFAULT_PROTOCOL; + setState({ + transactionId: bid.transactionId, + zoneId: bid.params.zoneId, + debug: bid.params.debug || false + }); + var bidPayload = { + adUnitCode: bid.adUnitCode, + auctionId: bid.auctionId, + bidder: bid.bidder, + bidderRequestId: bid.bidderRequestId, + bidRequestsCount: bid.bidRequestsCount, + requestId: bid.bidId, + sizes: bid.sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }), + transactionId: bid.transactionId, + zoneId: bid.params.zoneId + }; + + var payload = _extends({}, commonPayload, bidPayload); + + return { + method: 'POST', + url: protocol + '://' + bidHost + '/bid', + data: payload, + options: { + contentType: 'application/json', + withCredentials: true + } + }; + }); +} +/** + * Unpack the response from the server into a list of bids. + * + * @param {*} serverResponse A successful response from the server. + * @param {*} bidRequest An object with bid request informations + * @return {Bid[]} An array of bids which were nested inside the server. + */ + + +function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + + if (response) { + if (response.timeout || !response.ad || //gmi.test(response.ad)) { + return bidResponses; + } // Setting our returned sizes object to default values + + + var returnedSizes = { + width: 1800, + height: 1000 + }; // Verifying Banner sizes + + if (bidRequest && bidRequest.data && bidRequest.data.w === 1 && bidRequest.data.h === 1) { + // If banner sizes are 1x1 we set our default size object to 1x1 + returnedSizes = { + width: 1, + height: 1 + }; + } + + var bidResponse = { + requestId: response.requestId || '', + cpm: response.cpm || 0, + width: response.width || returnedSizes.width, + height: response.height || returnedSizes.height, + creativeId: response.creativeId || 1, + dealId: response.dealId || 1, + currency: response.currency || DEFAULT_CURRENCY, + netRevenue: response.netRevenue || true, + ttl: response.ttl || DEFAULT_TTL, + ad: response.ad, + pbav: SUBLIME_VERSION + }; + bidResponses.push(bidResponse); + } + + return bidResponses; +} +/** + * Send pixel when bidWon event is triggered + * @param {Object} timeoutData + */ + + +function onBidWon(bid) { + log('Bid won', bid); + sendEvent('bidwon'); +} +/** + * Send debug when we timeout + * @param {Object} timeoutData + */ + + +function onTimeout(timeoutData) { + log('Timeout from adapter', timeoutData); + sendEvent('bidtimeout'); +} + +var spec = { + code: BIDDER_CODE, + gvlid: BIDDER_GVLID, + aliases: [], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + onBidWon: onBidWon, + onTimeout: onTimeout +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[728]); \ No newline at end of file diff --git a/build/dist/synacormediaBidAdapter.js b/build/dist/synacormediaBidAdapter.js new file mode 100644 index 00000000000..05186d46f5e --- /dev/null +++ b/build/dist/synacormediaBidAdapter.js @@ -0,0 +1,337 @@ +pbjsChunk([91],{ + +/***/ 730: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(731); + + +/***/ }), + +/***/ 731: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_config_js__ = __webpack_require__(3); + + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + +var BID_HOST = 'https://prebid.technoratimedia.com'; +var USER_SYNC_HOST = 'https://ad-cdn.technoratimedia.com'; +var VIDEO_PARAMS = ['minduration', 'maxduration', 'startdelay', 'placement', 'linearity', 'mimes', 'protocols', 'api']; +var BLOCKED_AD_SIZES = ['1x1', '1x2']; +var spec = { + code: 'synacormedia', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + sizeMap: {}, + isVideoBid: function isVideoBid(bid) { + return bid.mediaTypes !== undefined && bid.mediaTypes.hasOwnProperty('video'); + }, + isBidRequestValid: function isBidRequestValid(bid) { + var hasRequiredParams = bid && bid.params && bid.params.hasOwnProperty('placementId') && bid.params.hasOwnProperty('seatId'); + var hasAdSizes = bid && Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getAdUnitSizes"])(bid).filter(function (size) { + return BLOCKED_AD_SIZES.indexOf(size.join('x')) === -1; + }).length > 0; + return !!(hasRequiredParams && hasAdSizes); + }, + buildRequests: function buildRequests(validBidReqs, bidderRequest) { + var _this = this; + + if (!validBidReqs || !validBidReqs.length || !bidderRequest) { + return; + } + + var refererInfo = bidderRequest.refererInfo; + var openRtbBidRequest = { + id: bidderRequest.auctionId, + site: { + domain: location.hostname, + page: refererInfo.referer, + ref: document.referrer + }, + device: { + ua: navigator.userAgent + }, + imp: [] + }; + var schain = validBidReqs[0].schain; + + if (schain) { + openRtbBidRequest.source = { + ext: { + schain: schain + } + }; + } + + var seatId = null; + validBidReqs.forEach(function (bid, i) { + if (seatId && seatId !== bid.params.seatId) { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"])("Synacormedia: there is an inconsistent seatId: ".concat(bid.params.seatId, " but only sending bid requests for ").concat(seatId, ", you should double check your configuration")); + return; + } else { + seatId = bid.params.seatId; + } + + var placementId = bid.params.placementId; + var bidFloor = bid.params.bidfloor ? parseFloat(bid.params.bidfloor) : null; + + if (isNaN(bidFloor)) { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"])("Synacormedia: there is an invalid bid floor: ".concat(bid.params.bidfloor)); + } + + var pos = parseInt(bid.params.pos, 10); + + if (isNaN(pos)) { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"])("Synacormedia: there is an invalid POS: ".concat(bid.params.pos)); + pos = 0; + } + + var videoOrBannerKey = _this.isVideoBid(bid) ? 'video' : 'banner'; + var adSizes = Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getAdUnitSizes"])(bid).filter(function (size) { + return BLOCKED_AD_SIZES.indexOf(size.join('x')) === -1; + }); + var imps = []; + + if (videoOrBannerKey === 'banner') { + imps = _this.buildBannerImpressions(adSizes, bid, placementId, pos, bidFloor, videoOrBannerKey); + } else if (videoOrBannerKey === 'video') { + imps = _this.buildVideoImpressions(adSizes, bid, placementId, pos, bidFloor, videoOrBannerKey); + } + + if (imps.length > 0) { + imps.forEach(function (i) { + return openRtbBidRequest.imp.push(i); + }); + } + }); // CCPA + + if (bidderRequest && bidderRequest.uspConsent) { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepSetValue"])(openRtbBidRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + if (openRtbBidRequest.imp.length && seatId) { + return { + method: 'POST', + url: "".concat(BID_HOST, "/openrtb/bids/").concat(seatId, "?src=Genius_prebid_4.2.0"), + data: openRtbBidRequest, + options: { + contentType: 'application/json', + withCredentials: true + } + }; + } + }, + buildBannerImpressions: function buildBannerImpressions(adSizes, bid, placementId, pos, bidFloor, videoOrBannerKey) { + var format = []; + var imps = []; + adSizes.forEach(function (size, i) { + if (!size || size.length !== 2) { + return; + } + + format.push({ + w: size[0], + h: size[1] + }); + }); + + if (format.length > 0) { + var imp = { + id: "".concat(videoOrBannerKey.substring(0, 1)).concat(bid.bidId), + banner: { + format: format, + pos: pos + }, + tagid: placementId + }; + + if (bidFloor !== null && !isNaN(bidFloor)) { + imp.bidfloor = bidFloor; + } + + imps.push(imp); + } + + return imps; + }, + buildVideoImpressions: function buildVideoImpressions(adSizes, bid, placementId, pos, bidFloor, videoOrBannerKey) { + var _this2 = this; + + var imps = []; + adSizes.forEach(function (size, i) { + if (!size || size.length != 2) { + return; + } + + var size0 = size[0]; + var size1 = size[1]; + var imp = { + id: "".concat(videoOrBannerKey.substring(0, 1)).concat(bid.bidId, "-").concat(size0, "x").concat(size1), + tagid: placementId + }; + + if (bidFloor !== null && !isNaN(bidFloor)) { + imp.bidfloor = bidFloor; + } + + var videoOrBannerValue = { + w: size0, + h: size1, + pos: pos + }; + + if (bid.mediaTypes.video) { + _this2.setValidVideoParams(bid.mediaTypes.video, bid.params.video); + } + + if (bid.params.video) { + _this2.setValidVideoParams(bid.params.video, videoOrBannerValue); + } + + imp[videoOrBannerKey] = videoOrBannerValue; + imps.push(imp); + }); + return imps; + }, + setValidVideoParams: function setValidVideoParams(sourceObj, destObj) { + Object.keys(sourceObj).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(VIDEO_PARAMS, param) && sourceObj[param] !== null && (!isNaN(parseInt(sourceObj[param], 10)) || !(sourceObj[param].length < 1)); + }).forEach(function (param) { + return destObj[param] = Array.isArray(sourceObj[param]) ? sourceObj[param] : parseInt(sourceObj[param], 10); + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var updateMacros = function updateMacros(bid, r) { + return r ? r.replace(/\${AUCTION_PRICE}/g, bid.price) : r; + }; + + if (!serverResponse.body || _typeof(serverResponse.body) != 'object') { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"])('Synacormedia: server returned empty/non-json response: ' + JSON.stringify(serverResponse.body)); + return; + } + + var _serverResponse$body = serverResponse.body, + id = _serverResponse$body.id, + seatbids = _serverResponse$body.seatbid; + var bids = []; + + if (id && seatbids) { + seatbids.forEach(function (seatbid) { + seatbid.bid.forEach(function (bid) { + var creative = updateMacros(bid, bid.adm); + var nurl = updateMacros(bid, bid.nurl); + + var _bid$impid$match = bid.impid.match(/^([vb])(.*)$/), + _bid$impid$match2 = _slicedToArray(_bid$impid$match, 3), + impType = _bid$impid$match2[1], + impid = _bid$impid$match2[2]; + + var height = bid.h; + var width = bid.w; + var isVideo = impType === 'v'; + var isBanner = impType === 'b'; + + if ((!height || !width) && bidRequest.data && bidRequest.data.imp && bidRequest.data.imp.length > 0) { + bidRequest.data.imp.forEach(function (req) { + if (bid.impid === req.id) { + if (isVideo) { + height = req.video.h; + width = req.video.w; + } else if (isBanner) { + var bannerHeight = 1; + var bannerWidth = 1; + + if (req.banner.format && req.banner.format.length > 0) { + bannerHeight = req.banner.format[0].h; + bannerWidth = req.banner.format[0].w; + } + + height = bannerHeight; + width = bannerWidth; + } else { + height = 1; + width = 1; + } + } + }); + } + + var bidObj = { + requestId: impid, + adId: bid.id.replace(/~/g, '-'), + cpm: parseFloat(bid.price), + width: parseInt(width, 10), + height: parseInt(height, 10), + creativeId: "".concat(seatbid.seat, "_").concat(bid.crid), + currency: 'USD', + netRevenue: true, + mediaType: isVideo ? __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] : __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], + ad: creative, + ttl: 60 + }; + + if (isVideo) { + var _nurl$match = nurl.match(/ID=([^&]*)&?/), + _nurl$match2 = _slicedToArray(_nurl$match, 2), + uuid = _nurl$match2[1]; + + if (!__WEBPACK_IMPORTED_MODULE_4__src_config_js__["b" /* config */].getConfig('cache.url')) { + bidObj.videoCacheKey = encodeURIComponent(uuid); + } + + bidObj.vastUrl = nurl; + } + + bids.push(bidObj); + }); + }); + } + + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: "".concat(USER_SYNC_HOST, "/html/usersync.html?src=Genius_prebid_4.2.0") + }); + } else { + Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"])('Synacormedia: Please enable iframe based user sync.'); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[730]); \ No newline at end of file diff --git a/build/dist/taphypeBidAdapter.js b/build/dist/taphypeBidAdapter.js new file mode 100644 index 00000000000..3532e2482bf --- /dev/null +++ b/build/dist/taphypeBidAdapter.js @@ -0,0 +1,68 @@ +pbjsChunk([90],{ + +/***/ 732: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(733); + + +/***/ }), + +/***/ 733: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); + +var spec = { + code: 'taphype', + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placementId; + }, + buildRequests: function buildRequests(bidRequests) { + var requests = bidRequests.map(function (bid) { + var params = { + placementId: bid.params.placementId, + url: encodeURIComponent(window.location.href), + size: bid.sizes[0][0] + 'x' + bid.sizes[0][1], + rnd: Math.random(), + bidId: bid.bidId + }; + return { + method: 'GET', + url: 'https://us-central1-taphype-internal.cloudfunctions.net/th-prebid', + data: params, + options: { + withCredentials: false + } + }; + }); + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + if (!serverResponse || !serverResponse.body || !serverResponse.body.ad) { + return []; + } + + var bid = serverResponse.body; + var sizes = bid.size.split(','); + return [{ + requestId: bidRequest.data.bidId, + cpm: bid.price, + width: sizes[0], + height: sizes[1], + creativeId: bidRequest.data.bidId, + currency: bid.currency || 'USD', + netRevenue: true, + ad: bid.ad, + ttl: 360 + }]; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[732]); \ No newline at end of file diff --git a/build/dist/teadsBidAdapter.js b/build/dist/teadsBidAdapter.js new file mode 100644 index 00000000000..a03bc1d0355 --- /dev/null +++ b/build/dist/teadsBidAdapter.js @@ -0,0 +1,221 @@ +pbjsChunk([89],{ + +/***/ 734: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(735); + + +/***/ }), + +/***/ 735: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var utils = __webpack_require__(0); + +var BIDDER_CODE = 'teads'; +var ENDPOINT_URL = 'https://a.teads.tv/hb/bid-request'; +var gdprStatus = { + GDPR_APPLIES_PUBLISHER: 12, + GDPR_APPLIES_GLOBAL: 11, + GDPR_DOESNT_APPLY: 0, + CMP_NOT_FOUND_OR_ERROR: 22 +}; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['video', 'banner'], + + /** + * 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 isValid = false; + + if (typeof bid.params !== 'undefined') { + var isValidPlacementId = _validateId(utils.getValue(bid.params, 'placementId')); + + var isValidPageId = _validateId(utils.getValue(bid.params, 'pageId')); + + isValid = isValidPlacementId && isValidPageId; + } + + if (!isValid) { + utils.logError('Teads placementId and pageId parameters are required. Bid aborted.'); + } + + return isValid; + }, + + /** + * 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 bids = validBidRequests.map(buildRequestObject); + var payload = { + referrer: getReferrerInfo(bidderRequest), + pageReferrer: document.referrer, + networkBandwidth: getConnectionDownLink(window.navigator), + data: bids, + deviceWidth: screen.width, + hb_version: "4.2.0" + }; + + if (validBidRequests[0].schain) { + payload.schain = validBidRequests[0].schain; + } + + var gdpr = bidderRequest.gdprConsent; + + if (bidderRequest && gdpr) { + var isCmp = typeof gdpr.gdprApplies === 'boolean'; + var isConsentString = typeof gdpr.consentString === 'string'; + var status = isCmp ? findGdprStatus(gdpr.gdprApplies, gdpr.vendorData, gdpr.apiVersion) : gdprStatus.CMP_NOT_FOUND_OR_ERROR; + payload.gdpr_iab = { + consent: isConsentString ? gdpr.consentString : '', + status: status, + apiVersion: gdpr.apiVersion + }; + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + + var payloadString = JSON.stringify(payload); + return { + method: 'POST', + url: ENDPOINT_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, bidderRequest) { + var bidResponses = []; + serverResponse = serverResponse.body; + + if (serverResponse.responses) { + serverResponse.responses.forEach(function (bid) { + var bidResponse = { + cpm: bid.cpm, + width: bid.width, + height: bid.height, + currency: bid.currency, + netRevenue: true, + ttl: bid.ttl, + ad: bid.ad, + requestId: bid.bidId, + creativeId: bid.creativeId, + placementId: bid.placementId + }; + + if (bid.dealId) { + bidResponse.dealId = bid.dealId; + } + + bidResponses.push(bidResponse); + }); + } + + return bidResponses; + } +}; + +function getReferrerInfo(bidderRequest) { + var ref = ''; + + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + ref = bidderRequest.refererInfo.referer; + } + + return ref; +} + +function getConnectionDownLink(nav) { + return nav && nav.connection && nav.connection.downlink >= 0 ? nav.connection.downlink.toString() : ''; +} + +function findGdprStatus(gdprApplies, gdprData, apiVersion) { + var status = gdprStatus.GDPR_APPLIES_PUBLISHER; + + if (gdprApplies) { + if (isGlobalConsent(gdprData, apiVersion)) status = gdprStatus.GDPR_APPLIES_GLOBAL; + } else status = gdprStatus.GDPR_DOESNT_APPLY; + + return status; +} + +function isGlobalConsent(gdprData, apiVersion) { + return gdprData && apiVersion === 1 ? gdprData.hasGlobalScope || gdprData.hasGlobalConsent : gdprData && apiVersion === 2 ? !gdprData.isServiceSpecific : false; +} + +function buildRequestObject(bid) { + var reqObj = {}; + var placementId = utils.getValue(bid.params, 'placementId'); + var pageId = utils.getValue(bid.params, 'pageId'); + reqObj.sizes = getSizes(bid); + reqObj.bidId = utils.getBidIdParameter('bidId', bid); + reqObj.bidderRequestId = utils.getBidIdParameter('bidderRequestId', bid); + reqObj.placementId = parseInt(placementId, 10); + reqObj.pageId = parseInt(pageId, 10); + reqObj.adUnitCode = utils.getBidIdParameter('adUnitCode', bid); + reqObj.auctionId = utils.getBidIdParameter('auctionId', bid); + reqObj.transactionId = utils.getBidIdParameter('transactionId', bid); + return reqObj; +} + +function getSizes(bid) { + return utils.parseSizesInput(concatSizes(bid)); +} + +function concatSizes(bid) { + var playerSize = utils.deepAccess(bid, 'mediaTypes.video.playerSize'); + var videoSizes = utils.deepAccess(bid, 'mediaTypes.video.sizes'); + var bannerSizes = utils.deepAccess(bid, 'mediaTypes.banner.sizes'); + + if (utils.isArray(bannerSizes) || utils.isArray(playerSize) || utils.isArray(videoSizes)) { + var mediaTypesSizes = [bannerSizes, videoSizes, playerSize]; + return mediaTypesSizes.reduce(function (acc, currSize) { + if (utils.isArray(currSize)) { + if (utils.isArray(currSize[0])) { + currSize.forEach(function (childSize) { + acc.push(childSize); + }); + } else { + acc.push(currSize); + } + } + + return acc; + }, []); + } else { + return bid.sizes; + } +} + +function _validateId(id) { + return parseInt(id) > 0; +} + +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[734]); \ No newline at end of file diff --git a/build/dist/telariaBidAdapter.js b/build/dist/telariaBidAdapter.js new file mode 100644 index 00000000000..b59085da27f --- /dev/null +++ b/build/dist/telariaBidAdapter.js @@ -0,0 +1,334 @@ +pbjsChunk([88],{ + +/***/ 736: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(737); + + +/***/ }), + +/***/ 737: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimeoutUrl", function() { return getTimeoutUrl; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__src_constants_json__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var BIDDER_CODE = 'telaria'; +var DOMAIN = 'tremorhub.com'; +var TAG_ENDPOINT = "ads.".concat(DOMAIN, "/ad/tag"); +var EVENTS_ENDPOINT = "events.".concat(DOMAIN, "/diag"); +var spec = { + code: BIDDER_CODE, + aliases: ['tremor', 'tremorvideo'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + + /** + * Determines if the request is valid + * @param bid + * @returns {*|string} + */ + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.adCode && bid.params.supplyCode); + }, + + /** + * Make a server request from the list of BidRequests. + * @param validBidRequests list of valid bid requests that have passed isBidRequestValid check + * @param bidderRequest + * @returns {Array} of url objects + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var requests = []; + validBidRequests.forEach(function (bid) { + var url = generateUrl(bid, bidderRequest); + + if (url) { + requests.push({ + method: 'GET', + url: url, + bidId: bid.bidId, + vastUrl: url.split('&fmt=json')[0] + }); + } + }); + return requests; + }, + + /** + * convert the server response into a list of BidObjects that prebid accepts + * http://prebid.org/dev-docs/bidder-adaptor.html#interpreting-the-response + * @param serverResponse + * @param bidderRequest + * @returns {Array} + */ + interpretResponse: function interpretResponse(serverResponse, bidderRequest) { + var bidResult; + var width, height; + var bids = []; + + try { + bidResult = serverResponse.body; + bidderRequest.url.split('&').forEach(function (param) { + var lower = param.toLowerCase(); + + if (lower.indexOf('player') > -1) { + if (lower.indexOf('width') > -1) { + width = param.split('=')[1]; + } else if (lower.indexOf('height') > -1) { + height = param.split('=')[1]; + } + } + }); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + width = 0; + height = 0; + } + + if (!bidResult || bidResult.error) { + var errorMessage = "in response for ".concat(bidderRequest.bidderCode, " adapter"); + + if (bidResult && bidResult.error) { + errorMessage += ": ".concat(bidResult.error); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + } else if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bidResult.seatbid)) { + bidResult.seatbid[0].bid.forEach(function (tag) { + bids.push(createBid(__WEBPACK_IMPORTED_MODULE_4__src_constants_json__["STATUS"].GOOD, bidderRequest, tag, width, height, BIDDER_CODE)); + }); + } + + return bids; + }, + + /** + * We support pixel syncing only at the moment. Telaria ad server returns 'ext' + * as an optional parameter if the tag has 'incIdSync' parameter set to true + * @param syncOptions + * @param serverResponses + * @returns {Array} + */ + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + if (syncOptions.pixelEnabled && serverResponses.length) { + (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverResponses, '0.body.ext.telaria.userSync') || []).forEach(function (url) { + return syncs.push({ + type: 'image', + url: url + }); + }); + } + + return syncs; + }, + + /** + * See http://prebid.org/dev-docs/bidder-adaptor.html#registering-on-timeout for detailed semantic. + * @param timeoutData bidRequest + */ + onTimeout: function onTimeout(timeoutData) { + var url = getTimeoutUrl(timeoutData); + + if (url) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](url); + } + } +}; + +function getDefaultSrcPageUrl() { + return encodeURIComponent(document.location.href); +} + +function getEncodedValIfNotEmpty(val) { + return !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](val) ? encodeURIComponent(val) : ''; +} +/** + * Converts the schain object to a url param value. Please refer to + * https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md + * (schain for non ORTB section) for more information + * @param schainObject + * @returns {string} + */ + + +function getSupplyChainAsUrlParam(schainObject) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](schainObject)) { + return ''; + } + + var scStr = "&schain=".concat(schainObject.ver, ",").concat(schainObject.complete); + schainObject.nodes.forEach(function (node) { + scStr += '!'; + scStr += "".concat(getEncodedValIfNotEmpty(node.asi), ","); + scStr += "".concat(getEncodedValIfNotEmpty(node.sid), ","); + scStr += "".concat(getEncodedValIfNotEmpty(node.hp), ","); + scStr += "".concat(getEncodedValIfNotEmpty(node.rid), ","); + scStr += "".concat(getEncodedValIfNotEmpty(node.name), ","); + scStr += "".concat(getEncodedValIfNotEmpty(node.domain)); + }); + return scStr; +} + +function getUrlParams(params, schainFromBidRequest) { + var urlSuffix = ''; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](params)) { + for (var key in params) { + if (key !== 'schain' && params.hasOwnProperty(key) && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](params[key])) { + urlSuffix += "&".concat(key, "=").concat(params[key]); + } + } + + urlSuffix += getSupplyChainAsUrlParam(!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](schainFromBidRequest) ? schainFromBidRequest : params['schain']); + } + + return urlSuffix; +} + +var getTimeoutUrl = function getTimeoutUrl(timeoutData) { + var params = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](timeoutData, '0.params.0'); + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](params)) { + var url = "https://".concat(EVENTS_ENDPOINT); + params = _extends({ + srcPageUrl: getDefaultSrcPageUrl() + }, params); + url += "".concat(getUrlParams(params)); + url += '&hb=1&evt=TO'; + return url; + } +}; +/** + * Generates the url based on the parameters given. Sizes, supplyCode & adCode are required. + * The format is: [L,W] or [[L1,W1],...] + * @param bid + * @param bidderRequest + * @returns {string} + */ + +function generateUrl(bid, bidderRequest) { + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize'); + + if (!playerSize) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("Although player size isn't required it is highly recommended"); + } + + var width, height; + + if (playerSize) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](playerSize) && playerSize.length === 2 && !isNaN(playerSize[0]) && !isNaN(playerSize[1])) { + width = playerSize[0]; + height = playerSize[1]; + } else if (_typeof(playerSize) === 'object') { + width = playerSize[0][0]; + height = playerSize[0][1]; + } + } + + var supplyCode = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.supplyCode'); + var adCode = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.adCode'); + + if (supplyCode && adCode) { + var url = "https://".concat(supplyCode, ".").concat(TAG_ENDPOINT, "?adCode=").concat(adCode); + + if (width) { + url += "&playerWidth=".concat(width); + } + + if (height) { + url += "&playerHeight=".concat(height); + } + + var params = _extends({ + srcPageUrl: getDefaultSrcPageUrl() + }, bid.params); + + delete params.adCode; + url += "".concat(getUrlParams(params, bid.schain)); + url += "&transactionId=".concat(bid.transactionId); + + if (bidderRequest) { + if (bidderRequest.gdprConsent) { + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + url += "&gdpr=".concat(bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } + + if (bidderRequest.gdprConsent.consentString) { + url += "&gdpr_consent=".concat(bidderRequest.gdprConsent.consentString); + } + } + + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + url += "&referrer=".concat(encodeURIComponent(bidderRequest.refererInfo.referer)); + } + } + + return url + '&hb=1&fmt=json'; + } +} +/** + * Create and return a bid object based on status and tag + * @param status + * @param reqBid + * @param response + * @param width + * @param height + * @param bidderCode + */ + + +function createBid(status, reqBid, response, width, height, bidderCode) { + var bid = Object(__WEBPACK_IMPORTED_MODULE_1__src_bidfactory_js__["a" /* createBid */])(status, reqBid); // TTL 5 mins by default, future support for extended imp wait time + + if (response) { + _extends(bid, { + requestId: reqBid.bidId, + cpm: response.price, + creativeId: response.crid || '-1', + vastXml: response.adm, + vastUrl: reqBid.vastUrl, + mediaType: 'video', + width: width, + height: height, + bidderCode: bidderCode, + adId: response.id, + currency: 'USD', + netRevenue: true, + ttl: 300, + ad: response.adm + }); + } + + bid.meta = bid.meta || {}; + + if (response && response.adomain && response.adomain.length > 0) { + bid.meta.advertiserDomains = response.adomain; + } + + return bid; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[736]); \ No newline at end of file diff --git a/build/dist/terceptAnalyticsAdapter.js b/build/dist/terceptAnalyticsAdapter.js new file mode 100644 index 00000000000..360b1a66ea4 --- /dev/null +++ b/build/dist/terceptAnalyticsAdapter.js @@ -0,0 +1,446 @@ +pbjsChunk([6],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 738: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(739); + + +/***/ }), + +/***/ 739: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var emptyUrl = ''; +var analyticsType = 'endpoint'; +var terceptAnalyticsVersion = 'v1.0.0'; +var defaultHostName = 'us-central1-quikr-ebay.cloudfunctions.net'; +var defaultPathName = '/prebid-analytics'; +var initOptions; +var auctionTimestamp; +var events = { + bids: [] +}; + +var terceptAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + emptyUrl: emptyUrl, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (typeof args !== 'undefined') { + if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_TIMEOUT) { + args.forEach(function (item) { + mapBidResponse(item, 'timeout'); + }); + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_INIT) { + events.auctionInit = args; + auctionTimestamp = args.timestamp; + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_REQUESTED) { + mapBidRequests(args).forEach(function (item) { + events.bids.push(item); + }); + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_RESPONSE) { + mapBidResponse(args, 'response'); + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_WON) { + send({ + bidWon: mapBidResponse(args, 'win') + }, 'won'); + } + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_END) { + send(events, 'auctionEnd'); + } + } +}); + +function mapBidRequests(params) { + var arr = []; + + if (typeof params.bids !== 'undefined' && params.bids.length) { + params.bids.forEach(function (bid) { + arr.push({ + bidderCode: bid.bidder, + bidId: bid.bidId, + adUnitCode: bid.adUnitCode, + requestId: bid.bidderRequestId, + auctionId: bid.auctionId, + transactionId: bid.transactionId, + sizes: __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["parseSizesInput"](bid.mediaTypes.banner.sizes).toString(), + renderStatus: 1, + requestTimestamp: params.auctionStart + }); + }); + } + + return arr; +} + +function mapBidResponse(bidResponse, status) { + if (status !== 'win') { + var bid = events.bids.filter(function (o) { + return o.bidId === bidResponse.bidId || o.bidId === bidResponse.requestId; + })[0]; + + _extends(bid, { + bidderCode: bidResponse.bidder, + bidId: status === 'timeout' ? bidResponse.bidId : bidResponse.requestId, + adUnitCode: bidResponse.adUnitCode, + auctionId: bidResponse.auctionId, + creativeId: bidResponse.creativeId, + transactionId: bidResponse.transactionId, + currency: bidResponse.currency, + cpm: bidResponse.cpm, + netRevenue: bidResponse.netRevenue, + mediaType: bidResponse.mediaType, + statusMessage: bidResponse.statusMessage, + status: bidResponse.status, + renderStatus: status === 'timeout' ? 3 : 2, + timeToRespond: bidResponse.timeToRespond, + requestTimestamp: bidResponse.requestTimestamp, + responseTimestamp: bidResponse.responseTimestamp + }); + } else { + return { + bidderCode: bidResponse.bidder, + bidId: bidResponse.requestId, + adUnitCode: bidResponse.adUnitCode, + auctionId: bidResponse.auctionId, + creativeId: bidResponse.creativeId, + transactionId: bidResponse.transactionId, + currency: bidResponse.currency, + cpm: bidResponse.cpm, + netRevenue: bidResponse.netRevenue, + renderedSize: bidResponse.size, + mediaType: bidResponse.mediaType, + statusMessage: bidResponse.statusMessage, + status: bidResponse.status, + renderStatus: 4, + timeToRespond: bidResponse.timeToRespond, + requestTimestamp: bidResponse.requestTimestamp, + responseTimestamp: bidResponse.responseTimestamp + }; + } +} + +function send(data, status) { + var location = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["getWindowLocation"](); + + if (typeof data !== 'undefined' && typeof data.auctionInit !== 'undefined') { + _extends(data.auctionInit, { + host: location.host, + path: location.pathname, + search: location.search + }); + } + + data.initOptions = initOptions; + var terceptAnalyticsRequestUrl = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["buildUrl"]({ + protocol: 'https', + hostname: initOptions && initOptions.hostName || defaultHostName, + pathname: initOptions && initOptions.pathName || defaultPathName, + search: { + auctionTimestamp: auctionTimestamp, + terceptAnalyticsVersion: terceptAnalyticsVersion, + prebidVersion: pbjs.version + } + }); + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(terceptAnalyticsRequestUrl, undefined, JSON.stringify(data), { + method: 'POST', + contentType: 'text/plain' + }); +} + +terceptAnalyticsAdapter.originEnableAnalytics = terceptAnalyticsAdapter.enableAnalytics; + +terceptAnalyticsAdapter.enableAnalytics = function (config) { + initOptions = config.options; + terceptAnalyticsAdapter.originEnableAnalytics(config); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: terceptAnalyticsAdapter, + code: 'tercept' +}); +/* harmony default export */ __webpack_exports__["default"] = (terceptAnalyticsAdapter); + +/***/ }) + +},[738]); \ No newline at end of file diff --git a/build/dist/theAdxBidAdapter.js b/build/dist/theAdxBidAdapter.js new file mode 100644 index 00000000000..58b37aa44f6 --- /dev/null +++ b/build/dist/theAdxBidAdapter.js @@ -0,0 +1,514 @@ +pbjsChunk([87],{ + +/***/ 740: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(741); + + +/***/ }), + +/***/ 741: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + +var BIDDER_CODE = 'theadx'; +var ENDPOINT_URL = 'https://ssp.theadx.com/request'; +var NATIVEASSETNAMES = { + 0: 'title', + 1: 'cta', + 2: 'icon', + 3: 'image', + 4: 'body', + 5: 'sponsoredBy', + 6: 'body2', + 7: 'phone', + 8: 'privacyLink', + 9: 'displayurl', + 10: 'rating', + 11: 'address', + 12: 'downloads', + 13: 'likes', + 14: 'price', + 15: 'saleprice' +}; +var NATIVEPROBS = { + title: { + id: 0, + name: 'title' + }, + body: { + id: 4, + name: 'data', + type: 2 + }, + body2: { + id: 6, + name: 'data', + type: 10 + }, + privacyLink: { + id: 8, + name: 'data', + type: 501 + }, + sponsoredBy: { + id: 5, + name: 'data', + type: 1 + }, + image: { + id: 3, + type: 3, + name: 'img' + }, + icon: { + id: 2, + type: 1, + name: 'img' + }, + displayurl: { + id: 9, + name: 'data', + type: 11 + }, + cta: { + id: 1, + type: 12, + name: 'data' + }, + rating: { + id: 7, + name: 'data', + type: 3 + }, + address: { + id: 11, + name: 'data', + type: 5 + }, + downloads: { + id: 12, + name: 'data', + type: 5 + }, + likes: { + id: 13, + name: 'data', + type: 4 + }, + phone: { + id: 7, + name: 'data', + type: 8 + }, + price: { + id: 14, + name: 'data', + type: 6 + }, + saleprice: { + id: 15, + name: 'data', + type: 7 + } +}; +var spec = { + code: BIDDER_CODE, + aliases: ['theadx'], + // short code + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('theadx.isBidRequestValid', bid); + var res = false; + + if (bid && bid.params) { + res = !!(bid.params.pid && bid.params.tagId); + } + + return res; + }, + + /** + * 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('theadx.buildRequests', 'validBidRequests', validBidRequests, 'bidderRequest', bidderRequest); + var results = []; + var requestType = 'POST'; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](validBidRequests)) { + results = validBidRequests.map(function (bidRequest) { + return { + method: requestType, + type: requestType, + url: "".concat(ENDPOINT_URL, "?tagid=").concat(bidRequest.params.tagId), + options: { + withCredentials: true + }, + bidder: 'theadx', + referrer: encodeURIComponent(bidderRequest.refererInfo.referer), + data: generatePayload(bidRequest, bidderRequest), + mediaTypes: bidRequest['mediaTypes'], + requestId: bidderRequest.bidderRequestId, + bidId: bidRequest.bidId, + adUnitCode: bidRequest['adUnitCode'], + auctionId: bidRequest['auctionId'] + }; + }); + } + + return results; + }, + + /** + * 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, request) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('theadx.interpretResponse', 'serverResponse', serverResponse, ' request', request); + var responses = []; + + if (serverResponse.body) { + var responseBody = serverResponse.body; + var seatBids = responseBody.seatbid; + + if (!(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](seatBids) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](seatBids[0].bid))) { + var seatBid = seatBids[0]; + var bid = seatBid.bid[0]; // handle any values that may end up undefined + + var nullify = function nullify(value) { + return typeof value === 'undefined' ? null : parseInt(value); + }; + + var ttl = null; + + if (bid.ext) { + ttl = nullify(bid.ext.ttl) ? nullify(bid.ext.ttl) : 2000; + } + + var bidWidth = nullify(bid.w); + var bidHeight = nullify(bid.h); + var creative = null; + var videoXml = null; + var mediaType = null; + var native = null; + + if (request.mediaTypes && request.mediaTypes.video) { + videoXml = bid.ext.vast_url; + mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]; + } else if (request.mediaTypes && request.mediaTypes.banner) { + mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]; + creative = bid.adm; + } else if (request.mediaTypes && request.mediaTypes.native) { + mediaType = __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]; + var _bid$ext$native = bid.ext.native, + assets = _bid$ext$native.assets, + link = _bid$ext$native.link, + imptrackers = _bid$ext$native.imptrackers, + jstracker = _bid$ext$native.jstracker; + native = { + clickUrl: link.url, + clickTrackers: link.clicktrackers || bid.ext.cliu ? [] : undefined, + impressionTrackers: imptrackers || bid.nurl ? [] : undefined, + javascriptTrackers: jstracker ? [jstracker] : undefined + }; + + if (bid.nurl) { + native.impressionTrackers.unshift(bid.ext.impu); + native.impressionTrackers.unshift(bid.nurl); + + if (native.clickTrackers) { + native.clickTrackers.unshift(bid.ext.cliu); + } + } + + assets.forEach(function (asset) { + var kind = NATIVEASSETNAMES[asset.id]; + var content = kind && asset[NATIVEPROBS[kind].name]; + + if (content) { + native[kind] = content.text || content.value || { + url: content.url, + width: content.w, + height: content.h + }; + } + }); + } + + var response = { + bidderCode: BIDDER_CODE, + requestId: request.bidId, + cpm: bid.price, + width: bidWidth | 0, + height: bidHeight | 0, + ad: creative, + ttl: ttl || 3000, + creativeId: bid.crid, + netRevenue: true, + currency: responseBody.cur, + mediaType: mediaType, + native: native + }; + + if (mediaType == __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */] && videoXml) { + response.vastUrl = videoXml; + response.videoCacheKey = bid.ext.rid; + } + + responses.push(response); + } + } + + return responses; + }, + + /** + * 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) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('theadx.getUserSyncs', 'syncOptions', syncOptions, 'serverResponses', serverResponses); + var syncs = []; + + if (!syncOptions.iframeEnabled && !syncOptions.pixelEnabled) { + return syncs; + } + + serverResponses.forEach(function (resp) { + var syncIframeUrls = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](resp, 'body.ext.sync.iframe'); + var syncImageUrls = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](resp, 'body.ext.sync.image'); + + if (syncOptions.iframeEnabled && syncIframeUrls) { + syncIframeUrls.forEach(function (syncIframeUrl) { + syncs.push({ + type: 'iframe', + url: syncIframeUrl + }); + }); + } + + if (syncOptions.pixelEnabled && syncImageUrls) { + syncImageUrls.forEach(function (syncImageUrl) { + syncs.push({ + type: 'image', + url: syncImageUrl + }); + }); + } + }); + return syncs; + } +}; + +var buildSiteComponent = function buildSiteComponent(bidRequest, bidderRequest) { + var loc = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"](bidderRequest.refererInfo.referer, { + decodeSearchAsString: true + }); + var site = { + domain: loc.hostname, + page: loc.href, + id: bidRequest.params.wid, + publisher: { + id: bidRequest.params.pid + } + }; + + if (loc.search) { + site.search = loc.search; + } + + if (document) { + var keywords = document.getElementsByTagName('meta')['keywords']; + + if (keywords && keywords.content) { + site.keywords = keywords.content; + } + } + + return site; +}; + +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); +} + +var buildDeviceComponent = function buildDeviceComponent(bidRequest, bidderRequest) { + var device = { + js: 1, + language: 'language' in navigator ? navigator.language : null, + ua: 'userAgent' in navigator ? navigator.userAgent : null, + devicetype: isMobile() ? 1 : isConnectedTV() ? 3 : 2, + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0 + }; // Include connection info if available + + var CONNECTION = navigator.connection || navigator.webkitConnection; + + if (CONNECTION && CONNECTION.type) { + device['connectiontype'] = CONNECTION.type; + + if (CONNECTION.downlinkMax) { + device['connectionDownlinkMax'] = CONNECTION.downlinkMax; + } + } + + return device; +}; + +var determineOptimalRequestId = function determineOptimalRequestId(bidRequest, bidderRequest) { + return bidRequest.bidId; +}; + +var extractValidSize = function extractValidSize(bidRequest, bidderRequest) { + var width = null; + var height = null; + var requestedSizes = []; + var mediaTypes = bidRequest.mediaTypes; + + if (mediaTypes && (mediaTypes.banner && mediaTypes.banner.sizes || mediaTypes.video && mediaTypes.video.sizes)) { + if (mediaTypes.banner) { + requestedSizes = mediaTypes.banner.sizes; + } else { + requestedSizes = mediaTypes.video.sizes; + } + } else if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bidRequest.sizes)) { + requestedSizes = bidRequest.sizes; + } // Ensure the size array is normalized + + + var conformingSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](requestedSizes); + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["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, bidderRequest) { + var impSize = extractValidSize(bidRequest); + return { + w: impSize.w, + h: impSize.h + }; +}; + +var generateBannerComponent = function generateBannerComponent(bidRequest, bidderRequest) { + var impSize = extractValidSize(bidRequest); + return { + w: impSize.w, + h: impSize.h + }; +}; + +var generateNativeComponent = function generateNativeComponent(bidRequest, bidderRequest) { + var assets = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_map"](bidRequest.mediaTypes.native, function (bidParams, key) { + var props = NATIVEPROBS[key]; + var asset = { + required: bidParams.required & 1 + }; + + if (props) { + asset.id = props.id; + asset[props.name] = { + len: bidParams.len, + wmin: bidParams.sizes && bidParams.sizes[0], + hmin: bidParams.sizes && bidParams.sizes[1], + type: props.type + }; + return asset; + } + }).filter(Boolean); + + return { + request: { + assets: assets + } + }; +}; + +var generateImpBody = function generateImpBody(bidRequest, bidderRequest) { + var mediaTypes = bidRequest.mediaTypes; + var banner = null; + var video = null; + var native = null; + + if (mediaTypes && mediaTypes.video) { + video = generateVideoComponent(bidRequest, bidderRequest); + } else if (mediaTypes && mediaTypes.banner) { + banner = generateBannerComponent(bidRequest, bidderRequest); + } else if (mediaTypes && mediaTypes.native) { + native = generateNativeComponent(bidRequest, bidderRequest); + } + + var result = { + id: bidRequest.index, + tagid: bidRequest.params.tagId + '' + }; + + if (banner) { + result['banner'] = banner; + } + + if (video) { + result['video'] = video; + } + + if (native) { + result['native'] = native; + } + + return result; +}; + +var generatePayload = function generatePayload(bidRequest, bidderRequest) { + // Generate the expected OpenRTB payload + var payload = { + id: determineOptimalRequestId(bidRequest, bidderRequest), + site: buildSiteComponent(bidRequest, bidderRequest), + device: buildDeviceComponent(bidRequest, bidderRequest), + imp: [generateImpBody(bidRequest, bidderRequest)] + }; // return payload; + + return JSON.stringify(payload); +}; + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[740]); \ No newline at end of file diff --git a/build/dist/timBidAdapter.js b/build/dist/timBidAdapter.js new file mode 100644 index 00000000000..fcf9c15c2bf --- /dev/null +++ b/build/dist/timBidAdapter.js @@ -0,0 +1,206 @@ +pbjsChunk([86],{ + +/***/ 742: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(743); + + +/***/ }), + +/***/ 743: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_bidfactory_js__ = __webpack_require__(32); + + + + +var CONSTANTS = __webpack_require__(5); + +var BIDDER_CODE = 'tim'; + +function parseBidRequest(bidRequest) { + var params = bidRequest.url.split('?')[1]; + var obj = {}; + var pairs = params.split('&'); + + try { + for (var i in pairs) { + var split = pairs[i].split('='); + obj[decodeURIComponent(split[0])] = decodeURIComponent(split[1]); + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e); + } + + return JSON.parse(obj.br); +} + +function formatAdMarkup(bid) { + var adm = bid.adm; + + if ('nurl' in bid) { + adm += createTrackPixelHtml(bid.nurl); + } + + return "".concat(adm, ""); +} + +function createTrackPixelHtml(url) { + if (!url) { + return ''; + } + + var img = '
'; + img += '
'; + return img; +} + +var spec = { + code: BIDDER_CODE, + aliases: ['timmedia'], + isBidRequestValid: function isBidRequestValid(bid) { + if (bid.params && bid.params.publisherid && bid.params.placementCode) { + return true; + } + + if (!bid.params) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('bid not valid: params were not provided'); + } else if (!bid.params.publisherid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('bid not valid: publisherid was not provided'); + } else if (!bid.params.placementCode) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('bid not valid: placementCode was not provided'); + } + + return false; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var requests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + requests.push(this.createRTBRequestURL(validBidRequests[i])); + } + + return requests; + }, + createRTBRequestURL: function createRTBRequestURL(bidReq) { + // build bid request object + var domain = window.location.host; + var page = window.location.href; + var publisherid = bidReq.params.publisherid; + var bidFloor = bidReq.params.bidfloor; + var placementCode = bidReq.params.placementCode; + var adW = bidReq.mediaTypes.banner.sizes[0][0]; + var adH = bidReq.mediaTypes.banner.sizes[0][1]; // build bid request with impressions + + var bidRequest = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: [{ + id: bidReq.bidId, + banner: { + w: adW, + h: adH + }, + tagid: placementCode, + bidfloor: bidFloor + }], + site: { + domain: domain, + page: page, + publisher: { + id: publisherid + } + }, + device: { + 'language': this.getLanguage(), + 'w': adW, + 'h': adH, + 'js': 1, + 'ua': navigator.userAgent + } + }; + + if (!bidFloor) { + delete bidRequest.imp['bidfloor']; + } + + bidRequest.bidId = bidReq.bidId; + var url = 'https://hb.timmedia-hb.com/api/v2/services/prebid/' + publisherid + '/' + placementCode + '?' + 'br=' + encodeURIComponent(JSON.stringify(bidRequest)); + return { + method: 'GET', + url: url, + data: '', + options: { + withCredentials: false + } + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + bidRequest = parseBidRequest(bidRequest); + var bidResp = serverResponse.body; + var bidResponses = []; + + if (!bidResp || !bidResp.id || !bidResp.seatbid || bidResp.seatbid.length === 0 || !bidResp.seatbid[0].bid || bidResp.seatbid[0].bid.length === 0) { + return []; + } + + bidResp.seatbid[0].bid.forEach(function (bidderBid) { + var responseCPM; + var placementCode = ''; + + if (bidRequest) { + var bidResponse = __WEBPACK_IMPORTED_MODULE_2__src_bidfactory_js__["a" /* createBid */](1); + placementCode = bidRequest.placementCode; + bidRequest.status = CONSTANTS.STATUS.GOOD; + responseCPM = parseFloat(bidderBid.price); + + if (responseCPM === 0) { + var bid = __WEBPACK_IMPORTED_MODULE_2__src_bidfactory_js__["a" /* createBid */](2); + bid.bidderCode = BIDDER_CODE; + bidResponses.push(bid); + return bidResponses; + } + + bidResponse.placementCode = placementCode; + bidResponse.size = bidRequest.sizes; + bidResponse.creativeId = bidderBid.id; + bidResponse.bidderCode = BIDDER_CODE; + bidResponse.cpm = responseCPM; + bidResponse.ad = formatAdMarkup(bidderBid); + bidResponse.width = parseInt(bidderBid.w); + bidResponse.height = parseInt(bidderBid.h); + bidResponse.currency = bidResp.cur; + bidResponse.netRevenue = true; + bidResponse.requestId = bidRequest.bidId; + bidResponse.ttl = 180; + bidResponses.push(bidResponse); + } + }); + return bidResponses; + }, + getLanguage: function getLanguage() { + var language = navigator.language ? 'language' : 'userLanguage'; + return navigator[language].split('-')[0]; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + return syncs; + }, + onTimeout: function onTimeout(data) {// Bidder specifc code + }, + onBidWon: function onBidWon(bid) {// Bidder specific code + }, + onSetTargeting: function onSetTargeting(bid) {// Bidder specific code + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[742]); \ No newline at end of file diff --git a/build/dist/topRTBBidAdapter.js b/build/dist/topRTBBidAdapter.js new file mode 100644 index 00000000000..cec709f7d82 --- /dev/null +++ b/build/dist/topRTBBidAdapter.js @@ -0,0 +1,90 @@ +pbjsChunk([85],{ + +/***/ 744: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(745); + + +/***/ }), + +/***/ 745: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var BIDDER_CODE = 'topRTB'; +var ENDPOINT_URL = 'https://ssp.toprtb.com/ssp/rest/ReqAd?ref=www.google.com&hbid=0&adUnitId='; +var adName = ''; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner')) { + adName = 'banner'; + return bid.params && !!bid.params.adUnitId; + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video')) { + adName = 'video'; + return bid.params && !!bid.params.adUnitId; + } + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var adunitid = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + adunitid.push(bid.params.adUnitId + '_' + bid.bidId); + }); + + return { + method: 'GET', + url: ENDPOINT_URL + adunitid.toString() + }; + }, + interpretResponse: function interpretResponse(serverResponses, request) { + var bidResponses = []; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](serverResponses.body, function (response) { + if (response.cpm > 0) { + var bidResponse = { + requestId: response.bidId, + cpm: response.cpm, + width: response.width, + height: response.height, + ad: response.mediadata, + ttl: response.ttl, + creativeId: response.id, + netRevenue: true, + currency: response.currency, + tracking: response.tracking, + impression: response.impression + }; + + if (adName == 'video') { + bidResponse.vastXml = response.mediadata; + bidResponse.mediaType = 'video'; + } else { + bidResponse.ad = response.mediadata; + bidResponse.mediaType = 'banner'; + } + + bidResponses.push(bidResponse); + } + }); + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[744]); \ No newline at end of file diff --git a/build/dist/tpmnBidAdapter.js b/build/dist/tpmnBidAdapter.js new file mode 100644 index 00000000000..d5aee38322d --- /dev/null +++ b/build/dist/tpmnBidAdapter.js @@ -0,0 +1,156 @@ +pbjsChunk([84],{ + +/***/ 746: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(747); + + +/***/ }), + +/***/ 747: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ADAPTER_VERSION", function() { return ADAPTER_VERSION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +/* eslint-disable no-tabs */ + + + +var ADAPTER_VERSION = '1'; +var SUPPORTED_AD_TYPES = [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]]; +var BIDDER_CODE = 'tpmn'; +var URL = 'https://ad.tpmn.co.kr/prebidhb.tpmn'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: SUPPORTED_AD_TYPES, + + /** + *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 'params' in bid && 'inventoryId' in bid.params && 'publisherId' in bid.params && !isNaN(Number(bid.params.inventoryId)) && bid.params.inventoryId > 0 && typeof bid.mediaTypes.banner.sizes != 'undefined'; // only accepting appropriate sizes + }, + + /** + * @param {BidRequest[]} bidRequests + * @param {*} bidderRequest + * @return {ServerRequest} + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + if (bidRequests.length === 0) { + return []; + } + + var bids = bidRequests.map(bidToRequest); + var bidderApiUrl = URL; + var payload = { + 'bids': _toConsumableArray(bids), + 'site': createSite(bidderRequest.refererInfo) + }; + return [{ + method: 'POST', + url: bidderApiUrl, + data: payload + }]; + }, + + /** + * 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, serverRequest) { + if (!Array.isArray(serverResponse.body)) { + return []; + } // server response body is an array of bid results + + + var bidResults = serverResponse.body; // our server directly returns the format needed by prebid.js so no more + // transformation is needed here. + + return bidResults; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/** + * Creates site description object + */ + +function createSite(refInfo) { + var url = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["parseUrl"](refInfo.referer); + var site = { + 'domain': url.hostname, + 'page': url.protocol + '://' + url.hostname + url.pathname + }; + + if (self === top && document.referrer) { + site.ref = document.referrer; + } + + var keywords = document.getElementsByTagName('meta')['keywords']; + + if (keywords && keywords.content) { + site.keywords = keywords.content; + } + + return site; +} + +function parseSize(size) { + var sizeObj = {}; + sizeObj.width = parseInt(size[0], 10); + sizeObj.height = parseInt(size[1], 10); + return sizeObj; +} + +function parseSizes(sizes) { + if (Array.isArray(sizes[0])) { + // is there several sizes ? (ie. [[728,90],[200,300]]) + return sizes.map(function (size) { + return parseSize(size); + }); + } + + return [parseSize(sizes)]; // or a single one ? (ie. [728,90]) +} + +function getBannerSizes(bidRequest) { + return parseSizes(__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes); +} + +function bidToRequest(bid) { + var bidObj = {}; + bidObj.sizes = getBannerSizes(bid); + bidObj.inventoryId = bid.params.inventoryId; + bidObj.publisherId = bid.params.publisherId; + bidObj.bidId = bid.bidId; + bidObj.adUnitCode = bid.adUnitCode; + bidObj.auctionId = bid.auctionId; + return bidObj; +} + +/***/ }) + +},[746]); \ No newline at end of file diff --git a/build/dist/trendqubeBidAdapter.js b/build/dist/trendqubeBidAdapter.js new file mode 100644 index 00000000000..8e2d1599b2d --- /dev/null +++ b/build/dist/trendqubeBidAdapter.js @@ -0,0 +1,137 @@ +pbjsChunk([83],{ + +/***/ 748: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(749); + + +/***/ }), + +/***/ 749: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); + + + +var BIDDER_CODE = 'trendqube'; +var AD_URL = 'https://ads.trendqube.com/?c=o&m=multi'; + +function isBidResponseValid(bid) { + if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { + return false; + } + + switch (bid.mediaType) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + return Boolean(bid.width && bid.height && bid.ad); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + return Boolean(bid.vastUrl); + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + return Boolean(bid.native && bid.native.title && bid.native.image && bid.native.impressionTrackers); + + default: + return false; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + isBidRequestValid: function isBidRequestValid(bid) { + return Boolean(bid.bidId && bid.params && !isNaN(parseInt(bid.params.placementId))); + }, + buildRequests: function buildRequests() { + var validBidRequests = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var bidderRequest = arguments.length > 1 ? arguments[1] : undefined; + var winTop = window; + var location; + + try { + location = new URL(bidderRequest.refererInfo.referer); + winTop = window.top; + } catch (e) { + location = winTop.location; + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"](e); + } + + ; + var placements = []; + var request = { + 'deviceWidth': winTop.screen.width, + 'deviceHeight': winTop.screen.height, + 'language': navigator && navigator.language ? navigator.language.split('-')[0] : '', + 'secure': 1, + 'host': location.host, + 'page': location.pathname, + 'placements': placements + }; + + if (bidderRequest) { + if (bidderRequest.uspConsent) { + request.ccpa = bidderRequest.uspConsent; + } + + if (bidderRequest.gdprConsent) { + request.gdpr = bidderRequest.gdprConsent; + } + } + + var len = validBidRequests.length; + + for (var i = 0; i < len; i++) { + var bid = validBidRequests[i]; + var sizes = void 0; + + if (bid.mediaTypes) { + if (bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]] && bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]].sizes) { + sizes = bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]].sizes; + } else if (bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]] && bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]].playerSize) { + sizes = bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]].playerSize; + } + } + + placements.push({ + placementId: bid.params.placementId, + bidId: bid.bidId, + sizes: sizes || [], + wPlayer: sizes ? sizes[0] : 0, + hPlayer: sizes ? sizes[1] : 0, + traffic: bid.params.traffic || __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], + schain: bid.schain || {} + }); + } + + return { + method: 'POST', + url: AD_URL, + data: request + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var response = []; + + for (var i = 0; i < serverResponse.body.length; i++) { + var resItem = serverResponse.body[i]; + + if (isBidResponseValid(resItem)) { + response.push(resItem); + } + } + + return response; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[748]); \ No newline at end of file diff --git a/build/dist/tribeosBidAdapter.js b/build/dist/tribeosBidAdapter.js new file mode 100644 index 00000000000..d666fd50e65 --- /dev/null +++ b/build/dist/tribeosBidAdapter.js @@ -0,0 +1,202 @@ +pbjsChunk([82],{ + +/***/ 750: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(751); + + +/***/ }), + +/***/ 751: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_bidfactory_js__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + + +var CONSTANTS = __webpack_require__(5); + +var BIDDER_CODE = 'tribeos'; +var ENDPOINT_URL = 'https://bidder.tribeos.tech/prebid/'; +var LOG_PREFIX = 'TRIBEOS: '; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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 (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.params.placementId)) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_PREFIX, 'placementId is required, please contact tribeOS for placementId. Bid details: ', JSON.stringify(bid)); + 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) { + var requests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + requests.push(this.buidRTBRequest(validBidRequests[i])); + } + + return requests; + }, + buidRTBRequest: function buidRTBRequest(bidReq) { + // build bid request object + var placementId = bidReq.params.placementId; + var bidFloor = bidReq.params.bidfloor; + var placementCode = bidReq.params.placementCode; + var adWidth = bidReq.mediaTypes.banner.sizes[0][0]; + var adHeight = bidReq.mediaTypes.banner.sizes[0][1]; // build bid request with impressions + + var bidRequest = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: [{ + id: bidReq.bidId, + banner: { + w: adWidth, + h: adHeight + }, + tagid: placementCode, + bidfloor: bidFloor + }], + site: { + domain: window.location.host, + page: window.location.href, + publisher: { + id: placementId + } + }, + device: { + 'language': navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage, + 'w': adWidth, + 'h': adHeight, + 'js': 1, + 'ua': navigator.userAgent + } + }; // apply gdpr + + if (bidReq.gdprConsent) { + bidRequest.regs = { + ext: { + gdpr: bidReq.gdprConsent.gdprApplies ? 1 : 0 + } + }; + bidRequest.user = { + ext: { + consent: bidReq.gdprConsent.consentString + } + }; + } + + bidRequest.bidId = bidReq.bidId; + var url = ENDPOINT_URL + placementId + '/requests'; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bidReq.params.endpointUrl)) { + url = bidReq.params.endpointUrl + placementId + '/requests'; + } + + return { + method: 'POST', + url: url, + data: JSON.stringify(bidRequest), + options: { + withCredentials: true, + contentType: 'application/json' + } + }; + }, + + /** + * 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 responseBody = serverResponse.body; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"](LOG_PREFIX, 'response body: ', JSON.stringify(serverResponse)); + + if (!responseBody || !responseBody.id) { + return []; + } + + var bidResponses = []; + responseBody.seatbid[0].bid.forEach(function (bidderBid) { + var responsePrice; + var placementCode = ''; + + if (bidRequest) { + var bidResponse = __WEBPACK_IMPORTED_MODULE_2__src_bidfactory_js__["a" /* createBid */](1); + placementCode = bidRequest.placementCode; + bidRequest.status = CONSTANTS.STATUS.GOOD; + responsePrice = parseFloat(bidderBid.price); + + if (responsePrice === 0) { + var bid = __WEBPACK_IMPORTED_MODULE_2__src_bidfactory_js__["a" /* createBid */](2); + bid.bidderCode = BIDDER_CODE; + bidResponses.push(bid); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"](LOG_PREFIX, 'response price is zero. Response data: ', JSON.stringify(bidRequest)); + return bidResponses; + } + + bidResponse.placementCode = placementCode; + bidResponse.size = bidRequest.sizes; + bidResponse.creativeId = bidderBid.crid; + bidResponse.bidderCode = BIDDER_CODE; + bidResponse.cpm = responsePrice; + bidResponse.ad = bidderBid.adm; + bidResponse.width = parseInt(bidderBid.w); + bidResponse.height = parseInt(bidderBid.h); + bidResponse.currency = responseBody.cur; + bidResponse.netRevenue = true; + bidResponse.requestId = bidderBid.impid; + bidResponse.ttl = 180; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"](LOG_PREFIX, 'bid response data: ', JSON.stringify(bidResponse)); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"](LOG_PREFIX, 'bid request data: ', JSON.stringify(bidRequest)); + bidResponses.push(bidResponse); + } + }); + return bidResponses; + } + /** + * Register bidder specific code, which will execute if a bid from this + * bidder won the auction + * + * @param {Bid} + * The bid that won the auction + */ + // onBidWon: function(bid) { + // ajax(this.nurls[bid.requestId], null); + // } + +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[750]); \ No newline at end of file diff --git a/build/dist/trionBidAdapter.js b/build/dist/trionBidAdapter.js new file mode 100644 index 00000000000..3d734ffc940 --- /dev/null +++ b/build/dist/trionBidAdapter.js @@ -0,0 +1,243 @@ +pbjsChunk([81],{ + +/***/ 752: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(753); + + +/***/ }), + +/***/ 753: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony export (immutable) */ __webpack_exports__["getStorageData"] = getStorageData; +/* harmony export (immutable) */ __webpack_exports__["setStorageData"] = setStorageData; +/* harmony export (immutable) */ __webpack_exports__["acceptPostMessage"] = acceptPostMessage; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__ = __webpack_require__(9); + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__["b" /* getStorageManager */])(); +var BID_REQUEST_BASE_URL = 'https://in-appadvertising.com/api/bidRequest'; +var USER_SYNC_URL = 'https://in-appadvertising.com/api/userSync.html'; +var BIDDER_CODE = 'trion'; +var BASE_KEY = '_trion_'; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.pubId && bid.params.sectionId); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var bidRequests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + var bid = validBidRequests[i]; + var trionUrlParams = buildTrionUrlParams(bid, bidderRequest); + bidRequests.push({ + method: 'GET', + url: BID_REQUEST_BASE_URL, + bidRequest: bid, + data: trionUrlParams + }); + } + + return bidRequests; + }, + interpretResponse: function interpretResponse(trionResponseObj, request) { + var bid = {}; + var bidResponses = []; + var bidRequest = request.bidRequest; + var responseBody = trionResponseObj ? trionResponseObj.body : {}; + + if (responseBody && responseBody.bidId && bidRequest) { + var result = responseBody.result; + + if (result && result.cpm && result.placeBid && result.ad) { + var cpm = parseInt(result.cpm, 10) / 100; + bid.requestId = bidRequest.bidId; + bid.cpm = cpm; + bid.ad = result.ad; + bid.width = result.width; + bid.height = result.height; + bid.ttl = result.ttl; + bid.creativeId = result.creativeId; + bid.currency = result.currency; + bid.netRevenue = result.netRevenue; + bidResponses.push(bid); + } + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, usPrivacy) { + if (syncOptions.iframeEnabled) { + handlePostMessage(); + return [{ + type: 'iframe', + url: getSyncUrl(gdprConsent, usPrivacy) + }]; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function getSyncUrl(gdprConsent, usPrivacy) { + var unParsedPubAndSection = getStorageData(BASE_KEY + 'lps') || ':'; + var pubSectionArray = unParsedPubAndSection.split(':') || []; + var pubId = pubSectionArray[0] || -1; + var sectionId = pubSectionArray[1] || -1; + var url = getPublisherUrl(); + var consentParams = ''; + + if (gdprConsent) { + if (gdprConsent.consentString) { + consentParams += '&gc=' + encodeURIComponent(gdprConsent.consentString); + } + + consentParams += '&g=' + (gdprConsent.gdprApplies ? 1 : 0); + } + + if (usPrivacy) { + consentParams = '&up=' + encodeURIComponent(usPrivacy); + } + + return USER_SYNC_URL + "?p=".concat(pubId, "&s=").concat(sectionId).concat(consentParams, "&u=").concat(url); +} + +function getPublisherUrl() { + var url = ''; + + try { + if (window.top == window) { + url = window.location.href; + } else { + try { + url = window.top.location.href; + } catch (e) { + url = document.referrer; + } + } + } catch (e) {} + + return url; +} + +function buildTrionUrlParams(bid, bidderRequest) { + var pubId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('pubId', bid.params); + var sectionId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getBidIdParameter"]('sectionId', bid.params); + var url = getPublisherUrl(); + var bidSizes = getBidSizesFromBidRequest(bid); + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidSizes).join(','); + var isAutomated = navigator && navigator.webdriver ? '1' : '0'; + var isHidden = document.hidden ? '1' : '0'; + var visibilityState = encodeURIComponent(document.visibilityState); + var intT = window.TR_INT_T && window.TR_INT_T != -1 ? window.TR_INT_T : null; + + if (!intT) { + intT = getStorageData(BASE_KEY + 'int_t'); + } + + if (intT) { + setStorageData(BASE_KEY + 'int_t', intT); + } + + setStorageData(BASE_KEY + 'lps', pubId + ':' + sectionId); + var trionUrl = ''; + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'bidId', bid.bidId); + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'pubId', pubId); + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'sectionId', sectionId); + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'vers', "4.2.0"); + + if (url) { + trionUrl += 'url=' + url + '&'; + } + + if (sizes) { + trionUrl += 'sizes=' + sizes + '&'; + } + + if (intT) { + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'int_t', encodeURIComponent(intT)); + } + + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'tr_wd', isAutomated); + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'tr_hd', isHidden); + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'tr_vs', visibilityState); + + if (bidderRequest && bidderRequest.gdprConsent) { + var gdpr = bidderRequest.gdprConsent; + + if (gdpr) { + if (gdpr.consentString) { + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'gdprc', encodeURIComponent(gdpr.consentString)); + } + + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'gdpr', gdpr.gdprApplies ? 1 : 0); + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + trionUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["tryAppendQueryString"](trionUrl, 'usp', encodeURIComponent(bidderRequest.uspConsent)); + } // remove the trailing "&" + + + if (trionUrl.lastIndexOf('&') === trionUrl.length - 1) { + trionUrl = trionUrl.substring(0, trionUrl.length - 1); + } + + return trionUrl; +} + +function getBidSizesFromBidRequest(bid) { + return bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes ? bid.mediaTypes.banner.sizes : bid.sizes; +} + +function handlePostMessage() { + try { + if (window.addEventListener) { + window.addEventListener('message', acceptPostMessage); + } + } catch (e) {} +} + +function getStorageData(key) { + var item = null; + + try { + if (storage.hasLocalStorage()) { + item = storage.getDataFromLocalStorage(key); + } + } catch (e) {} + + return item; +} +function setStorageData(key, item) { + try { + if (storage.hasLocalStorage()) { + storage.setDataInLocalStorage(key, item); + } + } catch (e) {} +} +function acceptPostMessage(e) { + var message = e.data || ''; + + if (!message.indexOf || !message.split || message.indexOf(BASE_KEY + 'userId') !== 0) { + return; + } + + var intT = message.split(BASE_KEY + 'userId=')[1]; + + if (intT) { + setStorageData(BASE_KEY + 'int_t', intT); + } +} + +/***/ }) + +},[752]); \ No newline at end of file diff --git a/build/dist/tripleliftBidAdapter.js b/build/dist/tripleliftBidAdapter.js new file mode 100644 index 00000000000..45e35d5b4e2 --- /dev/null +++ b/build/dist/tripleliftBidAdapter.js @@ -0,0 +1,273 @@ +pbjsChunk([80],{ + +/***/ 754: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(755); + + +/***/ }), + +/***/ 755: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tripleliftAdapterSpec", function() { return tripleliftAdapterSpec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_config_js__ = __webpack_require__(3); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + +var BIDDER_CODE = 'triplelift'; +var STR_ENDPOINT = 'https://tlx.3lift.com/header/auction?'; +var gdprApplies = true; +var consentString = null; +var tripleliftAdapterSpec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return typeof bid.params.inventoryCode !== 'undefined'; + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var tlCall = STR_ENDPOINT; + + var data = _buildPostBody(bidRequests); + + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'lib', 'prebid'); + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'v', "4.2.0"); + + if (bidderRequest && bidderRequest.refererInfo) { + var referrer = bidderRequest.refererInfo.referer; + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'referrer', referrer); + } + + if (bidderRequest && bidderRequest.timeout) { + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'tmax', bidderRequest.timeout); + } + + if (bidderRequest && bidderRequest.gdprConsent) { + if (typeof bidderRequest.gdprConsent.gdprApplies !== 'undefined') { + gdprApplies = bidderRequest.gdprConsent.gdprApplies; + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'gdpr', gdprApplies.toString()); + } + + if (typeof bidderRequest.gdprConsent.consentString !== 'undefined') { + consentString = bidderRequest.gdprConsent.consentString; + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'cmp_cs', consentString); + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'us_privacy', bidderRequest.uspConsent); + } + + if (__WEBPACK_IMPORTED_MODULE_3__src_config_js__["b" /* config */].getConfig('coppa') === true) { + tlCall = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](tlCall, 'coppa', true); + } + + if (tlCall.lastIndexOf('&') === tlCall.length - 1) { + tlCall = tlCall.substring(0, tlCall.length - 1); + } + + __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["logMessage"]('tlCall request built: ' + tlCall); + return { + method: 'POST', + url: tlCall, + data: data, + bidderRequest: bidderRequest + }; + }, + interpretResponse: function interpretResponse(serverResponse, _ref) { + var bidderRequest = _ref.bidderRequest; + var bids = serverResponse.body.bids || []; + return bids.map(function (bid) { + return _buildResponseObject(bidderRequest, bid); + }); + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent, usPrivacy) { + var syncType = _getSyncType(syncOptions); + + if (!syncType) return; + var syncEndpoint = 'https://eb2.3lift.com/sync?'; + + if (syncType === 'image') { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'px', 1); + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'src', 'prebid'); + } + + if (consentString !== null) { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'gdpr', gdprApplies); + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'cmp_cs', consentString); + } + + if (usPrivacy) { + syncEndpoint = __WEBPACK_IMPORTED_MODULE_2__src_utils_js__["tryAppendQueryString"](syncEndpoint, 'us_privacy', usPrivacy); + } + + return [{ + type: syncType, + url: syncEndpoint + }]; + } +}; + +function _getSyncType(syncOptions) { + if (!syncOptions) return; + if (syncOptions.iframeEnabled) return 'iframe'; + if (syncOptions.pixelEnabled) return 'image'; +} + +function _buildPostBody(bidRequests) { + var data = {}; + var schain = bidRequests[0].schain; + data.imp = bidRequests.map(function (bid, index) { + return { + id: index, + tagid: bid.params.inventoryCode, + floor: _getFloor(bid), + banner: { + format: _sizes(bid.sizes) + } + }; + }); + var eids = [].concat(_toConsumableArray(getUnifiedIdEids(bidRequests)), _toConsumableArray(getIdentityLinkEids(bidRequests)), _toConsumableArray(getCriteoEids(bidRequests))); + + if (eids.length > 0) { + data.user = { + ext: { + eids: eids + } + }; + } + + if (schain) { + data.ext = { + schain: schain + }; + } + + return data; +} + +function _getFloor(bid) { + var floor = null; + + if (typeof bid.getFloor === 'function') { + var floorInfo = bid.getFloor({ + currency: 'USD', + mediaType: 'banner', + size: _sizes(bid.sizes) + }); + + if (_typeof(floorInfo) === 'object' && floorInfo.currency === 'USD' && !isNaN(parseFloat(floorInfo.floor))) { + floor = parseFloat(floorInfo.floor); + } + } + + return floor !== null ? floor : bid.params.floor; +} + +function getUnifiedIdEids(bidRequests) { + return getEids(bidRequests, 'tdid', 'adserver.org', 'TDID'); +} + +function getIdentityLinkEids(bidRequests) { + return getEids(bidRequests, 'idl_env', 'liveramp.com', 'idl'); +} + +function getCriteoEids(bidRequests) { + return getEids(bidRequests, 'criteoId', 'criteo.com', 'criteoId'); +} + +function getEids(bidRequests, type, source, rtiPartner) { + return bidRequests.map(getUserId(type)) // bids -> userIds of a certain type + .filter(function (x) { + return !!x; + }) // filter out null userIds + .map(formatEid(source, rtiPartner)); // userIds -> eid objects +} + +function getUserId(type) { + return function (bid) { + return bid && bid.userId && bid.userId[type]; + }; +} + +function formatEid(source, rtiPartner) { + return function (id) { + return { + source: source, + uids: [{ + id: id, + ext: { + rtiPartner: rtiPartner + } + }] + }; + }; +} + +function _sizes(sizeArray) { + var sizes = sizeArray.filter(_isValidSize); + return sizes.map(function (size) { + return { + w: size[0], + h: size[1] + }; + }); +} + +function _isValidSize(size) { + return size.length === 2 && typeof size[0] === 'number' && typeof size[1] === 'number'; +} + +function _buildResponseObject(bidderRequest, bid) { + var bidResponse = {}; + var width = bid.width || 1; + var height = bid.height || 1; + var dealId = bid.deal_id || ''; + var creativeId = bid.crid || ''; + + if (bid.cpm != 0 && bid.ad) { + bidResponse = { + requestId: bidderRequest.bids[bid.imp_id].bidId, + cpm: bid.cpm, + width: width, + height: height, + netRevenue: true, + ad: bid.ad, + creativeId: creativeId, + dealId: dealId, + currency: 'USD', + ttl: 300, + tl_source: bid.tl_source + }; + } + + ; + return bidResponse; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(tripleliftAdapterSpec); + +/***/ }) + +},[754]); \ No newline at end of file diff --git a/build/dist/truereachBidAdapter.js b/build/dist/truereachBidAdapter.js new file mode 100644 index 00000000000..61235b61147 --- /dev/null +++ b/build/dist/truereachBidAdapter.js @@ -0,0 +1,140 @@ +pbjsChunk([79],{ + +/***/ 756: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(757); + + +/***/ }), + +/***/ 757: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var SUPPORTED_AD_TYPES = [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]]; +var BIDDER_CODE = 'truereach'; +var BIDDER_URL = 'https://ads.momagic.com/exchange/openrtb25/'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: SUPPORTED_AD_TYPES, + isBidRequestValid: function isBidRequestValid(bidRequest) { + return bidRequest.params.site_id && bidRequest.params.bidfloor && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner') && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes.length') > 0; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (validBidRequests.length === 0) { + return []; + } + + var queryParams = buildCommonQueryParamsFromBids(validBidRequests, bidderRequest); + var siteId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.site_id'); + var url = BIDDER_URL + siteId + '?hb=1&transactionId=' + validBidRequests[0].transactionId; + return { + method: 'POST', + url: url, + data: queryParams, + options: { + withCredentials: true + } + }; + }, + interpretResponse: function interpretResponse(_ref, serverRequest) { + var serverResponse = _ref.body; + var bidResponses = []; + + if (!serverResponse || !serverResponse.id || !serverResponse.seatbid || serverResponse.seatbid.length === 0 || !serverResponse.seatbid[0].bid || serverResponse.seatbid[0].bid.length === 0) { + return bidResponses; + } + + var adUnits = serverResponse.seatbid[0].bid; + var bidderBid = adUnits[0]; + var responseCPM = parseFloat(bidderBid.price); + + if (responseCPM === 0) { + return bidResponses; + } + + var responseAd = bidderBid.adm; + + if (bidderBid.nurl) { + var responseNurl = ''; + responseAd += responseNurl; + } + + var bidResponse = { + requestId: bidderBid.impid, + cpm: responseCPM, + currency: serverResponse.cur || 'USD', + width: parseInt(bidderBid.w), + height: parseInt(bidderBid.h), + ad: decodeURIComponent(responseAd), + ttl: 180, + creativeId: bidderBid.crid, + netRevenue: false + }; + + if (bidderBid.adomain && bidderBid.adomain.length) { + bidResponse.meta = { + advertiserDomains: bidderBid.adomain + }; + } + + bidResponses.push(bidResponse); + return bidResponses; + } +}; + +function buildCommonQueryParamsFromBids(validBidRequests, bidderRequest) { + var adW = 0; + var adH = 0; + var adSizes = Array.isArray(validBidRequests[0].params.sizes) ? validBidRequests[0].params.sizes : validBidRequests[0].sizes; + var sizeArrayLength = adSizes.length; + + if (sizeArrayLength === 2 && typeof adSizes[0] === 'number' && typeof adSizes[1] === 'number') { + adW = adSizes[0]; + adH = adSizes[1]; + } else { + adW = adSizes[0][0]; + adH = adSizes[0][1]; + } + + var bidFloor = Number(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.bidfloor')); + var domain = window.location.host; + var page = window.location.host + window.location.pathname + location.search + location.hash; + var defaultParams = { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getUniqueIdentifierStr"](), + imp: [{ + id: validBidRequests[0].bidId, + banner: { + w: adW, + h: adH + }, + bidfloor: bidFloor + }], + site: { + domain: domain, + page: page + }, + device: { + ua: window.navigator.userAgent + }, + tmax: __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('bidderTimeout') + }; + return defaultParams; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[756]); \ No newline at end of file diff --git a/build/dist/trustxBidAdapter.js b/build/dist/trustxBidAdapter.js new file mode 100644 index 00000000000..39f42af4417 --- /dev/null +++ b/build/dist/trustxBidAdapter.js @@ -0,0 +1,339 @@ +pbjsChunk([78],{ + +/***/ 758: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(759); + + +/***/ }), + +/***/ 759: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'trustx'; +var ENDPOINT_URL = 'https://sofia.trustx.org/hb'; +var TIME_TO_LIVE = 360; +var ADAPTER_SYNC_URL = 'https://sofia.trustx.org/push_sync'; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; +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 = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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.uid; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - an array of bids + * @param {bidderRequest} - bidder request object + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var auids = []; + var bidsMap = {}; + var slotsMapByUid = {}; + var sizeMap = {}; + var bids = validBidRequests || []; + var priceType = 'net'; + var pageKeywords; + var reqId; + bids.forEach(function (bid) { + if (bid.params.priceType === 'gross') { + priceType = 'gross'; + } + + reqId = bid.bidderRequestId; + var uid = bid.params.uid, + adUnitCode = bid.adUnitCode; + auids.push(uid); + var sizesId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes); + + if (!pageKeywords && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bid.params.keywords)) { + var keywords = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["transformBidderParamKeywords"](bid.params.keywords); + + if (keywords.length > 0) { + keywords.forEach(deleteValues); + } + + pageKeywords = keywords; + } + + if (!slotsMapByUid[uid]) { + slotsMapByUid[uid] = {}; + } + + var slotsMap = slotsMapByUid[uid]; + + if (!slotsMap[adUnitCode]) { + slotsMap[adUnitCode] = { + adUnitCode: adUnitCode, + bids: [bid], + parents: [] + }; + } else { + slotsMap[adUnitCode].bids.push(bid); + } + + var slot = slotsMap[adUnitCode]; + sizesId.forEach(function (sizeId) { + sizeMap[sizeId] = true; + + if (!bidsMap[uid]) { + bidsMap[uid] = {}; + } + + if (!bidsMap[uid][sizeId]) { + bidsMap[uid][sizeId] = [slot]; + } else { + bidsMap[uid][sizeId].push(slot); + } + + slot.parents.push({ + parent: bidsMap[uid], + key: sizeId, + uid: uid + }); + }); + }); + var payload = { + pt: priceType, + auids: auids.join(','), + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](sizeMap).join(','), + r: reqId, + wrapperType: 'Prebid_js', + wrapperVersion: "4.2.0" + }; + + if (pageKeywords) { + payload.keywords = JSON.stringify(pageKeywords); + } + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + payload.u = bidderRequest.refererInfo.referer; + } + + if (bidderRequest.timeout) { + payload.wtimeout = bidderRequest.timeout; + } + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + } + + payload.gdpr_applies = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? Number(bidderRequest.gdprConsent.gdprApplies) : 1; + } + + if (bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + } + + return { + method: 'GET', + url: ENDPOINT_URL, + data: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](payload).replace(/\&$/, ''), + 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) { + var RendererConst = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */]; + serverResponse = serverResponse && serverResponse.body; + var bidResponses = []; + var bidsMap = bidRequest.bidsMap; + var priceType = bidRequest.data.pt; + var errorMessage; + 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, RendererConst); + }); + } + + if (errorMessage) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: ADAPTER_SYNC_URL + }]; + } + } +}; + +function isPopulatedArray(arr) { + return !!(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](arr) && arr.length > 0); +} + +function deleteValues(keyPairObj) { + if (isPopulatedArray(keyPairObj.value) && keyPairObj.value[0] === '') { + delete keyPairObj.value; + } +} + +function _getBidFromResponse(respItem) { + if (!respItem) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.emptySeatbid); + } else if (!respItem.bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); + } else if (!respItem.bid[0]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.noBid); + } + + return respItem && respItem.bid && respItem.bid[0]; +} + +function _addBidResponse(serverBid, bidsMap, priceType, bidResponses, RendererConst) { + if (!serverBid) return; + var errorMessage; + 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) { + var sizeId = "".concat(serverBid.w, "x").concat(serverBid.h); + + if (awaitingBids[sizeId]) { + var slot = awaitingBids[sizeId][0]; + var bid = slot.bids.shift(); + var bidResponse = { + requestId: bid.bidId, + // bid.bidderRequestId, + bidderCode: spec.code, + cpm: serverBid.price, + width: serverBid.w, + height: serverBid.h, + creativeId: serverBid.auid, + // bid.bidId, + currency: 'USD', + netRevenue: priceType !== 'gross', + ttl: TIME_TO_LIVE, + dealId: serverBid.dealid + }; + + if (serverBid.content_type === 'video') { + bidResponse.vastXml = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.adResponse = { + content: bidResponse.vastXml + }; + + if (!bid.renderer && (!bid.mediaTypes || !bid.mediaTypes.video || bid.mediaTypes.video.context === 'outstream')) { + bidResponse.renderer = createRenderer(bidResponse, { + id: bid.bidId, + url: RENDERER_URL + }, RendererConst); + } + } else { + bidResponse.ad = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + } + + bidResponses.push(bidResponse); + + if (!slot.bids.length) { + slot.parents.forEach(function (_ref) { + var parent = _ref.parent, + key = _ref.key, + uid = _ref.uid; + var index = parent[key].indexOf(slot); + + if (index > -1) { + parent[key].splice(index, 1); + } + + if (!parent[key].length) { + delete parent[key]; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](parent).length) { + delete bidsMap[uid]; + } + } + }); + } + } + } else { + errorMessage = LOG_ERROR_MESS.noPlacementCode + serverBid.auid; + } + } + + if (errorMessage) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + } +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + targetId: bid.adUnitCode, + adResponse: bid.adResponse + }); + }); +} + +function createRenderer(bid, rendererParams, RendererConst) { + var rendererInst = RendererConst.install({ + id: rendererParams.id, + url: rendererParams.url, + loaded: false + }); + + try { + rendererInst.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return rendererInst; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[758]); \ No newline at end of file diff --git a/build/dist/turktelekomBidAdapter.js b/build/dist/turktelekomBidAdapter.js new file mode 100644 index 00000000000..d48f0467193 --- /dev/null +++ b/build/dist/turktelekomBidAdapter.js @@ -0,0 +1,310 @@ +pbjsChunk([77],{ + +/***/ 760: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(761); + + +/***/ }), + +/***/ 761: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'turktelekom'; +var ENDPOINT_URL = 'https://ssp.programattik.com/hb'; +var TIME_TO_LIVE = 360; +var ADAPTER_SYNC_URL = 'https://ssp.programattik.com/sync'; +var RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; +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 = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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.uid; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @param {BidRequest[]} validBidRequests - an array of bids + * @param {bidderRequest} - bidder request object + * @return ServerRequest Info describing the request to the server. + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var auids = []; + var bidsMap = {}; + var slotsMapByUid = {}; + var sizeMap = {}; + var bids = validBidRequests || []; + var priceType = 'net'; + var reqId; + bids.forEach(function (bid) { + if (bid.params.priceType === 'gross') { + priceType = 'gross'; + } + + reqId = bid.bidderRequestId; + var uid = bid.params.uid, + adUnitCode = bid.adUnitCode; + auids.push(uid); + var sizesId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes); + + if (!slotsMapByUid[uid]) { + slotsMapByUid[uid] = {}; + } + + var slotsMap = slotsMapByUid[uid]; + + if (!slotsMap[adUnitCode]) { + slotsMap[adUnitCode] = { + adUnitCode: adUnitCode, + bids: [bid], + parents: [] + }; + } else { + slotsMap[adUnitCode].bids.push(bid); + } + + var slot = slotsMap[adUnitCode]; + sizesId.forEach(function (sizeId) { + sizeMap[sizeId] = true; + + if (!bidsMap[uid]) { + bidsMap[uid] = {}; + } + + if (!bidsMap[uid][sizeId]) { + bidsMap[uid][sizeId] = [slot]; + } else { + bidsMap[uid][sizeId].push(slot); + } + + slot.parents.push({ + parent: bidsMap[uid], + key: sizeId, + uid: uid + }); + }); + }); + var payload = { + pt: priceType, + auids: auids.join(','), + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](sizeMap).join(','), + r: reqId, + wrapperType: 'Prebid_js', + wrapperVersion: "4.2.0" + }; + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + payload.u = bidderRequest.refererInfo.referer; + } + + if (bidderRequest.timeout) { + payload.wtimeout = bidderRequest.timeout; + } + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + } + + payload.gdpr_applies = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? Number(bidderRequest.gdprConsent.gdprApplies) : 1; + } + } + + return { + method: 'GET', + url: ENDPOINT_URL, + data: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseQueryStringParameters"](payload).replace(/\&$/, ''), + 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) { + var RendererConst = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */]; + serverResponse = serverResponse && serverResponse.body; + var bidResponses = []; + var bidsMap = bidRequest.bidsMap; + var priceType = bidRequest.data.pt; + var errorMessage; + 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, RendererConst); + }); + } + + if (errorMessage) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: ADAPTER_SYNC_URL + }]; + } + } +}; + +function _getBidFromResponse(respItem) { + if (!respItem) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.emptySeatbid); + } else if (!respItem.bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); + } else if (!respItem.bid[0]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.noBid); + } + + return respItem && respItem.bid && respItem.bid[0]; +} + +function _addBidResponse(serverBid, bidsMap, priceType, bidResponses, RendererConst) { + if (!serverBid) return; + var errorMessage; + 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) { + var sizeId = "".concat(serverBid.w, "x").concat(serverBid.h); + + if (awaitingBids[sizeId]) { + var slot = awaitingBids[sizeId][0]; + var bid = slot.bids.shift(); + var bidResponse = { + requestId: bid.bidId, + // bid.bidderRequestId, + bidderCode: spec.code, + cpm: serverBid.price, + width: serverBid.w, + height: serverBid.h, + creativeId: serverBid.auid, + // bid.bidId, + currency: 'TRY', + netRevenue: priceType !== 'gross', + ttl: TIME_TO_LIVE, + dealId: serverBid.dealid + }; + + if (serverBid.content_type === 'video') { + bidResponse.vastXml = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.adResponse = { + content: bidResponse.vastXml + }; + + if (!bid.renderer && (!bid.mediaTypes || !bid.mediaTypes.video || bid.mediaTypes.video.context === 'outstream')) { + bidResponse.renderer = createRenderer(bidResponse, { + id: bid.bidId, + url: RENDERER_URL + }, RendererConst); + } + } else { + bidResponse.ad = serverBid.adm; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + } + + bidResponses.push(bidResponse); + + if (!slot.bids.length) { + slot.parents.forEach(function (_ref) { + var parent = _ref.parent, + key = _ref.key, + uid = _ref.uid; + var index = parent[key].indexOf(slot); + + if (index > -1) { + parent[key].splice(index, 1); + } + + if (!parent[key].length) { + delete parent[key]; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](parent).length) { + delete bidsMap[uid]; + } + } + }); + } + } + } else { + errorMessage = LOG_ERROR_MESS.noPlacementCode + serverBid.auid; + } + } + + if (errorMessage) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + } +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + targetId: bid.adUnitCode, + adResponse: bid.adResponse + }); + }); +} + +function createRenderer(bid, rendererParams, RendererConst) { + var rendererInst = RendererConst.install({ + id: rendererParams.id, + url: rendererParams.url, + loaded: false + }); + + try { + rendererInst.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return rendererInst; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[760]); \ No newline at end of file diff --git a/build/dist/ucfunnelAnalyticsAdapter.js b/build/dist/ucfunnelAnalyticsAdapter.js new file mode 100644 index 00000000000..b2c530fa943 --- /dev/null +++ b/build/dist/ucfunnelAnalyticsAdapter.js @@ -0,0 +1,496 @@ +pbjsChunk([5],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 762: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(763); + + +/***/ }), + +/***/ 763: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ANALYTICS_VERSION", function() { return ANALYTICS_VERSION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BIDDER_STATUS", function() { return BIDDER_STATUS; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseBidderCode", function() { return parseBidderCode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseAdUnitCode", function() { return parseAdUnitCode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ucfunnelAnalyticsAdapter", function() { return ucfunnelAnalyticsAdapter; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + +var analyticsType = 'endpoint'; +var ANALYTICS_VERSION = '1.0.0'; +var ANALYTICS_SERVER = 'https://hbwa.aralego.com'; +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT; +var BIDDER_STATUS = { + BID: 'bid', + NO_BID: 'noBid', + BID_WON: 'bidWon', + TIMEOUT: 'timeout' +}; +var analyticsOptions = {}; +var parseBidderCode = function parseBidderCode(bid) { + var bidderCode = bid.bidderCode || bid.bidder; + return bidderCode.toLowerCase(); +}; +var parseAdUnitCode = function parseAdUnitCode(bidResponse) { + return bidResponse.adUnitCode.toLowerCase(); +}; +var ucfunnelAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + ANALYTICS_SERVER: ANALYTICS_SERVER, + analyticsType: analyticsType +}), { + cachedAuctions: {}, + initConfig: function initConfig(config) { + /** + * Required option: pbuid + * Required option: adid + * @type {boolean} + */ + analyticsOptions.options = Object(__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["deepClone"])(config.options); + + if (typeof config.options.pbuid !== 'string' || config.options.pbuid.length < 1) { + Object(__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"])('"options.pbuid" is required.'); + return false; + } + + if (typeof config.options.adid !== 'string' || config.options.adid.length < 1) { + Object(__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logError"])('"options.adid" is required.'); + return false; + } + + analyticsOptions.sampled = true; + + if (typeof config.options.sampling === 'number') { + analyticsOptions.sampled = Math.random() < parseFloat(config.options.sampling); + } + + analyticsOptions.pbuid = config.options.pbuid; + analyticsOptions.adid = config.options.adid; + analyticsOptions.server = ANALYTICS_SERVER; + return true; + }, + sendEventMessage: function sendEventMessage(endPoint, data) { + Object(__WEBPACK_IMPORTED_MODULE_5__src_utils_js__["logInfo"])("AJAX: ".concat(endPoint, ": ") + JSON.stringify(data)); + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])("".concat(analyticsOptions.server, "/").concat(endPoint), null, JSON.stringify(data), { + contentType: 'application/json', + withCredentials: true + }); + }, + createCommonMessage: function createCommonMessage(auctionId) { + return { + version: ANALYTICS_VERSION, + auctionId: auctionId, + referrer: window.location.href, + sampling: analyticsOptions.options.sampling, + prebid: "4.2.0", + adid: analyticsOptions.adid, + pbuid: analyticsOptions.pbuid, + adUnits: {} + }; + }, + serializeBidResponse: function serializeBidResponse(bid, status) { + var result = { + prebidWon: status === BIDDER_STATUS.BID_WON, + isTimeout: status === BIDDER_STATUS.TIMEOUT, + status: status + }; + + if (status === BIDDER_STATUS.BID || status === BIDDER_STATUS.BID_WON) { + _extends(result, { + time: bid.timeToRespond, + cpm: bid.cpm, + currency: bid.currency + }); + } + + return result; + }, + addBidResponseToMessage: function addBidResponseToMessage(message, bid, status) { + var adUnitCode = parseAdUnitCode(bid); + message.adUnits[adUnitCode] = message.adUnits[adUnitCode] || {}; + var bidder = parseBidderCode(bid); + var bidResponse = this.serializeBidResponse(bid, status); + message.adUnits[adUnitCode][bidder] = bidResponse; + }, + createBidMessage: function createBidMessage(auctionEndArgs, winningBids, timeoutBids) { + var _this = this; + + var auctionId = auctionEndArgs.auctionId, + timestamp = auctionEndArgs.timestamp, + auctionEnd = auctionEndArgs.auctionEnd, + adUnitCodes = auctionEndArgs.adUnitCodes, + bidsReceived = auctionEndArgs.bidsReceived, + noBids = auctionEndArgs.noBids; + var message = this.createCommonMessage(auctionId); + message.auctionElapsed = auctionEnd - timestamp; + adUnitCodes.forEach(function (adUnitCode) { + message.adUnits[adUnitCode] = {}; + }); // In this situation, the bid exists in both noBids and bids arrays. + + noBids.forEach(function (bid) { + return _this.addBidResponseToMessage(message, bid, BIDDER_STATUS.NO_BID); + }); // This array may contain some timeout bids (responses come back after auction timeout) + + bidsReceived.forEach(function (bid) { + return _this.addBidResponseToMessage(message, bid, BIDDER_STATUS.BID); + }); // We handle timeout after bids since it's possible that a bid has a response, but the response comes back + // after auction end. In this case, the bid exists in both bidsReceived and timeoutBids arrays. + + timeoutBids.forEach(function (bid) { + return _this.addBidResponseToMessage(message, bid, BIDDER_STATUS.TIMEOUT); + }); // mark the winning bids with prebidWon = true + + winningBids.forEach(function (bid) { + var adUnitCode = parseAdUnitCode(bid); + var bidder = parseBidderCode(bid); + message.adUnits[adUnitCode][bidder].prebidWon = true; + }); + return message; + }, + createImpressionMessage: function createImpressionMessage(bid) { + var message = this.createCommonMessage(bid.auctionId); + this.addBidResponseToMessage(message, bid, BIDDER_STATUS.BID_WON); + return message; + }, + getCachedAuction: function getCachedAuction(auctionId) { + this.cachedAuctions[auctionId] = this.cachedAuctions[auctionId] || { + timeoutBids: [] + }; + return this.cachedAuctions[auctionId]; + }, + handleAuctionEnd: function handleAuctionEnd(auctionEndArgs) { + var cachedAuction = this.getCachedAuction(auctionEndArgs.auctionId); + var highestCpmBids = Object(__WEBPACK_IMPORTED_MODULE_4__src_prebidGlobal_js__["a" /* getGlobal */])().getHighestCpmBids(); + this.sendEventMessage('bid', this.createBidMessage(auctionEndArgs, highestCpmBids, cachedAuction.timeoutBids)); + }, + handleBidTimeout: function handleBidTimeout(timeoutBids) { + var _this2 = this; + + timeoutBids.forEach(function (bid) { + var cachedAuction = _this2.getCachedAuction(bid.auctionId); + + cachedAuction.timeoutBids.push(bid); + }); + }, + handleBidWon: function handleBidWon(bidWonArgs) { + this.sendEventMessage('imp', this.createImpressionMessage(bidWonArgs)); + }, + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (analyticsOptions.sampled) { + switch (eventType) { + case BID_WON: + this.handleBidWon(args); + break; + + case BID_TIMEOUT: + this.handleBidTimeout(args); + break; + + case AUCTION_END: + this.handleAuctionEnd(args); + break; + } + } + }, + getAnalyticsOptions: function getAnalyticsOptions() { + return analyticsOptions; + } +}); // save the base class function + +ucfunnelAnalyticsAdapter.originEnableAnalytics = ucfunnelAnalyticsAdapter.enableAnalytics; // override enableAnalytics so we can get access to the config passed in from the page + +ucfunnelAnalyticsAdapter.enableAnalytics = function (config) { + if (this.initConfig(config)) { + ucfunnelAnalyticsAdapter.originEnableAnalytics(config); // call the base class function + } +}; + +__WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: ucfunnelAnalyticsAdapter, + code: 'ucfunnelAnalytics' +}); + +/***/ }) + +},[762]); \ No newline at end of file diff --git a/build/dist/ucfunnelBidAdapter.js b/build/dist/ucfunnelBidAdapter.js new file mode 100644 index 00000000000..2b796964c56 --- /dev/null +++ b/build/dist/ucfunnelBidAdapter.js @@ -0,0 +1,302 @@ +pbjsChunk([76],{ + +/***/ 764: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(765); + + +/***/ }), + +/***/ 765: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__ = __webpack_require__(9); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_2__src_storageManager_js__["b" /* getStorageManager */])(); +var COOKIE_NAME = 'ucf_uid'; +var VER = 'ADGENT_PREBID-2018011501'; +var BIDDER_CODE = 'ucfunnel'; +var VIDEO_CONTEXT = { + INSTREAM: 0, + OUSTREAM: 2 +}; +var spec = { + code: BIDDER_CODE, + ENDPOINT: 'https://hb.aralego.com/header', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]], + + /** + * Check if the bid is a valid zone ID in either number or string form + * @param {object} bid the ucfunnel bid to validate + * @return boolean for whether or not a bid is valid + */ + isBidRequestValid: function isBidRequestValid(bid) { + var isVideoMediaType = bid.mediaTypes && bid.mediaTypes.video != null; + var videoContext = bid.mediaTypes && bid.mediaTypes.video != null ? bid.mediaTypes.video.videoContext : ''; + + if (_typeof(bid.params) !== 'object' || typeof bid.params.adid != 'string') { + return false; + } + + if (isVideoMediaType && videoContext === 'outstream') { + return false; + } + + return true; + }, + + /** + * @param {BidRequest[]} bidRequests + * @param {*} bidderRequest + * @return {ServerRequest} + */ + buildRequests: function buildRequests(bids, bidderRequest) { + return bids.map(function (bid) { + return { + method: 'GET', + url: spec.ENDPOINT, + data: getRequestData(bid, bidderRequest), + bidRequest: bid + }; + }); + }, + + /** + * Format ucfunnel responses as Prebid bid responses + * @param {ucfunnelResponseObj} ucfunnelResponse A successful response from ucfunnel. + * @return {Bid[]} An array of formatted bids. + */ + interpretResponse: function interpretResponse(ucfunnelResponseObj, request) { + var bidRequest = request.bidRequest; + var ad = ucfunnelResponseObj ? ucfunnelResponseObj.body : {}; + var videoPlayerSize = parseSizes(bidRequest); + var bid = { + requestId: bidRequest.bidId, + cpm: ad.cpm || 0, + creativeId: ad.ad_id || bidRequest.params.adid, + dealId: ad.deal || null, + currency: 'USD', + netRevenue: true, + ttl: 1800 + }; + + if (bidRequest.params && bidRequest.params.bidfloor && ad.cpm && ad.cpm < bidRequest.params.bidfloor) { + bid.cpm = 0; + } + + if (ad.creative_type) { + bid.mediaType = ad.creative_type; + } + + switch (ad.creative_type) { + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["c" /* NATIVE */]: + var nativeAd = ad.native; + + _extends(bid, { + width: 1, + height: 1, + native: { + title: nativeAd.title, + body: nativeAd.desc, + cta: nativeAd.ctatext, + sponsoredBy: nativeAd.sponsored, + image: nativeAd.image || nativeAd.image.url, + icon: nativeAd.icon || nativeAd.icon.url, + clickUrl: nativeAd.clickUrl, + clickTrackers: nativeAd.clicktrackers ? nativeAd.clicktrackers : [], + impressionTrackers: nativeAd.impressionTrackers + } + }); + + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]: + _extends(bid, { + vastUrl: ad.vastUrl, + vastXml: ad.vastXml + }); + + if (videoPlayerSize && videoPlayerSize.length === 2) { + _extends(bid, { + width: videoPlayerSize[0], + height: videoPlayerSize[1] + }); + } + + break; + + case __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]: + default: + var size = parseSizes(bidRequest); + + _extends(bid, { + width: ad.width || size[0], + height: ad.height || size[1], + ad: ad.adm || '' + }); + + } + + return [bid]; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: 'https://cdn.aralego.net/ucfad/cookie/sync.html' + }]; + } else if (syncOptions.pixelEnabled) { + return [{ + type: 'image', + url: 'https://sync.aralego.com/idSync' + }]; + } + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +function transformSizes(requestSizes) { + if (_typeof(requestSizes) === 'object' && requestSizes.length) { + return requestSizes[0]; + } +} + +function parseSizes(bid) { + var params = bid.params; + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */]) { + var size = []; + + if (params.video && params.video.playerWidth && params.video.playerHeight) { + size = [params.video.playerWidth, params.video.playerHeight]; + return size; + } + } + + return transformSizes(bid.sizes); +} + +function getSupplyChain(schain) { + var supplyChain = ''; + + if (schain != null && schain.nodes) { + supplyChain = schain.ver + ',' + schain.complete; + + for (var i = 0; i < schain.nodes.length; i++) { + supplyChain += '!'; + supplyChain += schain.nodes[i].asi ? encodeURIComponent(schain.nodes[i].asi) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].sid ? encodeURIComponent(schain.nodes[i].sid) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].hp ? encodeURIComponent(schain.nodes[i].hp) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].rid ? encodeURIComponent(schain.nodes[i].rid) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].name ? encodeURIComponent(schain.nodes[i].name) : ''; + supplyChain += ','; + supplyChain += schain.nodes[i].domain ? encodeURIComponent(schain.nodes[i].domain) : ''; + } + } + + return supplyChain; +} + +function getRequestData(bid, bidderRequest) { + var size = parseSizes(bid); + var language = navigator.language; + var dnt = navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1' ? 1 : 0; + var userIdTdid = bid.userId && bid.userId.tdid ? bid.userId.tdid : ''; + var supplyChain = getSupplyChain(bid.schain); // general bid data + + var bidData = { + ver: VER, + ifr: 0, + bl: language, + je: 1, + dnt: dnt, + adid: bid.params.adid, + tdid: userIdTdid, + schain: supplyChain, + fp: bid.params.bidfloor + }; + + try { + bidData.host = window.top.location.hostname; + bidData.u = window.top.location.href; + bidData.xr = 0; + } catch (e) { + bidData.host = window.location.hostname; + bidData.u = document.referrer || window.location.href; + bidData.xr = 1; + } + + if (window.location.ancestorOrigins && window.location.ancestorOrigins.length > 0) { + bidData.ao = window.location.ancestorOrigins[window.location.ancestorOrigins.length - 1]; + } + + if (storage.cookiesAreEnabled()) { + var ucfUid = ''; + + if (storage.getCookie(COOKIE_NAME) != undefined) { + ucfUid = storage.getCookie(COOKIE_NAME); + bidData.ucfUid = ucfUid; + } else { + ucfUid = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["generateUUID"](); + bidData.ucfUid = ucfUid; + storage.setCookie(COOKIE_NAME, ucfUid); + } + } + + if (size != undefined && size.length == 2) { + bidData.w = size[0]; + bidData.h = size[1]; + } + + if (bidderRequest && bidderRequest.uspConsent) { + _extends(bidData, { + usprivacy: bidderRequest.uspConsent + }); + } + + if (bid.mediaTypes && bid.mediaTypes.video != null) { + var videoContext = bid.mediaTypes.video.context; + + switch (videoContext) { + case 'outstream': + bidData.atype = VIDEO_CONTEXT.OUSTREAM; + break; + + case 'instream': + default: + bidData.atype = VIDEO_CONTEXT.INSTREAM; + break; + } + } + + if (bidderRequest && bidderRequest.gdprConsent) { + _extends(bidData, { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0, + euconsent: bidderRequest.gdprConsent.consentString + }); + } + + return bidData; +} + +/***/ }) + +},[764]); \ No newline at end of file diff --git a/build/dist/underdogmediaBidAdapter.js b/build/dist/underdogmediaBidAdapter.js new file mode 100644 index 00000000000..51909a9baaf --- /dev/null +++ b/build/dist/underdogmediaBidAdapter.js @@ -0,0 +1,199 @@ +pbjsChunk([75],{ + +/***/ 766: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(767); + + +/***/ }), + +/***/ 767: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["resetUserSync"] = resetUserSync; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + + +var BIDDER_CODE = 'underdogmedia'; +var UDM_ADAPTER_VERSION = '3.5V'; +var UDM_VENDOR_ID = '159'; +var prebidVersion = "4.2.0"; +var USER_SYNCED = false; +__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]("Initializing UDM Adapter. PBJS Version: ".concat(prebidVersion, " with adapter version: ").concat(UDM_ADAPTER_VERSION, " Updated 20191028")); // helper function for testing user syncs + +function resetUserSync() { + USER_SYNCED = false; +} +var spec = { + code: BIDDER_CODE, + bidParams: [], + isBidRequestValid: function isBidRequestValid(bid) { + var bidSizes = bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes ? bid.mediaTypes.banner.sizes : bid.sizes; + return !!(bid.params && bid.params.siteId && bidSizes && bidSizes.length > 0); + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var sizes = []; + var siteId = 0; + validBidRequests.forEach(function (bidParam) { + var bidParamSizes = bidParam.mediaTypes && bidParam.mediaTypes.banner && bidParam.mediaTypes.banner.sizes ? bidParam.mediaTypes.banner.sizes : bidParam.sizes; + sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["flatten"](sizes, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidParamSizes)); + siteId = bidParam.params.siteId; + }); + var data = { + tid: 1, + dt: 10, + sid: siteId, + sizes: sizes.join(','), + version: UDM_ADAPTER_VERSION + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + if (typeof bidderRequest.gdprConsent.gdprApplies !== 'undefined') { + data.gdprApplies = !!bidderRequest.gdprConsent.gdprApplies; + } + + if (bidderRequest.gdprConsent.vendorData && bidderRequest.gdprConsent.vendorData.vendorConsents && typeof bidderRequest.gdprConsent.vendorData.vendorConsents[UDM_VENDOR_ID] !== 'undefined') { + data.consentGiven = !!bidderRequest.gdprConsent.vendorData.vendorConsents[UDM_VENDOR_ID]; + } + + if (typeof bidderRequest.gdprConsent.consentString !== 'undefined') { + data.consentData = bidderRequest.gdprConsent.consentString; + } + } + + if (bidderRequest.uspConsent) { + data.uspConsent = bidderRequest.uspConsent; + } + + if (!data.gdprApplies || data.consentGiven) { + return { + method: 'GET', + url: 'https://udmserve.net/udm/img.fetch', + data: data, + bidParams: validBidRequests + }; + } + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + if (!USER_SYNCED && serverResponses.length > 0 && serverResponses[0].body && serverResponses[0].body.userSyncs && serverResponses[0].body.userSyncs.length > 0) { + USER_SYNCED = true; + var userSyncs = serverResponses[0].body.userSyncs; + var syncs = userSyncs.filter(function (sync) { + var type = sync.type; + + if (syncOptions.iframeEnabled && type === 'iframe') { + return true; + } + + if (syncOptions.pixelEnabled && type === 'image') { + return true; + } + }); + return syncs; + } + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + bidRequest.bidParams.forEach(function (bidParam) { + serverResponse.body.mids.forEach(function (mid) { + if (mid.useCount > 0) { + return; + } + + if (!mid.useCount) { + mid.useCount = 0; + } + + var sizeNotFound = true; + var bidParamSizes = bidParam.mediaTypes && bidParam.mediaTypes.banner && bidParam.mediaTypes.banner.sizes ? bidParam.mediaTypes.banner.sizes : bidParam.sizes; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidParamSizes).forEach(function (size) { + if (size === mid.width + 'x' + mid.height) { + sizeNotFound = false; + } + }); + + if (sizeNotFound) { + return; + } + + var bidResponse = { + requestId: bidParam.bidId, + bidderCode: spec.code, + cpm: parseFloat(mid.cpm), + width: mid.width, + height: mid.height, + ad: mid.ad_code_html, + creativeId: mid.mid, + currency: 'USD', + netRevenue: false, + ttl: mid.ttl || 60 + }; + + if (bidResponse.cpm <= 0) { + return; + } + + if (bidResponse.ad.length <= 0) { + return; + } + + mid.useCount++; + bidResponse.ad += makeNotification(bidResponse, mid, bidParam); + bidResponses.push(bidResponse); + }); + }); + return bidResponses; + } +}; + +function makeNotification(bid, mid, bidParam) { + var url = mid.notification_url; + var versionIndex = url.indexOf(';version='); + + if (versionIndex + 1) { + url = url.substring(0, versionIndex); + } + + url += ";version=".concat(UDM_ADAPTER_VERSION); + url += ';cb=' + Math.random(); + url += ';qqq=' + 1 / bid.cpm; + url += ';hbt=' + __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'); + url += ';style=adapter'; + url += ';vis=' + encodeURIComponent(document.visibilityState); + url += ';traffic_info=' + encodeURIComponent(JSON.stringify(getUrlVars())); + + if (bidParam.params.subId) { + url += ';subid=' + encodeURIComponent(bidParam.params.subId); + } + + return ''; +} + +function getUrlVars() { + var vars = {}; + var hash; + var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); + + for (var i = 0; i < hashes.length; i++) { + hash = hashes[i].split('='); + + if (hash[0].match(/^utm_/)) { + vars[hash[0]] = hash[1].substr(0, 150); + } + } + + return vars; +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[766]); \ No newline at end of file diff --git a/build/dist/undertoneBidAdapter.js b/build/dist/undertoneBidAdapter.js new file mode 100644 index 00000000000..9a3e16508bd --- /dev/null +++ b/build/dist/undertoneBidAdapter.js @@ -0,0 +1,245 @@ +pbjsChunk([74],{ + +/***/ 768: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(769); + + +/***/ }), + +/***/ 769: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/** + * Adapter to send bids to Undertone + */ + + + +var BIDDER_CODE = 'undertone'; +var URL = 'https://hb.undertone.com/hb'; +var FRAME_USER_SYNC = 'https://cdn.undertone.com/js/usersync.html'; +var PIXEL_USER_SYNC_1 = 'https://usr.undertone.com/userPixel/syncOne?id=1&of=2'; +var PIXEL_USER_SYNC_2 = 'https://usr.undertone.com/userPixel/syncOne?id=2&of=2'; + +function getCanonicalUrl() { + try { + var doc = window.top.document; + var element = doc.querySelector("link[rel='canonical']"); + + if (element !== null) { + return element.href; + } + } catch (e) {} + + return null; +} + +function extractDomainFromHost(pageHost) { + var domain = null; + + try { + var domains = /[-\w]+\.([-\w]+|[-\w]{3,}|[-\w]{1,3}\.[-\w]{2})$/i.exec(pageHost); + + if (domains != null && domains.length > 0) { + domain = domains[0]; + + for (var i = 1; i < domains.length; i++) { + if (domains[i].length > domain.length) { + domain = domains[i]; + } + } + } + } catch (e) { + domain = null; + } + + return domain; +} + +function getGdprQueryParams(gdprConsent) { + if (!gdprConsent) { + return null; + } + + var gdpr = gdprConsent.gdprApplies ? '1' : '0'; + var gdprstr = gdprConsent.consentString ? gdprConsent.consentString : ''; + return "gdpr=".concat(gdpr, "&gdprstr=").concat(gdprstr); +} + +function getBannerCoords(id) { + var element = document.getElementById(id); + var left = -1; + var top = -1; + + if (element) { + left = element.offsetLeft; + top = element.offsetTop; + var parent = element.offsetParent; + + if (parent) { + left += parent.offsetLeft; + top += parent.offsetTop; + } + + return [left, top]; + } else { + return null; + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (bid && bid.params && bid.params.publisherId) { + bid.params.publisherId = parseInt(bid.params.publisherId); + return true; + } + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var vw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); + var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); + var pageSizeArray = vw == 0 || vh == 0 ? null : [vw, vh]; + var payload = { + 'x-ut-hb-params': [], + 'commons': { + 'adapterVersion': "4.2.0", + 'uids': validBidRequests[0].userId, + 'pageSize': pageSizeArray + } + }; + var referer = bidderRequest.refererInfo.referer; + var hostname = Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseUrl"])(referer).hostname; + var domain = extractDomainFromHost(hostname); + var pageUrl = getCanonicalUrl() || referer; + var pubid = validBidRequests[0].params.publisherId; + var reqUrl = "".concat(URL, "?pid=").concat(pubid, "&domain=").concat(domain); + var gdprParams = getGdprQueryParams(bidderRequest.gdprConsent); + + if (gdprParams) { + reqUrl += "&".concat(gdprParams); + } + + if (bidderRequest.uspConsent) { + reqUrl += "&ccpa=".concat(bidderRequest.uspConsent); + } + + validBidRequests.map(function (bidReq) { + var bid = { + bidRequestId: bidReq.bidId, + coordinates: getBannerCoords(bidReq.adUnitCode), + hbadaptor: 'prebid', + url: pageUrl, + domain: domain, + placementId: bidReq.params.placementId != undefined ? bidReq.params.placementId : null, + publisherId: bidReq.params.publisherId, + sizes: bidReq.sizes, + params: bidReq.params + }; + var videoMediaType = Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'mediaTypes.video'); + + if (videoMediaType) { + bid.video = { + playerSize: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'mediaTypes.video.playerSize') || null, + streamType: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'mediaTypes.video.context') || null, + playbackMethod: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'params.video.playbackMethod') || null, + maxDuration: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'params.video.maxDuration') || null, + skippable: Object(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"])(bidReq, 'params.video.skippable') || null + }; + bid.mediaType = 'video'; + } + + payload['x-ut-hb-params'].push(bid); + }); + return { + method: 'POST', + url: reqUrl, + withCredentials: true, + data: JSON.stringify(payload) + }; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var bids = []; + var body = serverResponse.body; + + if (body && Array.isArray(body) && body.length > 0) { + body.forEach(function (bidRes) { + if (bidRes.ad && bidRes.cpm > 0) { + var bid = { + requestId: bidRes.bidRequestId, + cpm: bidRes.cpm, + width: bidRes.width, + height: bidRes.height, + creativeId: bidRes.adId, + currency: bidRes.currency, + netRevenue: bidRes.netRevenue, + ttl: bidRes.ttl || 360 + }; + + if (bidRes.mediaType && bidRes.mediaType === 'video') { + bid.vastXml = bidRes.ad; + bid.mediaType = bidRes.mediaType; + } else { + bid.ad = bidRes.ad; + } + + bids.push(bid); + } + }); + } + + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent, usPrivacy) { + var syncs = []; + var gdprParams = getGdprQueryParams(gdprConsent); + var iframePrivacyParams = ''; + var pixelPrivacyParams = ''; + + if (gdprParams) { + iframePrivacyParams += "?".concat(gdprParams); + pixelPrivacyParams += "&".concat(gdprParams); + } + + if (usPrivacy) { + if (iframePrivacyParams != '') { + iframePrivacyParams += '&'; + } else { + iframePrivacyParams += '?'; + } + + iframePrivacyParams += "ccpa=".concat(usPrivacy); + pixelPrivacyParams += "&ccpa=".concat(usPrivacy); + } + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: FRAME_USER_SYNC + iframePrivacyParams + }); + } else if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: PIXEL_USER_SYNC_1 + pixelPrivacyParams + }, { + type: 'image', + url: PIXEL_USER_SYNC_2 + pixelPrivacyParams + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[768]); \ No newline at end of file diff --git a/build/dist/unicornBidAdapter.js b/build/dist/unicornBidAdapter.js new file mode 100644 index 00000000000..23902317a50 --- /dev/null +++ b/build/dist/unicornBidAdapter.js @@ -0,0 +1,172 @@ +pbjsChunk([73],{ + +/***/ 770: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(771); + + +/***/ }), + +/***/ 771: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildRequests", function() { return buildRequests; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__ = __webpack_require__(9); + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_3__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'unicorn'; +var UNICORN_ENDPOINT = 'https://ds.uncn.jp/pb/0/bid.json'; +var UNICORN_DEFAULT_CURRENCY = 'JPY'; +var UNICORN_PB_COOKIE_KEY = '__pb_unicorn_aud'; +/** + * Placement ID and Account ID are required. + * @param {BidRequest} bidRequest + * @returns {boolean} + */ + +var isBidRequestValid = function isBidRequestValid(bidRequest) { + return !!bidRequest.adUnitCode && !!bidRequest.params.accountId; +}; +/** + * @param {Array} validBidRequests + * @param {any} bidderRequest + * @returns {ServerRequest} + */ + + +var buildRequests = function buildRequests(validBidRequests, bidderRequest) { + return { + method: 'POST', + url: UNICORN_ENDPOINT, + data: buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) + }; +}; +/** + * Transform BidRequest to OpenRTB-formatted BidRequest Object + * @param {Array} validBidRequests + * @param {any} bidderRequest + * @returns {string} + */ + +function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[UNICORN] buildOpenRtbBidRequestPayload.validBidRequests:', validBidRequests); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[UNICORN] buildOpenRtbBidRequestPayload.bidderRequest:', bidderRequest); + var imp = validBidRequests.map(function (br) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](br.sizes)[0]; + return { + id: br.bidId, + banner: { + w: sizes.split('x')[0], + h: sizes.split('x')[1] + }, + tagid: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](br, 'params.placementId') || br.adUnitCode, + secure: 1, + bidfloor: parseFloat(__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](br, 'params.bidfloorCpm') || 0) + }; + }); + var request = { + id: bidderRequest.auctionId, + at: 1, + imp: imp, + cur: UNICORN_DEFAULT_CURRENCY, + site: { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.mediaId') || '', + publisher: { + id: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.publisherId') || 0 + }, + domain: window.location.hostname, + page: window.location.href, + ref: bidderRequest.refererInfo.referer + }, + device: { + language: navigator.language, + ua: navigator.userAgent + }, + user: { + id: getUid() + }, + bcat: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.bcat') || [], + source: { + ext: { + stype: 'prebid_uncn', + bidder: BIDDER_CODE + } + }, + ext: { + accountId: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](validBidRequests[0], 'params.accountId') + } + }; + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[UNICORN] OpenRTB Formatted Request:', request); + return JSON.stringify(request); +} + +var interpretResponse = function interpretResponse(serverResponse, request) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[UNICORN] interpretResponse.serverResponse:', serverResponse); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[UNICORN] interpretResponse.request:', request); + var res = serverResponse.body; + var bids = []; + + if (res) { + res.seatbid.forEach(function (sb) { + sb.bid.forEach(function (b) { + bids.push({ + requestId: b.impid, + cpm: b.price || 0, + width: b.w, + height: b.h, + ad: b.adm, + ttl: 1000, + creativeId: b.crid, + netRevenue: false, + currency: res.cur + }); + }); + }); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]('[UNICORN] interpretResponse bids:', bids); + return bids; +}; +/** + * Get or Create Uid for First Party Cookie + */ + + +var getUid = function getUid() { + var ck = storage.getCookie(UNICORN_PB_COOKIE_KEY); + + if (ck) { + return JSON.parse(ck)['uid']; + } else { + var newCk = { + uid: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["generateUUID"]() + }; + var expireIn = new Date(Date.now() + 24 * 60 * 60 * 10000).toUTCString(); + storage.setCookie(UNICORN_PB_COOKIE_KEY, JSON.stringify(newCk), expireIn); + return newCk.uid; + } +}; + +var spec = { + code: BIDDER_CODE, + aliases: ['uncn'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[770]); \ No newline at end of file diff --git a/build/dist/unifiedIdSystem.js b/build/dist/unifiedIdSystem.js new file mode 100644 index 00000000000..93de6c5ec59 --- /dev/null +++ b/build/dist/unifiedIdSystem.js @@ -0,0 +1,101 @@ +pbjsChunk([72],{ + +/***/ 772: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(773); + + +/***/ }), + +/***/ 773: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unifiedIdSubmodule", function() { return unifiedIdSubmodule; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hook_js__ = __webpack_require__(13); +/** + * This module adds UnifiedId to the User ID module + * The {@link module:modules/userId} module is required + * @module modules/unifiedIdSystem + * @requires module:modules/userId + */ + + + +var MODULE_NAME = 'unifiedId'; +/** @type {Submodule} */ + +var unifiedIdSubmodule = { + /** + * used to link submodule with config + * @type {string} + */ + name: MODULE_NAME, + + /** + * decode the stored id value for passing to bid requests + * @function + * @param {{TDID:string}} value + * @returns {{tdid:Object}} + */ + decode: function decode(value) { + return value && typeof value['TDID'] === 'string' ? { + 'tdid': value['TDID'] + } : undefined; + }, + + /** + * performs action to obtain id and return a value in the callback's response argument + * @function + * @param {SubmoduleParams} [configParams] + * @returns {IdResponse|undefined} + */ + getId: function getId(configParams) { + if (!configParams || typeof configParams.partner !== 'string' && typeof configParams.url !== 'string') { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('User ID - unifiedId submodule requires either partner or url to be defined'); + return; + } // use protocol relative urls for http or https + + + var url = configParams.url || "https://match.adsrvr.org/track/rid?ttd_pid=".concat(configParams.partner, "&fmt=json"); + + var resp = function resp(callback) { + var callbacks = { + success: function success(response) { + var responseObj; + + if (response) { + try { + responseObj = JSON.parse(response); + } catch (error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](error); + } + } + + callback(responseObj); + }, + error: function error(_error) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("".concat(MODULE_NAME, ": ID fetch encountered an error"), _error); + callback(); + } + }; + Object(__WEBPACK_IMPORTED_MODULE_1__src_ajax_js__["a" /* ajax */])(url, callbacks, undefined, { + method: 'GET', + withCredentials: true + }); + }; + + return { + callback: resp + }; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_hook_js__["e" /* submodule */])('userId', unifiedIdSubmodule); + +/***/ }) + +},[772]); \ No newline at end of file diff --git a/build/dist/unrulyBidAdapter.js b/build/dist/unrulyBidAdapter.js new file mode 100644 index 00000000000..eb59b322f58 --- /dev/null +++ b/build/dist/unrulyBidAdapter.js @@ -0,0 +1,156 @@ +pbjsChunk([71],{ + +/***/ 774: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(775); + + +/***/ }), + +/***/ 775: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "adapter", function() { return adapter; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +function configureUniversalTag(exchangeRenderer) { + if (!exchangeRenderer.config) throw new Error('UnrulyBidAdapter: Missing renderer config.'); + if (!exchangeRenderer.config.siteId) throw new Error('UnrulyBidAdapter: Missing renderer siteId.'); + parent.window.unruly = parent.window.unruly || {}; + parent.window.unruly['native'] = parent.window.unruly['native'] || {}; + parent.window.unruly['native'].siteId = parent.window.unruly['native'].siteId || exchangeRenderer.config.siteId; + parent.window.unruly['native'].supplyMode = 'prebid'; +} + +function configureRendererQueue() { + parent.window.unruly['native'].prebid = parent.window.unruly['native'].prebid || {}; + parent.window.unruly['native'].prebid.uq = parent.window.unruly['native'].prebid.uq || []; +} + +function notifyRenderer(bidResponseBid) { + parent.window.unruly['native'].prebid.uq.push(['render', bidResponseBid]); +} + +var serverResponseToBid = function serverResponseToBid(bid, rendererInstance) { + return { + requestId: bid.bidId, + cpm: bid.cpm, + width: bid.width, + height: bid.height, + vastUrl: bid.vastUrl, + netRevenue: true, + creativeId: bid.bidId, + ttl: 360, + currency: 'USD', + renderer: rendererInstance, + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */] + }; +}; + +var buildPrebidResponseAndInstallRenderer = function buildPrebidResponseAndInstallRenderer(bids) { + return bids.filter(function (serverBid) { + var hasConfig = !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverBid, 'ext.renderer.config'); + var hasSiteId = !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverBid, 'ext.renderer.config.siteId'); + if (!hasConfig) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](new Error('UnrulyBidAdapter: Missing renderer config.')); + if (!hasSiteId) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](new Error('UnrulyBidAdapter: Missing renderer siteId.')); + return hasSiteId; + }).map(function (serverBid) { + var exchangeRenderer = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](serverBid, 'ext.renderer'); + configureUniversalTag(exchangeRenderer); + configureRendererQueue(); + var rendererInstance = __WEBPACK_IMPORTED_MODULE_1__src_Renderer_js__["a" /* Renderer */].install(_extends({}, exchangeRenderer, { + callback: function callback() {} + })); + return { + rendererInstance: rendererInstance, + serverBid: serverBid + }; + }).map(function (_ref) { + var rendererInstance = _ref.rendererInstance, + serverBid = _ref.serverBid; + var prebidBid = serverResponseToBid(serverBid, rendererInstance); + + var rendererConfig = _extends({}, prebidBid, { + renderer: rendererInstance, + adUnitCode: serverBid.ext.adUnitCode + }); + + rendererInstance.setRender(function () { + notifyRenderer(rendererConfig); + }); + return prebidBid; + }); +}; + +var adapter = { + code: 'unruly', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (!bid) return false; + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + return bid.mediaType === 'video' || context === 'outstream'; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var url = 'https://targeting.unrulymedia.com/prebid'; + var method = 'POST'; + var data = { + bidRequests: validBidRequests, + bidderRequest: bidderRequest + }; + var options = { + contentType: 'text/plain' + }; + return { + url: url, + method: method, + data: data, + options: options + }; + }, + interpretResponse: function interpretResponse() { + var serverResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var serverResponseBody = serverResponse.body; + var noBidsResponse = []; + var isInvalidResponse = !serverResponseBody || !serverResponseBody.bids; + return isInvalidResponse ? noBidsResponse : buildPrebidResponseAndInstallRenderer(serverResponseBody.bids); + }, + getUserSyncs: function getUserSyncs(syncOptions, response, gdprConsent) { + var params = ''; + + if (gdprConsent && 'gdprApplies' in gdprConsent) { + if (gdprConsent.gdprApplies && typeof gdprConsent.consentString === 'string') { + params += "?gdpr=1&gdpr_consent=".concat(gdprConsent.consentString); + } else { + params += "?gdpr=0"; + } + } + + var syncs = []; + + if (syncOptions.iframeEnabled) { + syncs.push({ + type: 'iframe', + url: 'https://video.unrulymedia.com/iframes/third-party-iframes.html' + params + }); + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(adapter); + +/***/ }) + +},[774]); \ No newline at end of file diff --git a/build/dist/userId.js b/build/dist/userId.js new file mode 100644 index 00000000000..e1455735148 --- /dev/null +++ b/build/dist/userId.js @@ -0,0 +1,862 @@ +pbjsChunk([4],{ + +/***/ 44: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = createEidsArray; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); + // Each user-id sub-module is expected to mention respective config here + +var USER_IDS_CONFIG = { + // key-name : {config} + // intentIqId + 'intentIqId': { + source: 'intentiq.com', + atype: 1 + }, + // pubCommonId + 'pubcid': { + source: 'pubcid.org', + atype: 1 + }, + // unifiedId + 'tdid': { + source: 'adserver.org', + atype: 1, + getUidExt: function getUidExt() { + return { + rtiPartner: 'TDID' + }; + } + }, + // id5Id + 'id5id': { + source: 'id5-sync.com', + atype: 1 + }, + // parrableId + 'parrableId': { + source: 'parrable.com', + atype: 1, + getValue: function getValue(parrableId) { + if (parrableId.eid) { + return parrableId.eid; + } + + if (parrableId.ccpaOptout) { + // If the EID was suppressed due to a non consenting ccpa optout then + // we still wish to provide this as a reason to the adapters + return ''; + } + + return null; + }, + getUidExt: function getUidExt(parrableId) { + var extendedData = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["pick"](parrableId, ['ibaOptout', 'ccpaOptout']); + + if (Object.keys(extendedData).length) { + return extendedData; + } + } + }, + // identityLink + 'idl_env': { + source: 'liveramp.com', + atype: 1 + }, + // liveIntentId + 'lipb': { + getValue: function getValue(data) { + return data.lipbid; + }, + source: 'liveintent.com', + atype: 1, + getEidExt: function getEidExt(data) { + if (Array.isArray(data.segments) && data.segments.length) { + return { + segments: data.segments + }; + } + } + }, + // britepoolId + 'britepoolid': { + source: 'britepool.com', + atype: 1 + }, + // lotamePanoramaId + lotamePanoramaId: { + source: 'crwdcntrl.net', + atype: 1 + }, + // criteo + 'criteoId': { + source: 'criteo.com', + atype: 1 + }, + // NetId + 'netId': { + source: 'netid.de', + atype: 1 + }, + // sharedid + 'sharedid': { + source: 'sharedid.org', + atype: 1, + getValue: function getValue(data) { + return data.id; + }, + getUidExt: function getUidExt(data) { + return data && data.third ? { + third: data.third + } : undefined; + } + } +}; // this function will create an eid object for the given UserId sub-module + +function createEidObject(userIdData, subModuleKey) { + var conf = USER_IDS_CONFIG[subModuleKey]; + + if (conf && userIdData) { + var eid = {}; + eid.source = conf['source']; + var value = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getValue']) ? conf['getValue'](userIdData) : userIdData; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isStr"](value)) { + var uid = { + id: value, + atype: conf['atype'] + }; // getUidExt + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getUidExt'])) { + var uidExt = conf['getUidExt'](userIdData); + + if (uidExt) { + uid.ext = uidExt; + } + } + + eid.uids = [uid]; // getEidExt + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isFn"](conf['getEidExt'])) { + var eidExt = conf['getEidExt'](userIdData); + + if (eidExt) { + eid.ext = eidExt; + } + } + + return eid; + } + } + + return null; +} // this function will generate eids array for all available IDs in bidRequest.userId +// this function will be called by userId module +// if any adapter does not want any particular userId to be passed then adapter can use Array.filter(e => e.source != 'tdid') + + +function createEidsArray(bidRequestUserId) { + var eids = []; + + for (var subModuleKey in bidRequestUserId) { + if (bidRequestUserId.hasOwnProperty(subModuleKey)) { + var eid = createEidObject(bidRequestUserId[subModuleKey], subModuleKey); + + if (eid) { + eids.push(eid); + } + } + } + + return eids; +} + +/***/ }), + +/***/ 776: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(777); + + +/***/ }), + +/***/ 777: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "coreStorage", function() { return coreStorage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "syncDelay", function() { return syncDelay; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "auctionDelay", function() { return auctionDelay; }); +/* harmony export (immutable) */ __webpack_exports__["setSubmoduleRegistry"] = setSubmoduleRegistry; +/* harmony export (immutable) */ __webpack_exports__["setStoredValue"] = setStoredValue; +/* harmony export (immutable) */ __webpack_exports__["requestBidsHook"] = requestBidsHook; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateGdprEnforcement", function() { return validateGdprEnforcement; }); +/* harmony export (immutable) */ __webpack_exports__["attachIdSystem"] = attachIdSystem; +/* harmony export (immutable) */ __webpack_exports__["init"] = init; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_hook_js__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__eids_js__ = __webpack_require__(44); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_storageManager_js__ = __webpack_require__(9); +/** + * This module adds User ID support to prebid.js + * @module modules/userId + */ + +/** + * @interface Submodule + */ + +/** + * @function + * @summary performs action to obtain id and return a value in the callback's response argument. + * If IdResponse#id is defined, then it will be written to the current active storage. + * If IdResponse#callback is defined, then it'll called at the end of auction. + * It's permissible to return neither, one, or both fields. + * @name Submodule#getId + * @param {SubmoduleParams} configParams + * @param {ConsentData|undefined} consentData + * @param {(Object|undefined)} cacheIdObj + * @return {(IdResponse|undefined)} A response object that contains id and/or callback. + */ + +/** + * @function + * @summary Similar to Submodule#getId, this optional method returns response to for id that exists already. + * If IdResponse#id is defined, then it will be written to the current active storage even if it exists already. + * If IdResponse#callback is defined, then it'll called at the end of auction. + * It's permissible to return neither, one, or both fields. + * @name Submodule#extendId + * @param {SubmoduleParams} configParams + * @param {Object} storedId - existing id, if any + * @return {(IdResponse|function(callback:function))} A response object that contains id and/or callback. + */ + +/** + * @function + * @summary decode a stored value for passing to bid requests + * @name Submodule#decode + * @param {Object|string} value + * @param {SubmoduleParams|undefined} configParams + * @return {(Object|undefined)} + */ + +/** + * @property + * @summary used to link submodule with config + * @name Submodule#name + * @type {string} + */ + +/** + * @typedef {Object} SubmoduleConfig + * @property {string} name - the User ID submodule name (used to link submodule with config) + * @property {(SubmoduleStorage|undefined)} storage - browser storage config + * @property {(SubmoduleParams|undefined)} params - params config for use by the submodule.getId function + * @property {(Object|undefined)} value - if not empty, this value is added to bid requests for access in adapters + */ + +/** + * @typedef {Object} SubmoduleStorage + * @property {string} type - browser storage type (html5 or cookie) + * @property {string} name - key name to use when saving/reading to local storage or cookies + * @property {number} expires - time to live for browser storage in days + * @property {(number|undefined)} refreshInSeconds - if not empty, this value defines the maximum time span in seconds before refreshing user ID stored in browser + */ + +/** + * @typedef {Object} LiveIntentCollectConfig + * @property {(string|undefined)} fpiStorageStrategy - defines whether the first party identifiers that LiveConnect creates and updates are stored in a cookie jar, local storage, or not created at all + * @property {(number|undefined)} fpiExpirationDays - the expiration time of an identifier created and updated by LiveConnect + * @property {(string|undefined)} collectorUrl - defines where the LiveIntentId signal pixels are pointing to + * @property {(string|undefined)} appId - the unique identifier of the application in question + */ + +/** + * @typedef {Object} SubmoduleParams + * @property {(string|undefined)} partner - partner url param value + * @property {(string|undefined)} url - webservice request url used to load Id data + * @property {(string|undefined)} pixelUrl - publisher pixel to extend/modify cookies + * @property {(boolean|undefined)} create - create id if missing. default is true. + * @property {(boolean|undefined)} extend - extend expiration time on each access. default is false. + * @property {(string|undefined)} pid - placement id url param value + * @property {(string|undefined)} publisherId - the unique identifier of the publisher in question + * @property {(string|undefined)} ajaxTimeout - the number of milliseconds a resolution request can take before automatically being terminated + * @property {(array|undefined)} identifiersToResolve - the identifiers from either ls|cookie to be attached to the getId query + * @property {(string|undefined)} providedIdentifierName - defines the name of an identifier that can be found in local storage or in the cookie jar that can be sent along with the getId request. This parameter should be used whenever a customer is able to provide the most stable identifier possible + * @property {(LiveIntentCollectConfig|undefined)} liCollectConfig - the config for LiveIntent's collect requests + */ + +/** + * @typedef {Object} SubmoduleContainer + * @property {Submodule} submodule + * @property {SubmoduleConfig} config + * @property {(Object|undefined)} idObj - cache decoded id value (this is copied to every adUnit bid) + * @property {(function|undefined)} callback - holds reference to submodule.getId() result if it returned a function. Will be set to undefined after callback executes + */ + +/** + * @typedef {Object} ConsentData + * @property {(string|undefined)} consentString + * @property {(Object|undefined)} vendorData + * @property {(boolean|undefined)} gdprApplies + */ + +/** + * @typedef {Object} IdResponse + * @property {(Object|undefined)} id - id data + * @property {(function|undefined)} callback - function that will return an id + */ + + + + + + + + + + +var MODULE_NAME = 'User ID'; +var COOKIE = 'cookie'; +var LOCAL_STORAGE = 'html5'; +var DEFAULT_SYNC_DELAY = 500; +var NO_AUCTION_DELAY = 0; +var coreStorage = Object(__WEBPACK_IMPORTED_MODULE_9__src_storageManager_js__["a" /* getCoreStorageManager */])('userid'); +/** @type {string[]} */ + +var validStorageTypes = []; +/** @type {boolean} */ + +var addedUserIdHook = false; +/** @type {SubmoduleContainer[]} */ + +var submodules = []; +/** @type {SubmoduleContainer[]} */ + +var initializedSubmodules; +/** @type {SubmoduleConfig[]} */ + +var configRegistry = []; +/** @type {Submodule[]} */ + +var submoduleRegistry = []; +/** @type {(number|undefined)} */ + +var timeoutID; +/** @type {(number|undefined)} */ + +var syncDelay; +/** @type {(number|undefined)} */ + +var auctionDelay; +/** @param {Submodule[]} submodules */ + +function setSubmoduleRegistry(submodules) { + submoduleRegistry = submodules; +} +/** + * @param {SubmoduleContainer} submodule + * @param {(Object|string)} value + */ + +function setStoredValue(submodule, value) { + /** + * @type {SubmoduleStorage} + */ + var storage = submodule.config.storage; + var domainOverride = typeof submodule.submodule.domainOverride === 'function' ? submodule.submodule.domainOverride() : null; + + try { + var valueStr = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isPlainObject"](value) ? JSON.stringify(value) : value; + var expiresStr = new Date(Date.now() + storage.expires * (60 * 60 * 24 * 1000)).toUTCString(); + + if (storage.type === COOKIE) { + coreStorage.setCookie(storage.name, valueStr, expiresStr, 'Lax', domainOverride); + + if (typeof storage.refreshInSeconds === 'number') { + coreStorage.setCookie("".concat(storage.name, "_last"), new Date().toUTCString(), expiresStr, 'Lax', domainOverride); + } + } else if (storage.type === LOCAL_STORAGE) { + coreStorage.setDataInLocalStorage("".concat(storage.name, "_exp"), expiresStr); + coreStorage.setDataInLocalStorage(storage.name, encodeURIComponent(valueStr)); + + if (typeof storage.refreshInSeconds === 'number') { + coreStorage.setDataInLocalStorage("".concat(storage.name, "_last"), new Date().toUTCString()); + } + } + } catch (error) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"](error); + } +} +/** + * @param {SubmoduleStorage} storage + * @param {String|undefined} key optional key of the value + * @returns {string} + */ + +function getStoredValue(storage) { + var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + var storedKey = key ? "".concat(storage.name, "_").concat(key) : storage.name; + var storedValue; + + try { + if (storage.type === COOKIE) { + storedValue = coreStorage.getCookie(storedKey); + } else if (storage.type === LOCAL_STORAGE) { + var storedValueExp = coreStorage.getDataFromLocalStorage("".concat(storage.name, "_exp")); // empty string means no expiration set + + if (storedValueExp === '') { + storedValue = coreStorage.getDataFromLocalStorage(storedKey); + } else if (storedValueExp) { + if (new Date(storedValueExp).getTime() - Date.now() > 0) { + storedValue = decodeURIComponent(coreStorage.getDataFromLocalStorage(storedKey)); + } + } + } // support storing a string or a stringified object + + + if (typeof storedValue === 'string' && storedValue.charAt(0) === '{') { + storedValue = JSON.parse(storedValue); + } + } catch (e) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logError"](e); + } + + return storedValue; +} +/** + * test if consent module is present, applies, and is valid for local storage or cookies (purpose 1) + * @param {ConsentData} consentData + * @returns {boolean} + */ + + +function hasGDPRConsent(consentData) { + if (consentData && typeof consentData.gdprApplies === 'boolean' && consentData.gdprApplies) { + if (!consentData.consentString) { + return false; + } + + if (consentData.apiVersion === 1 && __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](consentData, 'vendorData.purposeConsents.1') === false) { + return false; + } + + if (consentData.apiVersion === 2 && __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["deepAccess"](consentData, 'vendorData.purpose.consents.1') === false) { + return false; + } + } + + return true; +} +/** + * @param {SubmoduleContainer[]} submodules + * @param {function} cb - callback for after processing is done. + */ + + +function processSubmoduleCallbacks(submodules, cb) { + var done = cb ? __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["delayExecution"](cb, submodules.length) : function () {}; + submodules.forEach(function (submodule) { + submodule.callback(function callbackCompleted(idObj) { + // if valid, id data should be saved to cookie/html storage + if (idObj) { + if (submodule.config.storage) { + setStoredValue(submodule, idObj); + } // cache decoded value (this is copied to every adUnit bid) + + + submodule.idObj = submodule.submodule.decode(idObj); + } else { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]("".concat(MODULE_NAME, ": ").concat(submodule.submodule.name, " - request id responded with an empty value")); + } + + done(); + }); // clear callback, this prop is used to test if all submodule callbacks are complete below + + submodule.callback = undefined; + }); + clearTimeout(timeoutID); +} +/** + * This function will create a combined object for all subModule Ids + * @param {SubmoduleContainer[]} submodules + */ + + +function getCombinedSubmoduleIds(submodules) { + if (!Array.isArray(submodules) || !submodules.length) { + return {}; + } + + var combinedSubmoduleIds = submodules.filter(function (i) { + return __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isPlainObject"](i.idObj) && Object.keys(i.idObj).length; + }).reduce(function (carry, i) { + Object.keys(i.idObj).forEach(function (key) { + carry[key] = i.idObj[key]; + }); + return carry; + }, {}); + return combinedSubmoduleIds; +} +/** + * @param {AdUnit[]} adUnits + * @param {SubmoduleContainer[]} submodules + */ + + +function addIdDataToAdUnitBids(adUnits, submodules) { + if ([adUnits].some(function (i) { + return !Array.isArray(i) || !i.length; + })) { + return; + } + + var combinedSubmoduleIds = getCombinedSubmoduleIds(submodules); + var combinedSubmoduleIdsAsEids = Object(__WEBPACK_IMPORTED_MODULE_8__eids_js__["a" /* createEidsArray */])(combinedSubmoduleIds); + + if (Object.keys(combinedSubmoduleIds).length) { + adUnits.forEach(function (adUnit) { + adUnit.bids.forEach(function (bid) { + // create a User ID object on the bid, + bid.userId = combinedSubmoduleIds; + bid.userIdAsEids = combinedSubmoduleIdsAsEids; + }); + }); + } +} +/** + * This is a common function that will initalize subModules if not already done and it will also execute subModule callbacks + */ + + +function initializeSubmodulesAndExecuteCallbacks(continueAuction) { + var delayed = false; // initialize submodules only when undefined + + if (typeof initializedSubmodules === 'undefined') { + initializedSubmodules = initSubmodules(submodules, __WEBPACK_IMPORTED_MODULE_5__src_adapterManager_js__["gdprDataHandler"].getConsentData()); + + if (initializedSubmodules.length) { + // list of submodules that have callbacks that need to be executed + var submodulesWithCallbacks = initializedSubmodules.filter(function (item) { + return __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isFn"](item.callback); + }); + + if (submodulesWithCallbacks.length) { + if (continueAuction && auctionDelay > 0) { + // delay auction until ids are available + delayed = true; + var continued = false; + + var continueCallback = function continueCallback() { + if (!continued) { + continued = true; + continueAuction(); + } + }; + + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]("".concat(MODULE_NAME, " - auction delayed by ").concat(auctionDelay, " at most to fetch ids")); + timeoutID = setTimeout(continueCallback, auctionDelay); + processSubmoduleCallbacks(submodulesWithCallbacks, continueCallback); + } else { + // wait for auction complete before processing submodule callbacks + __WEBPACK_IMPORTED_MODULE_2__src_events_js___default.a.on(__WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.AUCTION_END, function auctionEndHandler() { + __WEBPACK_IMPORTED_MODULE_2__src_events_js___default.a.off(__WEBPACK_IMPORTED_MODULE_6__src_constants_json___default.a.EVENTS.AUCTION_END, auctionEndHandler); // when syncDelay is zero, process callbacks now, otherwise delay process with a setTimeout + + if (syncDelay > 0) { + setTimeout(function () { + processSubmoduleCallbacks(submodulesWithCallbacks); + }, syncDelay); + } else { + processSubmoduleCallbacks(submodulesWithCallbacks); + } + }); + } + } + } + } + + if (continueAuction && !delayed) { + continueAuction(); + } +} +/** + * Hook is executed before adapters, but after consentManagement. Consent data is requied because + * this module requires GDPR consent with Purpose #1 to save data locally. + * The two main actions handled by the hook are: + * 1. check gdpr consentData and handle submodule initialization. + * 2. append user id data (loaded from cookied/html or from the getId method) to bids to be accessed in adapters. + * @param {Object} reqBidsConfigObj required; This is the same param that's used in pbjs.requestBids. + * @param {function} fn required; The next function in the chain, used by hook.js + */ + + +function requestBidsHook(fn, reqBidsConfigObj) { + // initialize submodules only when undefined + initializeSubmodulesAndExecuteCallbacks(function () { + // pass available user id data to bid adapters + addIdDataToAdUnitBids(reqBidsConfigObj.adUnits || Object(__WEBPACK_IMPORTED_MODULE_4__src_prebidGlobal_js__["a" /* getGlobal */])().adUnits, initializedSubmodules); // calling fn allows prebid to continue processing + + fn.call(this, reqBidsConfigObj); + }); +} +/** + * This function will be exposed in global-name-space so that userIds stored by Prebid UserId module can be used by external codes as well. + * Simple use case will be passing these UserIds to A9 wrapper solution + */ + +function getUserIds() { + // initialize submodules only when undefined + initializeSubmodulesAndExecuteCallbacks(); + return getCombinedSubmoduleIds(initializedSubmodules); +} +/** + * This function will be exposed in global-name-space so that userIds stored by Prebid UserId module can be used by external codes as well. + * Simple use case will be passing these UserIds to A9 wrapper solution + */ + + +function getUserIdsAsEids() { + // initialize submodules only when undefined + initializeSubmodulesAndExecuteCallbacks(); + return Object(__WEBPACK_IMPORTED_MODULE_8__eids_js__["a" /* createEidsArray */])(getCombinedSubmoduleIds(initializedSubmodules)); +} +/** + * This hook returns updated list of submodules which are allowed to do get user id based on TCF 2 enforcement rules configured + */ + + +var validateGdprEnforcement = Object(__WEBPACK_IMPORTED_MODULE_7__src_hook_js__["b" /* hook */])('sync', function (submodules, consentData) { + return { + userIdModules: submodules, + hasValidated: consentData && consentData.hasValidated + }; +}, 'validateGdprEnforcement'); +/** + * @param {SubmoduleContainer[]} submodules + * @param {ConsentData} consentData + * @returns {SubmoduleContainer[]} initialized submodules + */ + +function initSubmodules(submodules, consentData) { + // gdpr consent with purpose one is required, otherwise exit immediately + var _validateGdprEnforcem = validateGdprEnforcement(submodules, consentData), + userIdModules = _validateGdprEnforcem.userIdModules, + hasValidated = _validateGdprEnforcem.hasValidated; + + if (!hasValidated && !hasGDPRConsent(consentData)) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logWarn"]("".concat(MODULE_NAME, " - gdpr permission not valid for local storage or cookies, exit module")); + return []; + } + + return userIdModules.reduce(function (carry, submodule) { + // There are two submodule configuration types to handle: storage or value + // 1. storage: retrieve user id data from cookie/html storage or with the submodule's getId method + // 2. value: pass directly to bids + if (submodule.config.storage) { + var storedId = getStoredValue(submodule.config.storage); + var response; + var refreshNeeded = false; + + if (typeof submodule.config.storage.refreshInSeconds === 'number') { + var storedDate = new Date(getStoredValue(submodule.config.storage, 'last')); + refreshNeeded = storedDate && Date.now() - storedDate.getTime() > submodule.config.storage.refreshInSeconds * 1000; + } + + if (!storedId || refreshNeeded) { + // No previously saved id. Request one from submodule. + response = submodule.submodule.getId(submodule.config.params, consentData, storedId); + } else if (typeof submodule.submodule.extendId === 'function') { + // If the id exists already, give submodule a chance to decide additional actions that need to be taken + response = submodule.submodule.extendId(submodule.config.params, storedId); + } + + if (__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isPlainObject"](response)) { + if (response.id) { + // A getId/extendId result assumed to be valid user id data, which should be saved to users local storage or cookies + setStoredValue(submodule, response.id); + storedId = response.id; + } + + if (typeof response.callback === 'function') { + // Save async callback to be invoked after auction + submodule.callback = response.callback; + } + } + + if (storedId) { + // cache decoded value (this is copied to every adUnit bid) + submodule.idObj = submodule.submodule.decode(storedId, submodule.config.params); + } + } else if (submodule.config.value) { + // cache decoded value (this is copied to every adUnit bid) + submodule.idObj = submodule.config.value; + } else { + var _response = submodule.submodule.getId(submodule.config.params, consentData, undefined); + + if (__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isPlainObject"](_response)) { + if (typeof _response.callback === 'function') { + submodule.callback = _response.callback; + } + + if (_response.id) { + submodule.idObj = submodule.submodule.decode(_response.id, submodule.config.params); + } + } + } + + carry.push(submodule); + return carry; + }, []); +} +/** + * list of submodule configurations with valid 'storage' or 'value' obj definitions + * * storage config: contains values for storing/retrieving User ID data in browser storage + * * value config: object properties that are copied to bids (without saving to storage) + * @param {SubmoduleConfig[]} configRegistry + * @param {Submodule[]} submoduleRegistry + * @param {string[]} activeStorageTypes + * @returns {SubmoduleConfig[]} + */ + + +function getValidSubmoduleConfigs(configRegistry, submoduleRegistry, activeStorageTypes) { + if (!Array.isArray(configRegistry)) { + return []; + } + + return configRegistry.reduce(function (carry, config) { + // every submodule config obj must contain a valid 'name' + if (!config || __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isEmptyStr"](config.name)) { + return carry; + } // Validate storage config contains 'type' and 'name' properties with non-empty string values + // 'type' must be a value currently enabled in the browser + + + if (config.storage && !__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isEmptyStr"](config.storage.type) && !__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isEmptyStr"](config.storage.name) && activeStorageTypes.indexOf(config.storage.type) !== -1) { + carry.push(config); + } else if (__WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isPlainObject"](config.value)) { + carry.push(config); + } else if (!config.storage && !config.value) { + carry.push(config); + } + + return carry; + }, []); +} +/** + * update submodules by validating against existing configs and storage types + */ + + +function updateSubmodules() { + var configs = getValidSubmoduleConfigs(configRegistry, submoduleRegistry, validStorageTypes); + + if (!configs.length) { + return; + } // do this to avoid reprocessing submodules + + + var addedSubmodules = submoduleRegistry.filter(function (i) { + return !__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default()(submodules, function (j) { + return j.name === i.name; + }); + }); // find submodule and the matching configuration, if found create and append a SubmoduleContainer + + submodules = addedSubmodules.map(function (i) { + var submoduleConfig = __WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default()(configs, function (j) { + return j.name === i.name; + }); + return submoduleConfig ? { + submodule: i, + config: submoduleConfig, + callback: undefined, + idObj: undefined + } : null; + }).filter(function (submodule) { + return submodule !== null; + }); + + if (!addedUserIdHook && submodules.length) { + // priority value 40 will load after consentManagement with a priority of 50 + Object(__WEBPACK_IMPORTED_MODULE_4__src_prebidGlobal_js__["a" /* getGlobal */])().requestBids.before(requestBidsHook, 40); + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]("".concat(MODULE_NAME, " - usersync config updated for ").concat(submodules.length, " submodules")); + addedUserIdHook = true; + } +} +/** + * enable submodule in User ID + * @param {Submodule} submodule + */ + + +function attachIdSystem(submodule) { + if (!__WEBPACK_IMPORTED_MODULE_0_core_js_pure_features_array_find_js___default()(submoduleRegistry, function (i) { + return i.name === submodule.name; + })) { + submoduleRegistry.push(submodule); + updateSubmodules(); + } +} +/** + * test browser support for storage config types (local storage or cookie), initializes submodules but consentManagement is required, + * so a callback is added to fire after the consentManagement module. + * @param {{getConfig:function}} config + */ + +function init(config) { + submodules = []; + configRegistry = []; + addedUserIdHook = false; + initializedSubmodules = undefined; // list of browser enabled storage types + + validStorageTypes = [coreStorage.localStorageIsEnabled() ? LOCAL_STORAGE : null, coreStorage.cookiesAreEnabled() ? COOKIE : null].filter(function (i) { + return i !== null; + }); // exit immediately if opt out cookie or local storage keys exists. + + if (validStorageTypes.indexOf(COOKIE) !== -1 && (coreStorage.getCookie('_pbjs_id_optout') || coreStorage.getCookie('_pubcid_optout'))) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]("".concat(MODULE_NAME, " - opt-out cookie found, exit module")); + return; + } // _pubcid_optout is checked for compatiblility with pubCommonId + + + if (validStorageTypes.indexOf(LOCAL_STORAGE) !== -1 && (coreStorage.getDataFromLocalStorage('_pbjs_id_optout') || coreStorage.getDataFromLocalStorage('_pubcid_optout'))) { + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["logInfo"]("".concat(MODULE_NAME, " - opt-out localStorage found, exit module")); + return; + } // listen for config userSyncs to be set + + + config.getConfig(function (conf) { + // Note: support for 'usersync' was dropped as part of Prebid.js 4.0 + var userSync = conf.userSync; + + if (userSync && userSync.userIds) { + configRegistry = userSync.userIds; + syncDelay = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isNumber"](userSync.syncDelay) ? userSync.syncDelay : DEFAULT_SYNC_DELAY; + auctionDelay = __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["isNumber"](userSync.auctionDelay) ? userSync.auctionDelay : NO_AUCTION_DELAY; + updateSubmodules(); + } + }); // exposing getUserIds function in global-name-space so that userIds stored in Prebid can be used by external codes. + + Object(__WEBPACK_IMPORTED_MODULE_4__src_prebidGlobal_js__["a" /* getGlobal */])().getUserIds = getUserIds; + Object(__WEBPACK_IMPORTED_MODULE_4__src_prebidGlobal_js__["a" /* getGlobal */])().getUserIdsAsEids = getUserIdsAsEids; +} // init config update listener to start the application + +init(__WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */]); +Object(__WEBPACK_IMPORTED_MODULE_7__src_hook_js__["c" /* module */])('userId', attachIdSystem); + +/***/ }) + +},[776]); \ No newline at end of file diff --git a/build/dist/userIdTargeting.js b/build/dist/userIdTargeting.js new file mode 100644 index 00000000000..99dfe741f2d --- /dev/null +++ b/build/dist/userIdTargeting.js @@ -0,0 +1,84 @@ +pbjsChunk([70],{ + +/***/ 778: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(779); + + +/***/ }), + +/***/ 779: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["userIdTargeting"] = userIdTargeting; +/* harmony export (immutable) */ __webpack_exports__["init"] = init; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_prebidGlobal_js__ = __webpack_require__(20); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_events_js__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_events_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_events_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); + + + + + +var MODULE_NAME = 'userIdTargeting'; +var GAM = 'GAM'; +var GAM_KEYS_CONFIG = 'GAM_KEYS'; +function userIdTargeting(userIds, config) { + if (!Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isPlainObject"])(config)) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"])(MODULE_NAME + ': Invalid config found, not sharing userIds externally.'); + return; + } + + var PUB_GAM_KEYS = Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isPlainObject"])(config[GAM_KEYS_CONFIG]) ? config[GAM_KEYS_CONFIG] : {}; + var SHARE_WITH_GAM = Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isBoolean"])(config[GAM]) ? config[GAM] : false; + var GAM_API; + + if (!SHARE_WITH_GAM) { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"])(MODULE_NAME + ': Not enabled for ' + GAM); + } + + if (window.googletag && Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isFn"])(window.googletag.pubads) && Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["hasOwn"])(window.googletag.pubads(), 'setTargeting') && Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isFn"])(window.googletag.pubads().setTargeting)) { + GAM_API = window.googletag.pubads().setTargeting; + } else { + SHARE_WITH_GAM = false; + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"])(MODULE_NAME + ': Could not find googletag.pubads().setTargeting API. Not adding User Ids in targeting.'); + return; + } + + Object.keys(userIds).forEach(function (key) { + if (userIds[key]) { + // PUB_GAM_KEYS: { "tdid": '' } means the publisher does not want to send the tdid to GAM + if (SHARE_WITH_GAM && PUB_GAM_KEYS[key] !== '') { + var uidStr; + + if (Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isStr"])(userIds[key])) { + uidStr = userIds[key]; + } else if (Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["isPlainObject"])(userIds[key])) { + uidStr = JSON.stringify(userIds[key]); + } else { + Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["logInfo"])(MODULE_NAME + ': ' + key + ' User ID is not an object or a string.'); + return; + } + + GAM_API(Object(__WEBPACK_IMPORTED_MODULE_4__src_utils_js__["hasOwn"])(PUB_GAM_KEYS, key) ? PUB_GAM_KEYS[key] : key, [uidStr]); + } + } + }); +} +function init(config) { + __WEBPACK_IMPORTED_MODULE_3__src_events_js___default.a.on(__WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_END, function () { + userIdTargeting(Object(__WEBPACK_IMPORTED_MODULE_1__src_prebidGlobal_js__["a" /* getGlobal */])().getUserIds(), config.getConfig(MODULE_NAME)); + }); +} +init(__WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */]); + +/***/ }) + +},[778]); \ No newline at end of file diff --git a/build/dist/vdoaiBidAdapter.js b/build/dist/vdoaiBidAdapter.js new file mode 100644 index 00000000000..4fd60bfb517 --- /dev/null +++ b/build/dist/vdoaiBidAdapter.js @@ -0,0 +1,141 @@ +pbjsChunk([69],{ + +/***/ 780: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(781); + + +/***/ }), + +/***/ 781: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'vdo.ai'; +var ENDPOINT_URL = 'https://prebid.vdo.ai/auction'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + + /** + * 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.placementId; + }, + + /** + * Make a server request from the list of BidRequests. + * + * @return Array Info describing the request to the server. + * @param validBidRequests + * @param bidderRequest + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (validBidRequests.length === 0) { + return []; + } + + return validBidRequests.map(function (bidRequest) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bidRequest.params.size || bidRequest.sizes)[0]; + var width = sizes.split('x')[0]; + var height = sizes.split('x')[1]; + var payload = { + placementId: bidRequest.params.placementId, + width: width, + height: height, + bidId: bidRequest.bidId, + referer: bidderRequest.refererInfo.referer, + id: bidRequest.auctionId + }; + bidRequest.params.bidFloor && (payload['bidFloor'] = bidRequest.params.bidFloor); + return { + method: 'POST', + url: ENDPOINT_URL, + data: payload + }; + }); + }, + + /** + * Unpack the response from the server into a list of bids. + * + * @param {ServerResponse} 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 = []; + var response = serverResponse.body; + var creativeId = response.adid || 0; // const width = response.w || 0; + + var width = bidRequest.data.width; // const height = response.h || 0; + + var height = bidRequest.data.height; + var cpm = response.price || 0; + response.rWidth = width; + response.rHeight = height; + var adCreative = response.vdoCreative; + + if (width !== 0 && height !== 0 && cpm !== 0 && creativeId !== 0) { + // const dealId = response.dealid || ''; + var currency = response.cur || 'USD'; + var netRevenue = true; // const referrer = bidRequest.data.referer; + + var bidResponse = { + requestId: response.bidId, + cpm: cpm, + width: width, + height: height, + creativeId: creativeId, + // dealId: dealId, + currency: currency, + netRevenue: netRevenue, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'), + // referrer: referrer, + // ad: response.adm + ad: adCreative + }; + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponse) { + var syncUrls = serverResponse[0] && serverResponse[0].body && serverResponse[0].body.cookiesync && serverResponse[0].body.cookiesync.bidder_status; + + if (syncOptions.iframeEnabled && syncUrls && syncUrls.length > 0) { + var prebidSyncUrls = syncUrls.map(function (syncObj) { + return { + url: syncObj.usersync.url, + type: 'iframe' + }; + }); + return prebidSyncUrls; + } + + return []; + }, + onTImeout: function onTImeout(data) {}, + onBidWon: function onBidWon(bid) {}, + onSetTargeting: function onSetTargeting(bid) {} +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[780]); \ No newline at end of file diff --git a/build/dist/viBidAdapter.js b/build/dist/viBidAdapter.js new file mode 100644 index 00000000000..f9daf99216c --- /dev/null +++ b/build/dist/viBidAdapter.js @@ -0,0 +1,454 @@ +pbjsChunk([68],{ + +/***/ 782: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(783); + + +/***/ }), + +/***/ 783: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (immutable) */ __webpack_exports__["get"] = get; +/* harmony export (immutable) */ __webpack_exports__["merge"] = merge; +/* harmony export (immutable) */ __webpack_exports__["ratioToPercentageCeil"] = ratioToPercentageCeil; +/* harmony export (immutable) */ __webpack_exports__["getDocumentHeight"] = getDocumentHeight; +/* harmony export (immutable) */ __webpack_exports__["getOffset"] = getOffset; +/* harmony export (immutable) */ __webpack_exports__["getWindowParents"] = getWindowParents; +/* harmony export (immutable) */ __webpack_exports__["getTopmostReachableWindow"] = getTopmostReachableWindow; +/* harmony export (immutable) */ __webpack_exports__["topDocumentIsReachable"] = topDocumentIsReachable; +/* harmony export (immutable) */ __webpack_exports__["isInsideIframe"] = isInsideIframe; +/* harmony export (immutable) */ __webpack_exports__["isInsideSafeframe"] = isInsideSafeframe; +/* harmony export (immutable) */ __webpack_exports__["isInsideFriendlyIframe"] = isInsideFriendlyIframe; +/* harmony export (immutable) */ __webpack_exports__["getIframeType"] = getIframeType; +/* harmony export (immutable) */ __webpack_exports__["getRectCuts"] = getRectCuts; +/* harmony export (immutable) */ __webpack_exports__["getFrameElements"] = getFrameElements; +/* harmony export (immutable) */ __webpack_exports__["getElementCuts"] = getElementCuts; +/* harmony export (immutable) */ __webpack_exports__["area"] = area; +/* harmony export (immutable) */ __webpack_exports__["getInViewRatio"] = getInViewRatio; +/* harmony export (immutable) */ __webpack_exports__["getInViewRatioInsideTopFrame"] = getInViewRatioInsideTopFrame; +/* harmony export (immutable) */ __webpack_exports__["getMayBecomeVisible"] = getMayBecomeVisible; +/* harmony export (immutable) */ __webpack_exports__["getInViewPercentage"] = getInViewPercentage; +/* harmony export (immutable) */ __webpack_exports__["getOffsetTopDocument"] = getOffsetTopDocument; +/* harmony export (immutable) */ __webpack_exports__["getOffsetTopDocumentPercentage"] = getOffsetTopDocumentPercentage; +/* harmony export (immutable) */ __webpack_exports__["getOffsetToView"] = getOffsetToView; +/* harmony export (immutable) */ __webpack_exports__["getOffsetToViewPercentage"] = getOffsetToViewPercentage; +/* harmony export (immutable) */ __webpack_exports__["getViewabilityDescription"] = getViewabilityDescription; +/* harmony export (immutable) */ __webpack_exports__["mergeArrays"] = mergeArrays; +/* harmony export (immutable) */ __webpack_exports__["documentFocus"] = documentFocus; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; 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"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + +function get(path, obj, notFound) { + path = typeof path === 'string' ? path.split('.') : path; + + while (path.length) { + var _path = path, + _path2 = _slicedToArray(_path, 1), + key = _path2[0]; + + if (!(obj instanceof Object) || !(key in obj)) return notFound; + obj = obj[key]; + path = path.slice(1); + } + + return obj; +} +function merge(a, b) { + var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (a) { + return a; + }; + var res = {}; + + for (var key in a) { + if (key in b) { + res[key] = fn(a[key], b[key]); + } else { + res[key] = a[key]; + } + } + + for (var _key in b) { + if (!(_key in a)) res[_key] = b[_key]; + } + + return res; +} +function ratioToPercentageCeil(x) { + return Math.ceil(x * 100); +} +function getDocumentHeight() { + var curDocument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document; + return Math.max(get('body.clientHeight', curDocument, 0), get('body.scrollHeight', curDocument, 0), get('body.offsetHeight', curDocument, 0), get('documentElement.clientHeight', curDocument, 0), get('documentElement.scrollHeight', curDocument, 0), get('documentElement.offsetHeight', curDocument, 0)); +} +function getOffset(element) { + var rect = element.getBoundingClientRect(); + var elementWindow = getElementWindow(element); + if (!elementWindow) throw new Error('cannot get element window'); + var scrollLeft = elementWindow.pageXOffset || get('documentElement.scrollLeft', document, 0); + var scrollTop = elementWindow.pageYOffset || get('documentElement.scrollTop', document, 0); + return { + top: rect.top + scrollTop, + right: rect.right + scrollLeft, + bottom: rect.bottom + scrollTop, + left: rect.left + scrollLeft + }; +} +var IframeType; + +(function (IframeType) { + IframeType['safeframe'] = 'safeframe'; + IframeType['friendly'] = 'friendly'; + IframeType['nonfriendly'] = 'nonfriendly'; +})(IframeType || (IframeType = {})); + +function getWindowParents() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + var parents = []; + + while (curWindow && curWindow.parent && curWindow !== curWindow.parent) { + parents.push(curWindow.parent); + curWindow = curWindow.parent; + } + + return parents; +} +function getTopmostReachableWindow() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + var parents = getWindowParents(curWindow); + return parents.length ? parents[parents.length - 1] : curWindow; +} +function topDocumentIsReachable() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + if (!isInsideIframe(curWindow)) return true; + var windowParents = getWindowParents(curWindow); + + try { + var topWindow = windowParents[windowParents.length - 1]; + return topWindow === curWindow.top && !!curWindow.top.document; + } catch (e) { + return false; + } +} +function isInsideIframe() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + return curWindow !== curWindow.top; +} +function isInsideSafeframe() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + return !topDocumentIsReachable(curWindow) && !!curWindow.$sf; +} +function isInsideFriendlyIframe() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + return isInsideIframe(curWindow) && topDocumentIsReachable(curWindow); +} +function getIframeType() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + if (!isInsideIframe(curWindow)) return; + if (isInsideSafeframe(curWindow)) return IframeType.safeframe; + if (isInsideFriendlyIframe(curWindow)) return IframeType.friendly; + return IframeType.nonfriendly; +} + +function getElementWindow(element) { + return element.ownerDocument ? element.ownerDocument.defaultView : element.defaultView; +} + +var NO_CUTS = { + top: 0, + right: 0, + bottom: 0, + left: 0 +}; +function getRectCuts(rect, vh, vw) { + var vCuts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : NO_CUTS; + var top = rect.top, + left = rect.left; + var bottom = rect.bottom, + right = rect.right; + top = top + vCuts.top; + left = left + vCuts.left; + vh = vh + vCuts.bottom; + vw = vw + vCuts.right; + return { + bottom: Math.min(0, vh - bottom), + left: Math.min(0, left), + right: Math.min(0, vw - right), + top: Math.min(0, top) + }; +} +function getFrameElements() { + var curWindow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; + var frameElements = []; + + while (curWindow && curWindow.frameElement) { + frameElements.unshift(curWindow.frameElement); + curWindow = curWindow.frameElement.ownerDocument && curWindow.frameElement.ownerDocument.defaultView; + } + + return frameElements; +} +function getElementCuts(element, vCuts) { + var window = getElementWindow(element); + return getRectCuts(element.getBoundingClientRect(), window ? window.innerHeight : 0, window ? window.innerWidth : 0, vCuts); +} +function area(width, height) { + var areaCuts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : NO_CUTS; + var top = areaCuts.top, + right = areaCuts.right, + bottom = areaCuts.bottom, + left = areaCuts.left; + return Math.max(0, (width + left + right) * (height + top + bottom)); +} +function getInViewRatio(element) { + var elements = [].concat(_toConsumableArray(getFrameElements(getElementWindow(element))), [element]); + var vCuts = elements.reduce(function (vCuts, element) { + return getElementCuts(element, vCuts); + }, NO_CUTS); + return area(element.offsetWidth || 1, element.offsetHeight || 1, vCuts) / area(element.offsetWidth || 1, element.offsetHeight || 1); +} +function getInViewRatioInsideTopFrame(element) { + var elements = [].concat(_toConsumableArray(getFrameElements().slice(1)), [element]); + var vCuts = elements.reduce(function (vCuts, element) { + return getElementCuts(element, vCuts); + }, NO_CUTS); + return area(element.offsetWidth, element.offsetHeight, vCuts) / area(element.offsetWidth, element.offsetHeight); +} +function getMayBecomeVisible(element) { + return !isInsideIframe() || !!getInViewRatioInsideTopFrame(element); +} +function getInViewPercentage(element) { + return ratioToPercentageCeil(getInViewRatio(element)); +} +function getOffsetTopDocument(element) { + return [].concat(_toConsumableArray(getFrameElements(getElementWindow(element))), [element]).reduce(function (acc, elem) { + return merge(acc, getOffset(elem), function (a, b) { + return a + b; + }); + }, { + top: 0, + right: 0, + bottom: 0, + left: 0 + }); +} +function getOffsetTopDocumentPercentage(element) { + var elementWindow = getElementWindow(element); + if (!elementWindow) throw new Error('cannot get element window'); + + if (!topDocumentIsReachable(elementWindow)) { + throw new Error("top window isn't reachable"); + } + + var topWindow = getTopmostReachableWindow(elementWindow); + var documentHeight = getDocumentHeight(topWindow.document); + return ratioToPercentageCeil(getOffsetTopDocument(element).top / documentHeight); +} +function getOffsetToView(element) { + var elemWindow = getElementWindow(element); + if (!elemWindow) throw new Error('cannot get element window'); + var topWindow = getTopmostReachableWindow(elemWindow); + + var _getOffsetTopDocument = getOffsetTopDocument(element), + top = _getOffsetTopDocument.top, + bottom = _getOffsetTopDocument.bottom; + + var topWindowHeight = topWindow.innerHeight; + if (bottom < topWindow.scrollY) return bottom - topWindow.scrollY; + + if (top > topWindow.scrollY + topWindowHeight) { + return top - topWindow.scrollY - topWindowHeight; + } + + return 0; +} +function getOffsetToViewPercentage(element) { + return ratioToPercentageCeil(getOffsetToView(element) / getDocumentHeight(getTopmostReachableWindow(getElementWindow(element)).document)); +} +function getViewabilityDescription(element) { + var iframeType; + + try { + if (!element) { + return { + error: 'no element' + }; + } + + iframeType = getIframeType(getElementWindow(element)); + + if (!iframeType || iframeType === IframeType.friendly) { + var inViewPercentage = getInViewPercentage(element); + return { + inView: inViewPercentage, + hidden: !inViewPercentage && !getMayBecomeVisible(element), + offsetTop: getOffsetTopDocumentPercentage(element), + offsetView: getOffsetToViewPercentage(element), + iframeType: iframeType + }; + } + + return { + iframeType: iframeType + }; + } catch (error) { + return { + iframeType: iframeType, + error: error.message + }; + } +} +function mergeArrays(hashFn) { + var seen = {}; + var merged = []; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key2 = 1; _key2 < _len; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + args.forEach(function (sizes) { + sizes.forEach(function (size) { + var key = hashFn(size); + + if (!(key in seen)) { + seen[key] = true; + merged.push(size); + } + }); + }); + return merged; +} +function documentFocus(doc) { + return typeof doc.hasFocus === 'function' ? +doc.hasFocus() : undefined; +} +var spec = { + code: 'vi', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(_ref) { + var adUnitCode = _ref.adUnitCode, + _ref$params = _ref.params; + _ref$params = _ref$params === void 0 ? {} : _ref$params; + var pubId = _ref$params.pubId, + lang = _ref$params.lang, + cat = _ref$params.cat; + return [pubId, lang, cat].every(function (x) { + return typeof x === 'string'; + }); + }, + + /** + * + * @param bidRequests + * @param bidderRequest + * @return { + * {method: string, + * data: { + imps: { + bidId: string, + adUnitCode: string, + sizes: [[number, number]], + pubId: string, + lang: string, + cat: string, + iframeType: string | undefined, + error: string | null, + inView: number, + offsetTop: number, + offsetView: number, + hidden: boolean, + bidFloor: number + }[], + refererInfo: { + referer: string + reachedTop: boolean, + numIframes: number, + stack: string[] + canonicalUrl: string + } + }, + * options: {withCredentials: boolean, contentType: string}, url: string}} + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + return { + method: 'POST', + url: 'https://pb.vi-serve.com/prebid/bid', + data: { + refererInfo: bidderRequest.refererInfo, + imps: bidRequests.map(function (_ref2) { + var bidId = _ref2.bidId, + adUnitCode = _ref2.adUnitCode, + sizes = _ref2.sizes, + params = _ref2.params, + mediaTypes = _ref2.mediaTypes; + var slot = document.getElementById(adUnitCode); + var bannerSizes = get('banner.sizes', mediaTypes); + var playerSize = get('video.playerSize', mediaTypes); + var sizesToMerge = []; + + if (!params.useSizes) { + if (sizes) sizesToMerge.push(sizes); + if (bannerSizes) sizesToMerge.push(bannerSizes); + if (playerSize) sizesToMerge.push(playerSize); + } else if (params.useSizes === 'banner' && bannerSizes) { + sizesToMerge.push(bannerSizes); + } else if (params.useSizes === 'video' && playerSize) { + sizesToMerge.push(playerSize); + } + + return _objectSpread(_objectSpread({ + bidId: bidId, + adUnitCode: adUnitCode, + sizes: mergeArrays.apply(void 0, [function (x) { + return x.join(','); + }].concat(sizesToMerge)) + }, getViewabilityDescription(slot)), params); + }), + focus: documentFocus(document) + }, + options: { + contentType: 'application/json', + withCredentials: true + } + }; + }, + interpretResponse: function interpretResponse(_ref3) { + var body = _ref3.body; + return body; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[782]); \ No newline at end of file diff --git a/build/dist/vidazooBidAdapter.js b/build/dist/vidazooBidAdapter.js new file mode 100644 index 00000000000..556e354e5f9 --- /dev/null +++ b/build/dist/vidazooBidAdapter.js @@ -0,0 +1,298 @@ +pbjsChunk([67],{ + +/***/ 784: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(785); + + +/***/ }), + +/***/ 785: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SUPPORTED_ID_SYSTEMS", function() { return SUPPORTED_ID_SYSTEMS; }); +/* harmony export (immutable) */ __webpack_exports__["createDomain"] = createDomain; +/* harmony export (immutable) */ __webpack_exports__["extractCID"] = extractCID; +/* harmony export (immutable) */ __webpack_exports__["extractPID"] = extractPID; +/* harmony export (immutable) */ __webpack_exports__["extractSubDomain"] = extractSubDomain; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var DEFAULT_SUB_DOMAIN = 'prebid'; +var BIDDER_CODE = 'vidazoo'; +var BIDDER_VERSION = '1.0.0'; +var CURRENCY = 'USD'; +var TTL_SECONDS = 60 * 5; +var INTERNAL_SYNC_TYPE = { + IFRAME: 'iframe', + IMAGE: 'img' +}; +var EXTERNAL_SYNC_TYPE = { + IFRAME: 'iframe', + IMAGE: 'image' +}; +var SUPPORTED_ID_SYSTEMS = { + 'britepoolid': 1, + 'criteoId': 1, + 'digitrustid': 1, + 'id5id': 1, + 'idl_env': 1, + 'lipb': 1, + 'netId': 1, + 'parrableId': 1, + 'pubcid': 1, + 'tdid': 1 +}; +function createDomain() { + var subDomain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SUB_DOMAIN; + return "https://".concat(subDomain, ".cootlogix.com"); +} +function extractCID(params) { + return params.cId || params.CID || params.cID || params.CId || params.cid || params.ciD || params.Cid || params.CiD; +} +function extractPID(params) { + return params.pId || params.PID || params.pID || params.PId || params.pid || params.piD || params.Pid || params.PiD; +} +function extractSubDomain(params) { + return params.subDomain || params.SubDomain || params.Subdomain || params.subdomain || params.SUBDOMAIN || params.subDOMAIN; +} + +function isBidRequestValid(bid) { + var params = bid.params || {}; + return !!(extractCID(params) && extractPID(params)); +} + +function buildRequest(bid, topWindowUrl, sizes, bidderRequest) { + var params = bid.params, + bidId = bid.bidId, + userId = bid.userId, + adUnitCode = bid.adUnitCode; + var bidFloor = params.bidFloor, + ext = params.ext; + var hashUrl = hashCode(topWindowUrl); + var dealId = getNextDealId(hashUrl); + var cId = extractCID(params); + var pId = extractPID(params); + var subDomain = extractSubDomain(params); + var data = { + url: encodeURIComponent(topWindowUrl), + cb: Date.now(), + bidFloor: bidFloor, + bidId: bidId, + adUnitCode: adUnitCode, + publisherId: pId, + sizes: sizes, + dealId: dealId, + bidderVersion: BIDDER_VERSION, + prebidVersion: "4.2.0", + res: "".concat(screen.width, "x").concat(screen.height) + }; + appendUserIdsToRequestPayload(data, userId); + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString) { + data.gdprConsent = bidderRequest.gdprConsent.consentString; + } + + if (bidderRequest.gdprConsent.gdprApplies !== undefined) { + data.gdpr = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; + } + } + + if (bidderRequest.uspConsent) { + data.usPrivacy = bidderRequest.uspConsent; + } + + var dto = { + method: 'POST', + url: "".concat(createDomain(subDomain), "/prebid/multi/").concat(cId), + data: data + }; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](ext, function (value, key) { + dto.data['ext.' + key] = value; + }); + + return dto; +} + +function appendUserIdsToRequestPayload(payloadRef, userIds) { + var key; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](userIds, function (userId, idSystemProviderName) { + if (SUPPORTED_ID_SYSTEMS[idSystemProviderName]) { + key = "uid.".concat(idSystemProviderName); + + switch (idSystemProviderName) { + case 'digitrustid': + payloadRef[key] = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](userId, 'data.id'); + break; + + case 'lipb': + payloadRef[key] = userId.lipbid; + break; + + case 'parrableId': + payloadRef[key] = userId.eid; + break; + + default: + payloadRef[key] = userId; + } + } + }); +} + +function buildRequests(validBidRequests, bidderRequest) { + var topWindowUrl = bidderRequest.refererInfo.referer; + var requests = []; + validBidRequests.forEach(function (validBidRequest) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](validBidRequest.sizes); + var request = buildRequest(validBidRequest, topWindowUrl, sizes, bidderRequest); + requests.push(request); + }); + return requests; +} + +function interpretResponse(serverResponse, request) { + if (!serverResponse || !serverResponse.body) { + return []; + } + + var bidId = request.data.bidId; + var results = serverResponse.body.results; + var output = []; + + try { + results.forEach(function (result) { + var creativeId = result.creativeId, + ad = result.ad, + price = result.price, + exp = result.exp, + width = result.width, + height = result.height, + currency = result.currency; + + if (!ad || !price) { + return; + } + + output.push({ + requestId: bidId, + cpm: price, + width: width, + height: height, + creativeId: creativeId, + currency: currency || CURRENCY, + netRevenue: true, + ttl: exp || TTL_SECONDS, + ad: ad + }); + }); + return output; + } catch (e) { + return []; + } +} + +function getUserSyncs(syncOptions, responses) { + var iframeEnabled = syncOptions.iframeEnabled, + pixelEnabled = syncOptions.pixelEnabled; + + if (iframeEnabled) { + return [{ + type: 'iframe', + url: 'https://static.cootlogix.com/basev/sync/user_sync.html' + }]; + } + + if (pixelEnabled) { + var lookup = {}; + var syncs = []; + responses.forEach(function (response) { + var body = response.body; + var results = body ? body.results || [] : []; + results.forEach(function (result) { + (result.cookies || []).forEach(function (cookie) { + if (cookie.type === INTERNAL_SYNC_TYPE.IMAGE) { + if (pixelEnabled && !lookup[cookie.src]) { + syncs.push({ + type: EXTERNAL_SYNC_TYPE.IMAGE, + url: cookie.src + }); + } + } + }); + }); + }); + return syncs; + } + + return []; +} + +function hashCode(s) { + var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '_'; + var l = s.length; + var h = 0; + var i = 0; + + if (l > 0) { + while (i < l) { + h = (h << 5) - h + s.charCodeAt(i++) | 0; + } + } + + return prefix + h; +} + +function getNextDealId(key) { + try { + var currentValue = Number(getStorageItem(key) || 0); + var nextValue = currentValue + 1; + setStorageItem(key, nextValue); + return nextValue; + } catch (e) { + return 0; + } +} + +function getStorage() { + return window['sessionStorage']; +} + +function getStorageItem(key) { + try { + return getStorage().getItem(key); + } catch (e) { + return null; + } +} + +function setStorageItem(key, value) { + try { + getStorage().setItem(key, String(value)); + } catch (e) {} +} + +var spec = { + code: BIDDER_CODE, + version: BIDDER_VERSION, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[784]); \ No newline at end of file diff --git a/build/dist/videoNowBidAdapter.js b/build/dist/videoNowBidAdapter.js new file mode 100644 index 00000000000..3a6928a5ee5 --- /dev/null +++ b/build/dist/videoNowBidAdapter.js @@ -0,0 +1,239 @@ +pbjsChunk([66],{ + +/***/ 786: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(787); + + +/***/ }), + +/***/ 787: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adloader_js__ = __webpack_require__(39); + + + + +var RTB_URL = 'https://bidder.videonow.ru/prebid'; +var BIDDER_CODE = 'videonow'; +var TTL_SECONDS = 60 * 5; + +function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.pId); +} + +function buildRequest(bid, bidderRequest) { + var refererInfo = bidderRequest.refererInfo; + var ext = bid.ext, + bidId = bid.bidId, + params = bid.params, + code = bid.code, + sizes = bid.sizes; + + var _ref = params || {}, + pId = _ref.pId, + bidFloor = _ref.bidFloor, + cur = _ref.cur, + placementId = _ref.placementId, + rtbUrl = _ref.url; + + var url = rtbUrl || RTB_URL; + url = "".concat(url).concat(~url.indexOf('?') ? '&' : '?', "profile_id=").concat(pId); + var dto = { + method: 'POST', + url: url, + data: { + id: bidId, + cpm: bidFloor, + code: code, + sizes: sizes, + cur: cur || 'RUB', + placementId: placementId, + ref: refererInfo && refererInfo.referer + } + }; + ext && Object.keys(ext).forEach(function (key) { + dto.data["ext_".concat(key)] = ext[key]; + }); + return dto; +} + +function buildRequests(validBidRequests, bidderRequest) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("".concat(BIDDER_CODE, ". buildRequests")); + var requests = []; + validBidRequests.forEach(function (validBidRequest) { + var request = buildRequest(validBidRequest, bidderRequest); + request && requests.push(request); + }); + return requests; +} + +function interpretResponse(serverResponse, bidRequest) { + if (!serverResponse || !serverResponse.body) { + return []; + } + + var _ref2 = bidRequest && bidRequest.data || {}, + bidId = _ref2.id; + + if (!bidId) return []; + var _serverResponse$body = serverResponse.body, + seatbid = _serverResponse$body.seatbid, + cur = _serverResponse$body.cur, + ext = _serverResponse$body.ext; + if (!seatbid || !seatbid.length) return []; + + var _ref3 = ext || {}, + placementId = _ref3.placementId; + + if (!placementId) return []; + var bids = []; + seatbid.forEach(function (sb) { + var bid = sb.bid; + bid && bid.length && bid.forEach(function (b) { + var res = createResponseBid(b, bidId, cur, placementId); + res && bids.push(res); + }); + }); + return bids; +} + +function createResponseBid(bidInfo, bidId, cur, placementId) { + var id = bidInfo.id, + nurl = bidInfo.nurl, + code = bidInfo.code, + price = bidInfo.price, + crid = bidInfo.crid, + ext = bidInfo.ext, + ttl = bidInfo.ttl, + netRevenue = bidInfo.netRevenue, + w = bidInfo.w, + h = bidInfo.h, + adm = bidInfo.adm; + + if (!id || !price || !adm) { + return null; + } + + var _ref4 = ext || {}, + initPath = _ref4.init, + module = _ref4.module, + format = _ref4.format; + + if (!initPath) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("vnInitModulePath is not defined"); + return null; + } + + var _ref5 = module || {}, + log = _ref5.log, + min = _ref5.min; + + if (!min && !log) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('module\'s paths are not defined'); + return null; + } + + return { + requestId: bidId, + cpm: price, + width: w, + height: h, + creativeId: crid, + currency: cur || 'RUB', + netRevenue: netRevenue !== undefined ? netRevenue : true, + ttl: ttl || TTL_SECONDS, + ad: code, + nurl: nurl, + renderer: { + url: min || log, + render: function render() { + var d = window.document; + var el = placementId && d.getElementById(placementId); + + if (el) { + var pId = 1; // prepare data for vn_init script + + var profileData = { + module: module, + dataXml: adm + }; + format && (profileData.format = format); // add init data for vn_init on the page + + var videonow = window.videonow = window.videonow || {}; + var init = videonow.init = window.videonow.init || {}; + init[pId] = profileData; // add vn_init js on the page + + Object(__WEBPACK_IMPORTED_MODULE_3__src_adloader_js__["a" /* loadExternalScript */])("".concat(initPath).concat(~initPath.indexOf('?') ? '&' : '?', "profileId=").concat(pId), 'outstream'); + } else { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]("bidAdapter ".concat(BIDDER_CODE, ": ").concat(placementId, " not found")); + } + } + } + }; +} + +function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + if (!serverResponses || !serverResponses.length) return syncs; + serverResponses.forEach(function (response) { + var _ref6 = response && response.body || {}, + ext = _ref6.ext; + + var _ref7 = ext || {}, + pixels = _ref7.pixels, + iframes = _ref7.iframes; + + if (syncOptions.iframeEnabled && iframes && iframes.length) { + iframes.forEach(function (i) { + return syncs.push({ + type: 'iframe', + url: i + }); + }); + } + + if (syncOptions.pixelEnabled && pixels && pixels.length) { + pixels.forEach(function (p) { + return syncs.push({ + type: 'image', + url: p + }); + }); + } + }); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logInfo"]("".concat(BIDDER_CODE, " getUserSyncs() syncs=").concat(syncs.length)); + return syncs; +} + +function onBidWon(bid) { + var _ref8 = bid || {}, + nurl = _ref8.nurl; + + if (nurl) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["replaceAuctionPrice"](nurl, bid.cpm)); + } +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs, + onBidWon: onBidWon +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[786]); \ No newline at end of file diff --git a/build/dist/videofyBidAdapter.js b/build/dist/videofyBidAdapter.js new file mode 100644 index 00000000000..b649d56a3bd --- /dev/null +++ b/build/dist/videofyBidAdapter.js @@ -0,0 +1,372 @@ +pbjsChunk([65],{ + +/***/ 788: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(789); + + +/***/ }), + +/***/ 789: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_utils_js__ = __webpack_require__(0); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + +var BIDDER_CODE = 'videofy'; +var TTL = 600; + +function avRenderer(bid) { + bid.renderer.push(function () { + var eventCallback = bid && bid.renderer && bid.renderer.handleVideoEvent ? bid.renderer.handleVideoEvent : null; + window.aniviewRenderer.renderAd({ + id: bid.adUnitCode + '_' + bid.adId, + debug: window.location.href.indexOf('pbjsDebug') >= 0, + placement: bid.adUnitCode, + width: bid.width, + height: bid.height, + vastUrl: bid.vastUrl, + vastXml: bid.vastXml, + config: bid.params[0].rendererConfig, + eventsCallback: eventCallback, + bid: bid + }); + }); +} + +function newRenderer(bidRequest) { + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + url: 'https://player.srv-mars.com/script/6.1/prebidRenderer.js', + config: {}, + loaded: false + }); + + try { + renderer.setRender(avRenderer); + } catch (err) {} + + return renderer; +} + +function isBidRequestValid(bid) { + if (!bid.params || !bid.params.AV_PUBLISHERID || !bid.params.AV_CHANNELID) { + return false; + } + + return true; +} + +var irc = 0; + +function buildRequests(validBidRequests, bidderRequest) { + var bidRequests = []; + + for (var i = 0; i < validBidRequests.length; i++) { + var bidRequest = validBidRequests[i]; + var sizes = [[640, 480]]; + + if (bidRequest.mediaTypes && bidRequest.mediaTypes.video && bidRequest.mediaTypes.video.playerSize) { + sizes = bidRequest.mediaTypes.video.playerSize; + } else { + if (bidRequest.sizes) { + sizes = bidRequest.sizes; + } + } + + if (sizes.length === 2 && typeof sizes[0] === 'number') { + sizes = [[sizes[0], sizes[1]]]; + } + + for (var j = 0; j < sizes.length; j++) { + var size = sizes[j]; + var playerWidth = void 0; + var playerHeight = void 0; + + if (size && size.length == 2) { + playerWidth = size[0]; + playerHeight = size[1]; + } else { + playerWidth = 640; + playerHeight = 480; + } + + var s2sParams = {}; + + for (var attrname in bidRequest.params) { + if (bidRequest.params.hasOwnProperty(attrname) && attrname.indexOf('AV_') == 0) { + s2sParams[attrname] = bidRequest.params[attrname]; + } + } + + ; + + if (s2sParams.AV_APPPKGNAME && !s2sParams.AV_URL) { + s2sParams.AV_URL = s2sParams.AV_APPPKGNAME; + } + + if (!s2sParams.AV_IDFA && !s2sParams.AV_URL) { + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + s2sParams.AV_URL = bidderRequest.refererInfo.referer; + } else { + s2sParams.AV_URL = window.location.href; + } + } + + if (s2sParams.AV_IDFA && !s2sParams.AV_AID) { + s2sParams.AV_AID = s2sParams.AV_IDFA; + } + + if (s2sParams.AV_AID && !s2sParams.AV_IDFA) { + s2sParams.AV_IDFA = s2sParams.AV_AID; + } + + s2sParams.cb = Math.floor(Math.random() * 999999999); + s2sParams.AV_WIDTH = playerWidth; + s2sParams.AV_HEIGHT = playerHeight; + s2sParams.bidWidth = playerWidth; + s2sParams.bidHeight = playerHeight; + s2sParams.bidId = bidRequest.bidId; + s2sParams.pbjs = 1; + s2sParams.tgt = 10; + s2sParams.s2s = '1'; + s2sParams.irc = irc; + irc++; + s2sParams.wpm = 1; + + if (bidderRequest && bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.gdprApplies) { + s2sParams.AV_GDPR = 1; + s2sParams.AV_CONSENT = bidderRequest.gdprConsent.consentString; + } + } + + if (bidderRequest && bidderRequest.uspConsent) { + s2sParams.AV_CCPA = bidderRequest.uspConsent; + } + + var serverDomain = bidRequest.params && bidRequest.params.serverDomain ? bidRequest.params.serverDomain : 'servx.srv-mars.com'; + var servingUrl = 'https://' + serverDomain + '/api/adserver/vast3/'; + bidRequests.push({ + method: 'GET', + url: servingUrl, + data: s2sParams, + bidRequest: bidRequest + }); + } + } + + return bidRequests; +} + +function getCpmData(xml) { + var ret = { + cpm: 0, + currency: 'USD' + }; + + if (xml) { + var ext = xml.getElementsByTagName('Extensions'); + + if (ext && ext.length > 0) { + ext = ext[0].getElementsByTagName('Extension'); + + if (ext && ext.length > 0) { + for (var i = 0; i < ext.length; i++) { + if (ext[i].getAttribute('type') == 'ANIVIEW') { + var price = ext[i].getElementsByTagName('Cpm'); + + if (price && price.length == 1) { + ret.cpm = price[0].textContent; + } + + break; + } + } + } + } + } + + return ret; +} + +function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + + if (serverResponse && serverResponse.body) { + if (serverResponse.error) { + return bidResponses; + } else { + try { + var bidResponse = {}; + + if (bidRequest && bidRequest.data && bidRequest.data.bidId && bidRequest.data.bidId !== '') { + var xmlStr = serverResponse.body; + var xml = new window.DOMParser().parseFromString(xmlStr, 'text/xml'); + + if (xml && xml.getElementsByTagName('parsererror').length == 0) { + var cpmData = getCpmData(xml); + + if (cpmData && cpmData.cpm > 0) { + bidResponse.requestId = bidRequest.data.bidId; + bidResponse.bidderCode = BIDDER_CODE; + bidResponse.ad = ''; + bidResponse.cpm = cpmData.cpm; + bidResponse.width = bidRequest.data.AV_WIDTH; + bidResponse.height = bidRequest.data.AV_HEIGHT; + bidResponse.ttl = TTL; + bidResponse.creativeId = xml.getElementsByTagName('Ad') && xml.getElementsByTagName('Ad')[0] && xml.getElementsByTagName('Ad')[0].getAttribute('id') ? xml.getElementsByTagName('Ad')[0].getAttribute('id') : 'creativeId'; + bidResponse.currency = cpmData.currency; + bidResponse.netRevenue = true; + var blob = new Blob([xmlStr], { + type: 'application/xml' + }); + bidResponse.vastUrl = window.URL.createObjectURL(blob); + bidResponse.vastXml = xmlStr; + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["d" /* VIDEO */]; + + if (bidRequest.bidRequest && bidRequest.bidRequest.mediaTypes && bidRequest.bidRequest.mediaTypes.video && bidRequest.bidRequest.mediaTypes.video.context === 'outstream') { + bidResponse.renderer = newRenderer(bidRequest); + } + + bidResponses.push(bidResponse); + } + } else {} + } else {} + } catch (e) {} + } + } else {} + + return bidResponses; +} + +function getSyncData(xml, options) { + var ret = []; + + if (xml) { + var ext = xml.getElementsByTagName('Extensions'); + + if (ext && ext.length > 0) { + ext = ext[0].getElementsByTagName('Extension'); + + if (ext && ext.length > 0) { + for (var i = 0; i < ext.length; i++) { + if (ext[i].getAttribute('type') == 'ANIVIEW') { + var syncs = ext[i].getElementsByTagName('AdServingSync'); + + if (syncs && syncs.length == 1) { + try { + var data = JSON.parse(syncs[0].textContent); + + if (data && data.trackers && data.trackers.length) { + data = data.trackers; + + for (var j = 0; j < data.length; j++) { + if (_typeof(data[j]) === 'object' && typeof data[j].url === 'string' && data[j].e === 'inventory') { + if (data[j].t == 1 && options.pixelEnabled) { + ret.push({ + url: data[j].url, + type: 'image' + }); + } else { + if (data[j].t == 3 && options.iframeEnabled) { + ret.push({ + url: data[j].url, + type: 'iframe' + }); + } + } + } + } + } + } catch (e) {} + } + + break; + } + } + } + } + } + + return ret; +} + +function getUserSyncs(syncOptions, serverResponses) { + if (serverResponses && serverResponses[0] && serverResponses[0].body) { + if (serverResponses.error) { + return []; + } else { + try { + var xmlStr = serverResponses[0].body; + var xml = new window.DOMParser().parseFromString(xmlStr, 'text/xml'); + + if (xml && xml.getElementsByTagName('parsererror').length == 0) { + var syncData = getSyncData(xml, syncOptions); + return syncData; + } + } catch (e) {} + } + } +} + +function onBidWon(bid) { + sendbeacon(bid, 17); +} + +function onTimeout(bid) { + sendbeacon(bid, 19); +} + +function onSetTargeting(bid) { + sendbeacon(bid, 20); +} + +function sendbeacon(bid, type) { + var bidCopy = { + bidder: bid.bidder, + cpm: bid.cpm, + originalCpm: bid.originalCpm, + currency: bid.currency, + originalCurrency: bid.originalCurrency, + timeToRespond: bid.timeToRespond, + statusMessage: bid.statusMessage, + width: bid.width, + height: bid.height, + size: bid.size, + params: bid.params, + status: bid.status, + adserverTargeting: bid.adserverTargeting, + ttl: bid.ttl + }; + var bidString = JSON.stringify(bidCopy); + var encodedBuf = window.btoa(bidString); + __WEBPACK_IMPORTED_MODULE_3__src_utils_js__["triggerPixel"]('https://beacon.videofy.io/notification/rtb/beacon/?bt=' + type + '&bid=hcwqso&hb_j=' + encodedBuf, null); +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_0__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + getUserSyncs: getUserSyncs, + onBidWon: onBidWon, + onTimeout: onTimeout, + onSetTargeting: onSetTargeting +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[788]); \ No newline at end of file diff --git a/build/dist/videoreachBidAdapter.js b/build/dist/videoreachBidAdapter.js new file mode 100644 index 00000000000..66063551da8 --- /dev/null +++ b/build/dist/videoreachBidAdapter.js @@ -0,0 +1,135 @@ +pbjsChunk([64],{ + +/***/ 790: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(791); + + +/***/ }), + +/***/ 791: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); + + +var utils = __webpack_require__(0); + +var BIDDER_CODE = 'videoreach'; +var ENDPOINT_URL = 'https://a.videoreach.com/hb/'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['banner'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.TagId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var data = { + data: validBidRequests.map(function (bid) { + return { + TagId: utils.getValue(bid.params, 'TagId'), + adUnitCode: utils.getBidIdParameter('adUnitCode', bid), + bidId: utils.getBidIdParameter('bidId', bid), + bidderRequestId: utils.getBidIdParameter('bidderRequestId', bid), + auctionId: utils.getBidIdParameter('auctionId', bid), + transactionId: utils.getBidIdParameter('transactionId', bid) + }; + }) + }; + + if (bidderRequest && bidderRequest.refererInfo) { + data.referrer = bidderRequest.refererInfo.referer; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + data.gdpr = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + + return { + method: 'POST', + url: ENDPOINT_URL, + data: JSON.stringify(data) + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var bidResponses = []; + serverResponse = serverResponse.body; + + if (serverResponse.responses) { + serverResponse.responses.forEach(function (bid) { + var bidResponse = { + cpm: bid.cpm, + width: bid.width, + height: bid.height, + currency: bid.currency, + netRevenue: true, + ttl: bid.ttl, + ad: bid.ad, + requestId: bid.bidId, + creativeId: bid.creativeId + }; + bidResponses.push(bidResponse); + }); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent) { + var syncs = []; + + if (responses.length && responses[0].body.responses.length) { + var params = ''; + var gdpr; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + if (typeof gdprConsent.gdprApplies === 'boolean') { + params += 'gdpr=' + gdprConsent.gdprApplies + '&gdpr_consent=' + gdprConsent.consentString; + } else { + params += 'gdpr_consent=' + gdprConsent.consentString; + } + } + + if (syncOptions.pixelEnabled) { + var SyncPixels = responses[0].body.responses[0].sync; + + if (SyncPixels) { + SyncPixels.forEach(function (sync) { + gdpr = params ? (sync.split('?')[1] ? '&' : '?') + params : ''; + syncs.push({ + type: 'image', + url: sync + gdpr + }); + }); + } + } + + if (syncOptions.iframeEnabled) { + var SyncFrame = responses[0].body.responses[0].syncframe; + + if (SyncFrame) { + SyncFrame.forEach(function (sync) { + gdpr = params ? (sync.split('?')[1] ? '&' : '?') + params : ''; + syncs.push({ + type: 'iframe', + url: sync + gdpr + }); + }); + } + } + } + + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[790]); \ No newline at end of file diff --git a/build/dist/viewdeosDXBidAdapter.js b/build/dist/viewdeosDXBidAdapter.js new file mode 100644 index 00000000000..3a0841fa54a --- /dev/null +++ b/build/dist/viewdeosDXBidAdapter.js @@ -0,0 +1,274 @@ +pbjsChunk([63],{ + +/***/ 792: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(793); + + +/***/ }), + +/***/ 793: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_index_js__ = __webpack_require__(92); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_index_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_index_js__); +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 _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var URL = 'https://ghb.sync.viewdeos.com/auction/'; +var OUTSTREAM_SRC = 'https://player.sync.viewdeos.com/outstream-unit/2.01/outstream.min.js'; +var BIDDER_CODE = 'viewdeosDX'; +var OUTSTREAM = 'outstream'; +var DISPLAY = 'display'; +var spec = { + code: BIDDER_CODE, + aliases: ['viewdeos'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.aid'); + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + var syncs = []; + + function addSyncs(bid) { + var uris = bid.cookieURLs; + var types = bid.cookieURLSTypes || []; + + if (Array.isArray(uris)) { + uris.forEach(function (uri, i) { + var type = types[i] || 'image'; + + if (!syncOptions.pixelEnabled && type === 'image' || !syncOptions.iframeEnabled && type === 'iframe') { + return; + } + + syncs.push({ + type: type, + url: uri + }); + }); + } + } + + if (syncOptions.pixelEnabled || syncOptions.iframeEnabled) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverResponses) && serverResponses.forEach(function (response) { + if (response.body) { + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](response.body)) { + response.body.forEach(function (b) { + addSyncs(b); + }); + } else { + addSyncs(response.body); + } + } + }); + } + + return syncs; + }, + + /** + * Make a server request from the list of BidRequests + * @param bidRequests + * @param bidderRequest + */ + buildRequests: function buildRequests(bidRequests, bidderRequest) { + return { + data: bidToTag(bidRequests, bidderRequest), + 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 (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverResponse)) { + return parseRTBResponse(serverResponse, bidderRequest); + } + + serverResponse.forEach(function (serverBidResponse) { + bids = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["flatten"](bids, parseRTBResponse(serverBidResponse, bidderRequest)); + }); + return bids; + } +}; + +function parseRTBResponse(serverResponse, bidderRequest) { + var isInvalidValidResp = !serverResponse || !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](serverResponse.bids); + var bids = []; + + if (isInvalidValidResp) { + var extMessage = serverResponse && serverResponse.ext && serverResponse.ext.message ? ": ".concat(serverResponse.ext.message) : ''; + var errorMessage = "in response for ".concat(bidderRequest.bidderCode, " adapter ").concat(extMessage); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bids; + } + + serverResponse.bids.forEach(function (serverBid) { + var requestId = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_index_js___default()(bidderRequest.bids, function (bidRequest) { + return bidRequest.bidId === serverBid.requestId; + }); + + if (serverBid.cpm !== 0 && requestId !== -1) { + var bidReq = bidderRequest.bids[requestId]; + var bid = createBid(serverBid, getMediaType(bidReq), bidReq.params); + bids.push(bid); + } + }); + return bids; +} + +function bidToTag(bidRequests, bidderRequest) { + var tag = { + domain: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'refererInfo.referer') + }; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.gdprApplies')) { + tag.gdpr = 1; + tag.gdpr_consent = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'gdprConsent.consentString'); + } + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'bidderRequest.uspConsent')) { + tag.us_privacy = bidderRequest.uspConsent; + } + + 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 = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video') ? __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] : DISPLAY; + var index = !_index ? '' : "".concat(_index + 1); + var sizes = bid.sizes ? bid.sizes : mediaType === __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */] ? __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize') : __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.banner.sizes'); + 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, __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](sizes).join()), _ref2; +} +/** + * Prepare all parameters for request + * @param bidderRequest {object} + * @returns {object} + */ + + +function getMediaType(bidderRequest) { + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'mediaTypes.video'); + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'mediaTypes.video.context'); + return !videoMediaType ? DISPLAY : context === OUTSTREAM ? OUTSTREAM : __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; +} +/** + * Configure new bid by response + * @param bidResponse {object} + * @param mediaType {Object} + * @returns {object} + */ + + +function createBid(bidResponse, mediaType, bidderParams) { + 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, bidderParams) + }); + } + + return bid; +} +/** + * Create renderer + * @param requestId + * @returns {*} + */ + + +function newRenderer(requestId, bidderParams) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: requestId, + url: OUTSTREAM_SRC, + config: bidderParams.outstream || {}, + loaded: false + }); + renderer.setRender(outstreamRender); + return renderer; +} +/** + * Initialise outstream + * @param bid + */ + + +function outstreamRender(bid) { + bid.renderer.push(function () { + var opts = _extends({}, bid.renderer.getConfig(), { + width: bid.width, + height: bid.height, + vastUrl: bid.vastUrl, + elId: bid.adUnitCode + }); + + window.VOutstreamAPI.initOutstreams([opts]); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[792]); \ No newline at end of file diff --git a/build/dist/visxBidAdapter.js b/build/dist/visxBidAdapter.js new file mode 100644 index 00000000000..f42bb59390b --- /dev/null +++ b/build/dist/visxBidAdapter.js @@ -0,0 +1,290 @@ +pbjsChunk([62],{ + +/***/ 794: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(795); + + +/***/ }), + +/***/ 795: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); + + + +var BIDDER_CODE = 'visx'; +var ENDPOINT_URL = 'https://t.visx.net/hb'; +var TIME_TO_LIVE = 360; +var DEFAULT_CUR = 'EUR'; +var ADAPTER_SYNC_URL = 'https://t.visx.net/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 not be empty', + emptySeatbid: 'Seatbid array from response has an empty item', + emptyResponse: 'Response is empty', + hasEmptySeatbidArray: 'Response has empty seatbid array', + hasNoArrayOfBids: 'Seatbid from response has no array of bid objects - ', + notAllowedCurrency: 'Currency is not supported - ', + currencyMismatch: 'Currency from the request is not match currency from the response - ' +}; +var currencyWhiteList = ['EUR', 'USD', 'GBP', 'PLN']; +var spec = { + code: BIDDER_CODE, + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.uid; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var auids = []; + var bidsMap = {}; + var slotsMapByUid = {}; + var sizeMap = {}; + var bids = validBidRequests || []; + var currency = __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig("currency.bidderCurrencyDefault.".concat(BIDDER_CODE)) || __WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('currency.adServerCurrency') || DEFAULT_CUR; + var reqId; + var payloadSchain; + var payloadUserId; + + if (currencyWhiteList.indexOf(currency) === -1) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.notAllowedCurrency + currency); + return; + } + + bids.forEach(function (bid) { + reqId = bid.bidderRequestId; + var uid = bid.params.uid, + adUnitCode = bid.adUnitCode, + schain = bid.schain, + userId = bid.userId; + auids.push(uid); + + if (!payloadSchain && schain) { + payloadSchain = schain; + } + + if (!payloadUserId && userId) { + payloadUserId = userId; + } + + var sizesId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](bid.sizes); + + if (!slotsMapByUid[uid]) { + slotsMapByUid[uid] = {}; + } + + var slotsMap = slotsMapByUid[uid]; + + if (!slotsMap[adUnitCode]) { + slotsMap[adUnitCode] = { + adUnitCode: adUnitCode, + bids: [bid], + parents: [] + }; + } else { + slotsMap[adUnitCode].bids.push(bid); + } + + var slot = slotsMap[adUnitCode]; + sizesId.forEach(function (sizeId) { + sizeMap[sizeId] = true; + + if (!bidsMap[uid]) { + bidsMap[uid] = {}; + } + + if (!bidsMap[uid][sizeId]) { + bidsMap[uid][sizeId] = [slot]; + } else { + bidsMap[uid][sizeId].push(slot); + } + + slot.parents.push({ + parent: bidsMap[uid], + key: sizeId, + uid: uid + }); + }); + }); + var payload = { + pt: 'net', + auids: auids.join(','), + sizes: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](sizeMap).join(','), + r: reqId, + cur: currency, + wrapperType: 'Prebid_js', + wrapperVersion: "4.2.0" + }; + + if (payloadSchain) { + payload.schain = JSON.stringify(payloadSchain); + } + + if (payloadUserId) { + if (payloadUserId.tdid) { + payload.tdid = payloadUserId.tdid; + } + + if (payloadUserId.id5id) { + payload.id5 = payloadUserId.id5id; + } + + if (payloadUserId.digitrustid && payloadUserId.digitrustid.data && payloadUserId.digitrustid.data.id) { + payload.dtid = payloadUserId.digitrustid.data.id; + } + } + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + payload.u = bidderRequest.refererInfo.referer; + } + + if (bidderRequest.gdprConsent) { + if (bidderRequest.gdprConsent.consentString) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + } + + payload.gdpr_applies = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? Number(bidderRequest.gdprConsent.gdprApplies) : 1; + } + } + + return { + method: 'GET', + url: ENDPOINT_URL, + data: payload, + bidsMap: bidsMap + }; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + serverResponse = serverResponse && serverResponse.body; + var bidResponses = []; + var bidsWithoutSizeMatching = []; + var bidsMap = bidRequest.bidsMap; + var currency = bidRequest.data.cur; + var errorMessage; + 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, currency, bidResponses, bidsWithoutSizeMatching); + }); + bidsWithoutSizeMatching.forEach(function (serverBid) { + _addBidResponse(serverBid, bidsMap, currency, bidResponses); + }); + } + + if (errorMessage) __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses, gdprConsent) { + if (syncOptions.pixelEnabled) { + var query = []; + + if (gdprConsent) { + if (gdprConsent.consentString) { + query.push('gdpr_consent=' + encodeURIComponent(gdprConsent.consentString)); + } + + query.push('gdpr_applies=' + encodeURIComponent(typeof gdprConsent.gdprApplies === 'boolean' ? Number(gdprConsent.gdprApplies) : 1)); + } + + return [{ + type: 'image', + url: ADAPTER_SYNC_URL + (query.length ? '?' + query.join('&') : '') + }]; + } + } +}; + +function _getBidFromResponse(respItem) { + if (!respItem) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.emptySeatbid); + } else if (!respItem.bid) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.hasNoArrayOfBids + JSON.stringify(respItem)); + } else if (!respItem.bid[0]) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](LOG_ERROR_MESS.noBid); + } + + return respItem && respItem.bid && respItem.bid[0]; +} + +function _addBidResponse(serverBid, bidsMap, currency, bidResponses, bidsWithoutSizeMatching) { + if (!serverBid) return; + var errorMessage; + if (!serverBid.auid) errorMessage = LOG_ERROR_MESS.noAuid + JSON.stringify(serverBid); + if (!serverBid.adm) errorMessage = LOG_ERROR_MESS.noAdm + JSON.stringify(serverBid);else { + var reqCurrency = currency || DEFAULT_CUR; + var awaitingBids = bidsMap[serverBid.auid]; + + if (awaitingBids) { + if (serverBid.cur && serverBid.cur !== reqCurrency) { + errorMessage = LOG_ERROR_MESS.currencyMismatch + reqCurrency + ' - ' + serverBid.cur; + } else { + var sizeId = bidsWithoutSizeMatching ? "".concat(serverBid.w, "x").concat(serverBid.h) : Object.keys(awaitingBids)[0]; + + if (awaitingBids[sizeId]) { + var slot = awaitingBids[sizeId][0]; + var bid = slot.bids.shift(); + bidResponses.push({ + requestId: bid.bidId, + cpm: serverBid.price, + width: serverBid.w, + height: serverBid.h, + creativeId: serverBid.auid, + currency: reqCurrency, + netRevenue: true, + ttl: TIME_TO_LIVE, + ad: serverBid.adm, + dealId: serverBid.dealid + }); + + if (!slot.bids.length) { + slot.parents.forEach(function (_ref) { + var parent = _ref.parent, + key = _ref.key, + uid = _ref.uid; + var index = parent[key].indexOf(slot); + + if (index > -1) { + parent[key].splice(index, 1); + } + + if (!parent[key].length) { + delete parent[key]; + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getKeys"](parent).length) { + delete bidsMap[uid]; + } + } + }); + } + } else { + bidsWithoutSizeMatching && bidsWithoutSizeMatching.push(serverBid); + } + } + } else { + errorMessage = LOG_ERROR_MESS.noPlacementCode + serverBid.auid; + } + } + + if (errorMessage) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[794]); \ No newline at end of file diff --git a/build/dist/vmgBidAdapter.js b/build/dist/vmgBidAdapter.js new file mode 100644 index 00000000000..fc8a08dc408 --- /dev/null +++ b/build/dist/vmgBidAdapter.js @@ -0,0 +1,106 @@ +pbjsChunk([61],{ + +/***/ 796: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(797); + + +/***/ }), + +/***/ 797: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); + +var BIDDER_CODE = 'vmg'; +var ENDPOINT = 'https://predict.vmg.nyc'; +var spec = { + code: BIDDER_CODE, + + /** + * Determines whether or not the given bid request is valid. + * + * @return boolean True if this is a valid bid, and false otherwise. + */ + isBidRequestValid: function isBidRequestValid(bidRequest) { + if (typeof bidRequest !== 'undefined') { + return true; + } else { + 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, bidderRequest) { + var bidRequests = []; + var referer = window.location.href; + + try { + referer = typeof bidderRequest.refererInfo === 'undefined' ? window.top.location.href : bidderRequest.refererInfo.referer; + } catch (e) {} + + validBidRequests.forEach(function (validBidRequest) { + bidRequests.push({ + adUnitCode: validBidRequest.adUnitCode, + referer: referer, + bidId: validBidRequest.bidId + }); + }); + return { + method: 'POST', + url: ENDPOINT, + data: JSON.stringify(bidRequests) + }; + }, + + /** + * 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 = JSON.parse(bidRequest.data); + var bidResponses = []; + + if (typeof serverResponse.body !== 'undefined') { + var deals = serverResponse.body; + validBids.forEach(function (validBid) { + if (typeof deals[validBid.adUnitCode] !== 'undefined') { + var bidResponse = { + requestId: validBid.bidId, + ad: '
', + cpm: 0.01, + width: 0, + height: 0, + dealId: deals[validBid.adUnitCode], + ttl: 300, + creativeId: '1', + netRevenue: '0', + currency: 'USD' + }; + bidResponses.push(bidResponse); + } + }); + } + + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[796]); \ No newline at end of file diff --git a/build/dist/vrtcalBidAdapter.js b/build/dist/vrtcalBidAdapter.js new file mode 100644 index 00000000000..92e60d15707 --- /dev/null +++ b/build/dist/vrtcalBidAdapter.js @@ -0,0 +1,117 @@ +pbjsChunk([60],{ + +/***/ 798: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(799); + + +/***/ }), + +/***/ 799: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_ajax_js__ = __webpack_require__(4); + + + +var spec = { + code: 'vrtcal', + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (bid.bidId == '' || bid.auctionId == '') { + return false; + } else { + return true; + } // No extras params required + + }, + buildRequests: function buildRequests(bidRequests) { + var requests = bidRequests.map(function (bid) { + var params = { + prebidJS: 1, + prebidAdUnitCode: bid.adUnitCode, + id: bid.bidId, + imp: [{ + id: '1', + banner: {}, + bidfloor: 0.75 + }], + site: { + id: 'VRTCAL_FILLED', + name: 'VRTCAL_FILLED', + cat: ['VRTCAL_FILLED'], + domain: decodeURIComponent(window.location.href).replace('https://', '').replace('http://', '').split('/')[0] + }, + device: { + ua: 'VRTCAL_FILLED', + ip: 'VRTCAL_FILLED' + } + }; + + if (typeof bid.mediaTypes !== 'undefined' && typeof bid.mediaTypes.banner !== 'undefined' && typeof bid.mediaTypes.banner.sizes !== 'undefined') { + params.imp[0].banner.w = bid.mediaTypes.banner.sizes[0][0]; + params.imp[0].banner.h = bid.mediaTypes.banner.sizes[0][1]; + } else { + params.imp[0].banner.w = bid.sizes[0][0]; + params.imp[0].banner.h = bid.sizes[0][1]; + } + + return { + method: 'POST', + url: 'https://rtb.vrtcal.com/bidder_prebid.vap?ssp=1804', + data: JSON.stringify(params), + options: { + withCredentials: false, + crossOrigin: true + } + }; + }); + return requests; + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + if (!serverResponse || !serverResponse.body) { + return []; + } + + var bidResponses = []; + var response = serverResponse.body; + + if (response) { + var bidResponse = { + requestId: response.id, + cpm: response.seatbid[0].bid[0].price, + width: response.seatbid[0].bid[0].w, + height: response.seatbid[0].bid[0].h, + creativeId: response.seatbid[0].bid[0].crid, + currency: 'USD', + netRevenue: true, + ttl: 900, + ad: response.seatbid[0].bid[0].adm, + nurl: response.seatbid[0].bid[0].nurl + }; + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + onBidWon: function onBidWon(bid) { + if (!bid.nurl) { + return false; + } + + var winUrl = bid.nurl.replace(/\$\{AUCTION_PRICE\}/, bid.cpm); + Object(__WEBPACK_IMPORTED_MODULE_2__src_ajax_js__["a" /* ajax */])(winUrl, null); + return true; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[798]); \ No newline at end of file diff --git a/build/dist/vubleBidAdapter.js b/build/dist/vubleBidAdapter.js new file mode 100644 index 00000000000..24392b9065c --- /dev/null +++ b/build/dist/vubleBidAdapter.js @@ -0,0 +1,222 @@ +pbjsChunk([59],{ + +/***/ 800: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(801); + + +/***/ }), + +/***/ 801: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__ = __webpack_require__(11); +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +// Vuble Adapter + + + +var BIDDER_CODE = 'vuble'; +var ENVS = ['com', 'net']; +var CURRENCIES = { + com: 'EUR', + net: 'USD' +}; +var TTL = 60; + +var outstreamRender = function outstreamRender(bid) { + bid.renderer.push(function () { + window.ANOutstreamVideo.renderAd({ + sizes: [bid.width, bid.height], + targetId: bid.adUnitCode, + adResponse: bid.adResponse, + rendererOptions: { + showBigPlayButton: false, + showProgressBar: 'bar', + showVolume: false, + allowFullscreen: true, + skippable: false + } + }); + }); +}; + +var createRenderer = function createRenderer(bid, serverResponse) { + var renderer = __WEBPACK_IMPORTED_MODULE_2__src_Renderer_js__["a" /* Renderer */].install({ + id: serverResponse.renderer_id, + url: serverResponse.renderer_url, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + return renderer; +}; + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['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) { + var rawSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.playerSize') || bid.sizes; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](rawSizes) || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](rawSizes).length == 0) { + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context')) { + return false; + } + + if (!__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["contains"](ENVS, bid.params.env)) { + return false; + } + + return !!(bid.params.env && bid.params.pubId && bid.params.zoneId); + }, + + /** + * 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) { + // We take the first size + var rawSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize') || bidRequest.sizes; + var size = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](rawSize)[0].split('x'); // Get the page's url + + var referer = bidderRequest && bidderRequest.refererInfo ? bidderRequest.refererInfo.referer : ''; + + if (bidRequest.params.referrer) { + referer = bidRequest.params.referrer; + } // Get Video Context + + + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.context'); + var url = 'https://player.mediabong.' + bidRequest.params.env + '/prebid/request'; + var data = { + width: size[0], + height: size[1], + pub_id: bidRequest.params.pubId, + zone_id: bidRequest.params.zoneId, + context: context, + floor_price: bidRequest.params.floorPrice ? bidRequest.params.floorPrice : 0, + url: referer, + env: bidRequest.params.env, + bid_id: bidRequest.bidId, + adUnitCode: bidRequest.adUnitCode + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + data.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + gdpr_applies: typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies : true + }; + } + + return { + method: 'POST', + url: url, + data: data + }; + }); + }, + + /** + * 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 responseBody = serverResponse.body; + + if (_typeof(responseBody) !== 'object' || responseBody.status !== 'ok') { + return []; + } + + var bids = []; + var bid = { + requestId: bidRequest.data.bid_id, + cpm: responseBody.cpm, + width: bidRequest.data.width, + height: bidRequest.data.height, + ttl: TTL, + creativeId: responseBody.creativeId, + dealId: responseBody.dealId, + netRevenue: true, + currency: CURRENCIES[bidRequest.data.env], + vastUrl: responseBody.url, + mediaType: 'video' + }; + + if (responseBody.renderer_url) { + var adResponse = { + ad: { + video: { + content: responseBody.content + } + } + }; + + _extends(bid, { + adResponse: adResponse, + adUnitCode: bidRequest.data.adUnitCode, + renderer: createRenderer(bid, responseBody) + }); + } + + bids.push(bid); + return bids; + }, + + /** + * 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) { + if (syncOptions.iframeEnabled) { + if (serverResponses.length > 0) { + var responseBody = serverResponses[0].body; + + if (_typeof(responseBody) !== 'object' || responseBody.iframeSync) { + return [{ + type: 'iframe', + url: responseBody.iframeSync + }]; + } + } + } + + return []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[800]); \ No newline at end of file diff --git a/build/dist/waardexBidAdapter.js b/build/dist/waardexBidAdapter.js new file mode 100644 index 00000000000..2e41bbc2f72 --- /dev/null +++ b/build/dist/waardexBidAdapter.js @@ -0,0 +1,241 @@ +pbjsChunk([58],{ + +/***/ 802: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(803); + + +/***/ }), + +/***/ 803: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_config_js__ = __webpack_require__(3); + + + +var domain = 'hb.justbidit.xyz'; +var httpsPort = 8843; +var path = '/prebid'; +var ENDPOINT = "https://".concat(domain, ":").concat(httpsPort).concat(path); +var BIDDER_CODE = 'waardex'; +/** + * @param {Array} requestSizes + * + * @returns {Array} + * */ + +function transformSizes(requestSizes) { + var sizes = []; + + if (Array.isArray(requestSizes) && !Array.isArray(requestSizes[0])) { + sizes[0] = { + width: parseInt(requestSizes[0], 10) || 0, + height: parseInt(requestSizes[1], 10) || 0 + }; + } else if (Array.isArray(requestSizes) && Array.isArray(requestSizes[0])) { + sizes = requestSizes.map(function (item) { + return { + width: parseInt(item[0], 10) || 0, + height: parseInt(item[1], 10) || 0 + }; + }); + } + + return sizes; +} +/** + * @param {Object} banner + * @param {Array} banner.sizes + * + * @returns {Object} + * */ + + +function createBannerObject(banner) { + return { + sizes: transformSizes(banner.sizes) + }; +} +/** + * @param {Array} validBidRequests + * + * @returns {Object} + * */ + + +function buildBidRequests(validBidRequests) { + return validBidRequests.map(function (validBidRequest) { + var params = validBidRequest.params; + var item = { + bidId: validBidRequest.bidId, + bidfloor: parseFloat(params.bidfloor) || 0, + position: parseInt(params.position) || 1, + instl: parseInt(params.instl) || 0 + }; + + if (validBidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]]) { + item[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]] = createBannerObject(validBidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]]); + } + + return item; + }); +} +/** + * @param {Object} bidderRequest + * @param {String} bidderRequest.userAgent + * @param {String} bidderRequest.refererInfo + * @param {String} bidderRequest.uspConsent + * @param {Object} bidderRequest.gdprConsent + * @param {String} bidderRequest.gdprConsent.consentString + * @param {String} bidderRequest.gdprConsent.gdprApplies + * + * @returns {Object} - { + * ua: string, + * language: string, + * [referer]: string, + * [us_privacy]: string, + * [consent_string]: string, + * [consent_required]: string, + * [coppa]: boolean, + * } + * */ + + +function getCommonBidsData(bidderRequest) { + var payload = { + ua: navigator.userAgent || '', + language: navigator.language && navigator.language.indexOf('-') !== -1 ? navigator.language.split('-')[0] : '' + }; + + if (bidderRequest && bidderRequest.refererInfo) { + payload.referer = encodeURIComponent(bidderRequest.refererInfo.referer); + } + + if (bidderRequest && bidderRequest.uspConsent) { + payload.us_privacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + + payload.coppa = !!__WEBPACK_IMPORTED_MODULE_2__src_config_js__["b" /* config */].getConfig('coppa'); + return payload; +} +/** + * this function checks either bid response is valid or noе + * + * @param {Object} bid + * @param {string} bid.requestId + * @param {number} bid.cpm + * @param {string} bid.creativeId + * @param {number} bid.ttl + * @param {string} bid.currency + * @param {number} bid.width + * @param {number} bid.height + * @param {string} bid.ad + * + * @returns {boolean} + * */ + + +function isBidValid(bid) { + if (!bid.requestId || !bid.cpm || !bid.creativeId || !bid.ttl || !bid.currency) { + return false; + } + + return Boolean(bid.width && bid.height && bid.ad); +} +/** + * @param {Object} serverBid + * + * @returns {Object|null} + * */ + + +function createBid(serverBid) { + var bid = { + requestId: serverBid.id, + cpm: serverBid.price, + currency: 'USD', + width: serverBid.w, + height: serverBid.h, + creativeId: serverBid.crid, + netRevenue: true, + ttl: 3000, + ad: serverBid.adm, + dealId: serverBid.dealid, + meta: { + cid: serverBid.cid, + adomain: serverBid.adomain, + mediaType: serverBid.ext.mediaType + } + }; + return isBidValid(bid) ? bid : null; +} + +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_1__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return Boolean(bid.bidId && bid.params && +bid.params.zoneId); + }, + + /** + * @param {Object[]} validBidRequests - array of valid bid requests + * @param {Object} bidderRequest - an array of valid bid requests + * + * */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var payload = getCommonBidsData(bidderRequest); + payload.bidRequests = buildBidRequests(validBidRequests); + var zoneId = ''; + + if (validBidRequests[0] && validBidRequests[0].params && +validBidRequests[0].params.zoneId) { + zoneId = +validBidRequests[0].params.zoneId; + } + + var url = "".concat(ENDPOINT, "?pubId=").concat(zoneId); + return { + method: 'POST', + url: url, + data: payload + }; + }, + + /** + * Unpack the response from the server into a list of bids. + */ + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bids = []; + serverResponse = serverResponse.body; + + if (serverResponse.seatbid && serverResponse.seatbid[0]) { + var oneSeatBid = serverResponse.seatbid[0]; + oneSeatBid.bid.forEach(function (serverBid) { + var bid = createBid(serverBid); + + if (bid) { + bids.push(bid); + } + }); + } + + return bids; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[802]); \ No newline at end of file diff --git a/build/dist/welectBidAdapter.js b/build/dist/welectBidAdapter.js new file mode 100644 index 00000000000..422dc13cce8 --- /dev/null +++ b/build/dist/welectBidAdapter.js @@ -0,0 +1,112 @@ +pbjsChunk([57],{ + +/***/ 804: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(805); + + +/***/ }), + +/***/ 805: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +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 = 'welect'; +var DEFAULT_DOMAIN = 'www.welect.de'; +var spec = { + code: BIDDER_CODE, + aliases: ['wlt'], + supportedMediaTypes: ['video'], + // 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 __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context') === 'instream' && !!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(validBidRequests) { + return validBidRequests.map(function (bidRequest) { + var rawSizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize') || bidRequest.sizes; + var size = rawSizes[0]; + var domain = bidRequest.params.domain || DEFAULT_DOMAIN; + var url = "https://".concat(domain, "/api/v2/preflight/by_alias/").concat(bidRequest.params.placementId); + var gdprConsent = null; + + if (bidRequest && bidRequest.gdprConsent) { + gdprConsent = { + gdpr_consent: { + gdpr_applies: bidRequest.gdprConsent.gdprApplies, + gdpr_consent: bidRequest.gdprConsent.gdprConsent + } + }; + } + + var data = _objectSpread({ + width: size[0], + height: size[1], + bid_id: bidRequest.bidId + }, gdprConsent); + + return { + method: 'POST', + url: url, + data: data, + options: { + contentType: 'application/json', + withCredentials: false, + crossOrigin: true + } + }; + }); + }, + + /** + * 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 responseBody = serverResponse.body; + + if (_typeof(responseBody) !== 'object' || responseBody.available !== true) { + return []; + } + + var bidResponses = []; + var bidResponse = responseBody.bidResponse; + bidResponses.push(bidResponse); + return bidResponses; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[804]); \ No newline at end of file diff --git a/build/dist/widespaceBidAdapter.js b/build/dist/widespaceBidAdapter.js new file mode 100644 index 00000000000..ecc935bc381 --- /dev/null +++ b/build/dist/widespaceBidAdapter.js @@ -0,0 +1,298 @@ +pbjsChunk([56],{ + +/***/ 806: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(807); + + +/***/ }), + +/***/ 807: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storage", function() { return storage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__ = __webpack_require__(9); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + + + + +var storage = Object(__WEBPACK_IMPORTED_MODULE_5__src_storageManager_js__["b" /* getStorageManager */])(); +var BIDDER_CODE = 'widespace'; +var WS_ADAPTER_VERSION = '2.0.1'; +var LS_KEYS = { + PERF_DATA: 'wsPerfData', + LC_UID: 'wsLcuid', + CUST_DATA: 'wsCustomData' +}; +var preReqTime = 0; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['banner'], + isBidRequestValid: function isBidRequestValid(bid) { + if (bid.params && bid.params.sid) { + return true; + } + + return false; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var serverRequests = []; + var REQUEST_SERVER_URL = getEngineUrl(); + var DEMO_DATA_PARAMS = ['gender', 'country', 'region', 'postal', 'city', 'yob']; + var PERF_DATA = getData(LS_KEYS.PERF_DATA).map(function (perfData) { + return JSON.parse(perfData); + }); + var CUST_DATA = getData(LS_KEYS.CUST_DATA, false)[0]; + var LC_UID = getLcuid(); + var isInHostileIframe = false; + + try { + window.top.location.toString(); + isInHostileIframe = false; + } catch (e) { + isInHostileIframe = true; + } + + validBidRequests.forEach(function (bid, i) { + var data = { + 'screenWidthPx': screen && screen.width, + 'screenHeightPx': screen && screen.height, + 'adSpaceHttpRefUrl': getTopWindowReferrer(), + 'referer': (isInHostileIframe ? window : window.top).location.href.split('#')[0], + 'inFrame': 1, + 'sid': bid.params.sid, + 'lcuid': LC_UID, + 'vol': isInHostileIframe ? '' : visibleOnLoad(document.getElementById(bid.adUnitCode)), + 'gdprCmp': bidderRequest && bidderRequest.gdprConsent ? 1 : 0, + 'hb': '1', + 'hb.cd': CUST_DATA ? encodedParamValue(CUST_DATA) : '', + 'hb.floor': bid.bidfloor || '', + 'hb.spb': i === 0 ? pixelSyncPossibility() : -1, + 'hb.ver': WS_ADAPTER_VERSION, + 'hb.name': "prebidjs-4.2.0", + 'hb.bidId': bid.bidId, + 'hb.sizes': Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseSizesInput"])(bid.sizes).join(','), + 'hb.currency': bid.params.cur || bid.params.currency || '' + }; // Include demo data + + if (bid.params.demo) { + DEMO_DATA_PARAMS.forEach(function (key) { + if (bid.params.demo[key]) { + data[key] = bid.params.demo[key]; + } + }); + } // Include performance data + + + if (PERF_DATA[i]) { + Object.keys(PERF_DATA[i]).forEach(function (perfDataKey) { + data[perfDataKey] = PERF_DATA[i][perfDataKey]; + }); + } // Include connection info if available + + + var CONNECTION = navigator.connection || navigator.webkitConnection; + + if (CONNECTION && CONNECTION.type && CONNECTION.downlinkMax) { + data['netinfo.type'] = CONNECTION.type; + data['netinfo.downlinkMax'] = CONNECTION.downlinkMax; + } // Include debug data when available + + + if (!isInHostileIframe) { + var DEBUG_AD = (__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(window.top.location.hash.split('&'), function (val) { + return __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_includes_js___default()(val, 'WS_DEBUG_FORCEADID'); + }) || '').split('=')[1]; + data.forceAdId = DEBUG_AD; + } // GDPR Consent info + + + if (data.gdprCmp) { + var _bidderRequest$gdprCo = bidderRequest.gdprConsent, + gdprApplies = _bidderRequest$gdprCo.gdprApplies, + consentString = _bidderRequest$gdprCo.consentString, + vendorData = _bidderRequest$gdprCo.vendorData; + var hasGlobalScope = vendorData && vendorData.hasGlobalScope; + data.gdprApplies = gdprApplies ? 1 : gdprApplies === undefined ? '' : 0; + data.gdprConsentData = consentString; + data.gdprHasGlobalScope = hasGlobalScope ? 1 : hasGlobalScope === undefined ? '' : 0; + } // Remove empty params + + + Object.keys(data).forEach(function (key) { + if (data[key] === '' || data[key] === undefined) { + delete data[key]; + } + }); + serverRequests.push({ + method: 'POST', + options: { + contentType: 'application/x-www-form-urlencoded' + }, + url: REQUEST_SERVER_URL, + data: Object(__WEBPACK_IMPORTED_MODULE_2__src_utils_js__["parseQueryStringParameters"])(data) + }); + }); + preReqTime = Date.now(); + return serverRequests; + }, + interpretResponse: function interpretResponse(serverResponse, request) { + var responseTime = Date.now() - preReqTime; + var successBids = serverResponse.body || []; + var bidResponses = []; + successBids.forEach(function (bid) { + storeData({ + 'perf_status': 'OK', + 'perf_reqid': bid.reqId, + 'perf_ms': responseTime + }, "".concat(LS_KEYS.PERF_DATA).concat(bid.reqId)); + + if (bid.status === 'ad') { + bidResponses.push({ + requestId: bid.bidId, + cpm: bid.cpm, + width: bid.width, + height: bid.height, + creativeId: bid.adId, + currency: bid.currency, + netRevenue: Boolean(bid.netRev), + ttl: bid.ttl, + referrer: getTopWindowReferrer(), + ad: bid.code + }); + } + }); + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + var serverResponses = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var userSyncs = []; + userSyncs = serverResponses.reduce(function (allSyncPixels, response) { + if (response && response.body && response.body[0]) { + (response.body[0].syncPixels || []).forEach(function (url) { + allSyncPixels.push({ + type: 'image', + url: url + }); + }); + } + + return allSyncPixels; + }, []); + return userSyncs; + } +}; + +function storeData(data, name) { + var stringify = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var value = stringify ? JSON.stringify(data) : data; + + if (storage.hasLocalStorage()) { + storage.setDataInLocalStorage(name, value); + return true; + } else if (storage.cookiesAreEnabled()) { + var theDate = new Date(); + var expDate = new Date(theDate.setMonth(theDate.getMonth() + 12)).toGMTString(); + storage.setCookie(name, value, expDate); + return true; + } +} + +function getData(name) { + var remove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var data = []; + + if (storage.hasLocalStorage()) { + Object.keys(localStorage).filter(function (key) { + if (key.indexOf(name) > -1) { + data.push(storage.getDataFromLocalStorage(key)); + + if (remove) { + storage.removeDataFromLocalStorage(key); + } + } + }); + } + + if (storage.cookiesAreEnabled()) { + document.cookie.split(';').forEach(function (item) { + var value = item.split('='); + + if (value[0].indexOf(name) > -1) { + data.push(value[1]); + + if (remove) { + storage.setCookie(value[0], '', 'Thu, 01 Jan 1970 00:00:01 GMT'); + } + } + }); + } + + return data; +} + +function pixelSyncPossibility() { + var userSync = __WEBPACK_IMPORTED_MODULE_0__src_config_js__["b" /* config */].getConfig('userSync'); + return userSync && userSync.pixelEnabled && userSync.syncEnabled ? userSync.syncsPerBidder : -1; +} + +function visibleOnLoad(element) { + if (element && element.getBoundingClientRect) { + var topPos = element.getBoundingClientRect().top; + return topPos < screen.height && topPos >= window.top.pageYOffset ? 1 : 0; + } + + ; + return ''; +} + +function getLcuid() { + var lcuid = getData(LS_KEYS.LC_UID, false)[0]; + + if (!lcuid) { + var random = ('4' + new Date().getTime() + String(Math.floor(Math.random() * 1000000000))).substring(0, 18); + storeData(random, LS_KEYS.LC_UID, false); + lcuid = getData(LS_KEYS.LC_UID, false)[0]; + } + + return lcuid; +} + +function encodedParamValue(value) { + var requiredStringify = _typeof(JSON.parse(JSON.stringify(value))) === 'object'; + return encodeURIComponent(requiredStringify ? JSON.stringify(value) : value); +} + +function getEngineUrl() { + var ENGINE_URL = 'https://engine.widespace.com/map/engine/dynadreq'; + return window.wisp && window.wisp.ENGINE_URL ? window.wisp.ENGINE_URL : ENGINE_URL; +} + +function getTopWindowReferrer() { + try { + return window.top.document.referrer; + } catch (e) { + return ''; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[806]); \ No newline at end of file diff --git a/build/dist/windtalkerBidAdapter.js b/build/dist/windtalkerBidAdapter.js new file mode 100644 index 00000000000..13d823966aa --- /dev/null +++ b/build/dist/windtalkerBidAdapter.js @@ -0,0 +1,373 @@ +pbjsChunk([55],{ + +/***/ 808: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(809); + + +/***/ }), + +/***/ 809: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js__); + + + +var NATIVE_DEFAULTS = { + TITLE_LEN: 100, + DESCR_LEN: 200, + SPONSORED_BY_LEN: 50, + IMG_MIN: 150, + ICON_MIN: 50 +}; +var DEFAULT_MIMES = ['video/mp4', 'video/webm', 'application/x-shockwave-flash', 'application/javascript']; +var VIDEO_TARGETING = ['mimes', 'skippable', 'playback_method', 'protocols', 'api']; +var DEFAULT_PROTOCOLS = [2, 3, 5, 6]; +var DEFAULT_APIS = [1, 2]; +var spec = { + code: 'windtalker', + supportedMediaTypes: ['banner', 'native', 'video'], + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.params && bid.params.pubId && bid.params.placementId); + }, + buildRequests: function buildRequests(bidRequests, bidderRequest) { + var request = { + id: bidRequests[0].bidderRequestId, + at: 2, + imp: bidRequests.map(function (slot) { + return impression(slot); + }), + site: site(bidRequests), + app: app(bidRequests), + device: device(bidRequests) + }; + applyGdpr(bidderRequest, request); + return { + method: 'POST', + url: 'https://windtalkerdisplay.hb.adp3.net/', + 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 if (idToImpMap[id]['video']) { + bid.vastUrl = idToBidMap[id].adm; + bid.vastUrl = bid.vastUrl.replace(/\$(%7B|\{)AUCTION_PRICE(%7D|\})/gi, idToBidMap[id].price); + bid.crid = idToBidMap[id].crid; + bid.width = idToImpMap[id].video.w; + bid.height = idToImpMap[id].video.h; + bid.mediaType = 'video'; + } else if (idToImpMap[id]['banner']) { + 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 = idToBidMap[id].w; + bid.height = idToBidMap[id].h; + bid.mediaType = 'banner'; + } + + bids.push(bid); + } + }); + return bids; +} + +function impression(slot) { + return { + id: slot.bidId, + secure: window.location.protocol === 'https:' ? 1 : 0, + 'banner': banner(slot), + 'native': nativeImpression(slot), + 'video': videoImpression(slot), + bidfloor: slot.params.bidFloor || '0.000001', + tagid: slot.params.placementId.toString() + }; +} + +function banner(slot) { + if (slot.mediaType === 'banner' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.banner')) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.banner.sizes'); + + if (sizes.length > 1) { + var format = []; + + for (var f = 0; f < sizes.length; f++) { + format.push({ + 'w': sizes[f][0], + 'h': sizes[f][1] + }); + } + + return { + 'format': format + }; + } else { + return { + w: sizes[0][0], + h: sizes[0][1] + }; + } + } + + return null; +} + +function videoImpression(slot) { + if (slot.mediaType === 'video' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.video')) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.video.playerSize'); + var video = { + w: sizes[0][0], + h: sizes[0][1], + mimes: DEFAULT_MIMES, + protocols: DEFAULT_PROTOCOLS, + api: DEFAULT_APIS + }; + + if (slot.params.video) { + Object.keys(slot.params.video).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).forEach(function (param) { + return video[param] = slot.params.video[param]; + }); + } + + return video; + } + + return null; +} + +function nativeImpression(slot) { + if (slot.mediaType === 'native' || __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](slot, 'mediaTypes.native')) { + 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'; + var appParams = bidderRequest[0].params.app; + + if (!appParams) { + return { + publisher: { + id: pubId.toString(), + domain: window.location.hostname + }, + id: siteId.toString(), + ref: window.top.document.referrer, + page: window.location.href + }; + } + + return null; +} + +function app(bidderRequest) { + var pubId = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.pubId : '0'; + var appParams = bidderRequest[0].params.app; + + if (appParams) { + return { + publisher: { + id: pubId.toString() + }, + id: appParams.id, + name: appParams.name, + bundle: appParams.bundle, + storeurl: appParams.storeUrl, + domain: appParams.domain + }; + } + + return null; +} + +function device(bidderRequest) { + var lat = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.latitude : ''; + var lon = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.longitude : ''; + var ifa = bidderRequest && bidderRequest.length > 0 ? bidderRequest[0].params.ifa : ''; + return { + dnt: __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getDNT"]() ? 1 : 0, + ua: navigator.userAgent, + language: navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage, + w: window.screen.width || window.innerWidth, + h: window.screen.height || window.innerHeigh, + geo: { + lat: lat, + lon: lon + }, + ifa: ifa + }; +} + +function parse(rawResponse) { + try { + if (rawResponse) { + return JSON.parse(rawResponse); + } + } catch (ex) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"]('windtalker.parse', 'ERROR', ex); + } + + return null; +} + +function applyGdpr(bidderRequest, ortbRequest) { + if (bidderRequest && bidderRequest.gdprConsent) { + ortbRequest.regs = { + ext: { + gdpr: bidderRequest.gdprConsent.gdprApplies ? 1 : 0 + } + }; + ortbRequest.user = { + ext: { + consent: bidderRequest.gdprConsent.consentString + } + }; + } +} + +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; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[808]); \ No newline at end of file diff --git a/build/dist/wipesBidAdapter.js b/build/dist/wipesBidAdapter.js new file mode 100644 index 00000000000..6d9f639bb65 --- /dev/null +++ b/build/dist/wipesBidAdapter.js @@ -0,0 +1,98 @@ +pbjsChunk([54],{ + +/***/ 810: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(811); + + +/***/ }), + +/***/ 811: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); + + + + +var BIDDER_CODE = 'wipes'; +var ALIAS_BIDDER_CODE = ['wi']; +var SUPPORTED_MEDIA_TYPES = [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]]; +var ENDPOINT_URL = 'https://adn-srv.reckoner-api.com/v1/prebid'; + +function isBidRequestValid(bid) { + switch (true) { + case !!bid.params.asid: + break; + + default: + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]("isBidRequestValid Error. ".concat(bid.params, ", please check your implementation.")); + return false; + } + + return true; +} + +function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bidRequest) { + var bidId = bidRequest.bidId; + var params = bidRequest.params; + var asid = params.asid; + return { + method: 'GET', + url: ENDPOINT_URL, + data: { + asid: asid, + bid_id: bidId + } + }; + }); +} + +function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + var cpm = response.cpm || 0; + + if (cpm !== 0) { + var netRevenue = response.netRevenue === undefined ? true : response.netRevenue; + var bidResponse = { + requestId: response.bid_id, + cpm: cpm, + width: response.width, + height: response.height, + creativeId: response.video_creative_id || 0, + dealId: response.deal_id, + currency: 'JPY', + netRevenue: netRevenue, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'), + referrer: bidRequest.data.r || '', + mediaType: __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], + ad: response.ad_tag + }; + bidResponses.push(bidResponse); + } + + return bidResponses; +} + +var spec = { + code: BIDDER_CODE, + aliases: ALIAS_BIDDER_CODE, + isBidRequestValid: isBidRequestValid, + buildRequests: buildRequests, + interpretResponse: interpretResponse, + supportedMediaTypes: SUPPORTED_MEDIA_TYPES +}; +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[810]); \ No newline at end of file diff --git a/build/dist/xhbBidAdapter.js b/build/dist/xhbBidAdapter.js new file mode 100644 index 00000000000..5b9ca16c7ad --- /dev/null +++ b/build/dist/xhbBidAdapter.js @@ -0,0 +1,554 @@ +pbjsChunk([53],{ + +/***/ 812: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(813); + + +/***/ }), + +/***/ 813: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__ = __webpack_require__(12); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js__); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + + + +var BIDDER_CODE = 'xhb'; +var URL = 'https://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 = { + code: BIDDER_CODE, + aliases: [], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* 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 = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(bidRequests, hasUserInfo); + var userObj; + + if (userObjBid) { + userObj = {}; + Object.keys(userObjBid.params.user).filter(function (param) { + return __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default()(USER_PARAMS, param); + }).forEach(function (param) { + return userObj[param] = userObjBid.params.user[param]; + }); + } + + var memberIdBid = __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___default()(bidRequests, hasMemberId); + var member = memberIdBid ? parseInt(memberIdBid.params.member, 10) : 0; + var payload = { + tags: _toConsumableArray(tags), + user: userObj, + sdk: { + source: SOURCE, + version: "4.2.0" + } + }; + + if (member > 0) { + payload.member_id = member; + } + + if (bidderRequest && bidderRequest.gdprConsent) { + // note - objects for impbus use underscore instead of camelCase + payload.gdpr_consent = { + consent_string: bidderRequest.gdprConsent.consentString, + consent_required: bidderRequest.gdprConsent.gdprApplies + }; + } + + 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 ".concat(bidderRequest.bidderCode, " adapter"); + + if (serverResponse && serverResponse.error) { + errorMessage += ": ".concat(serverResponse.error); + } + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logError"](errorMessage); + return bids; + } + + if (serverResponse.tags) { + serverResponse.tags.forEach(function (serverBid) { + var rtbBid = getRtbBid(serverBid); + + if (rtbBid) { + if (rtbBid.cpm !== 0 && __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___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: 'https://acdn.adnxs.com/dmp/async_usersync.html' + }]; + } + } +}; + +function newRenderer(adUnitCode, rtbBid) { + var rendererOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_0__src_Renderer_js__["a" /* Renderer */].install({ + id: rtbBid.renderer_id, + url: rtbBid.renderer_url, + config: rendererOptions, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + renderer.setEventHandlers({ + impression: function impression() { + return __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"]('xhb outstream video impression event'); + }, + loaded: function loaded() { + return __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"]('xhb outstream video loaded event'); + }, + ended: function ended() { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logMessage"]('xhb outstream renderer video event'); + document.querySelector("#".concat(adUnitCode)).style.display = 'none'; + } + }); + return renderer; +} +/* Turn keywords parameter into ut-compatible format */ + + +function getKeywords(keywords) { + var arrs = []; + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["_each"](keywords, function (v, k) { + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](v)) { + var values = []; + + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["_each"](v, function (val) { + val = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getValueString"]('keywords.' + k, val); + + if (val) { + values.push(val); + } + }); + + v = values; + } else { + v = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["getValueString"]('keywords.' + k, v); + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["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: 0.00, + creativeId: rtbBid.creative_id, + dealId: 99999999, + 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, + vastImpUrl: rtbBid.notify_url, + ttl: 3600 + }); // This supports Outstream Video + + + if (rtbBid.renderer_url) { + var rendererOptions = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["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[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]]) { + var nativeAd = rtbBid.rtb[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]]; + bid[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* 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, + javascriptTrackers: nativeAd.javascript_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 = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["createTrackPixelHtml"](url); + bid.ad += tracker; + } catch (error) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["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 (!__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](bid.params.keywords)) { + tag.keywords = getKeywords(bid.params.keywords); + } + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */] || __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]))) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]); + + if (bid.nativeParams) { + var nativeRequest = buildNativeRequest(bid.nativeParams); + tag[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]] = { + layouts: [nativeRequest] + }; + } + } + + var videoMediaType = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, "mediaTypes.".concat(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */])); + var context = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](bid, 'mediaTypes.video.context'); + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */] || videoMediaType) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]); + } // instream gets vastUrl, outstream gets vastXml + + + if (bid.mediaType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* 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 __WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___default()(VIDEO_TARGETING, param); + }).forEach(function (param) { + return tag.video[param] = bid.params.video[param]; + }); + } + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](bid.mediaType) && __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isEmpty"](bid.mediaTypes) || bid.mediaType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */] || bid.mediaTypes && bid.mediaTypes[__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]]) { + tag.ad_types.push(__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]); + } + + return tag; +} +/* Turn bid request sizes into ut-compatible format */ + + +function transformSizes(requestSizes) { + var sizes = []; + var sizeObj = {}; + + if (__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](requestSizes) && requestSizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_1__src_utils_js__["isArray"](requestSizes[0])) { + sizeObj.width = parseInt(requestSizes[0], 10); + sizeObj.height = parseInt(requestSizes[1], 10); + sizes.push(sizeObj); + } else if (_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 && __WEBPACK_IMPORTED_MODULE_4_core_js_pure_features_array_find_js___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: ''} or + // {tag: {serverName: '', requiredParams: {...}}} + + Object.keys(params).forEach(function (key) { + // check if one of the forms is used, otherwise + // a mapping wasn't specified so pass the key straight through + var requestKey = NATIVE_MAPPING[key] && NATIVE_MAPPING[key].serverName || NATIVE_MAPPING[key] || key; // 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 !__WEBPACK_IMPORTED_MODULE_5_core_js_pure_features_array_includes_js___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 === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]) { + return __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + } else if (adType === __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]) { + return __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["c" /* NATIVE */]; + } else { + return __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]; + } +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[812]); \ No newline at end of file diff --git a/build/dist/yieldlabBidAdapter.js b/build/dist/yieldlabBidAdapter.js new file mode 100644 index 00000000000..80c3b6a405a --- /dev/null +++ b/build/dist/yieldlabBidAdapter.js @@ -0,0 +1,278 @@ +pbjsChunk([52],{ + +/***/ 814: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(815); + + +/***/ }), + +/***/ 815: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__ = __webpack_require__(11); + + + + + +var ENDPOINT = 'https://ad.yieldlab.net'; +var BIDDER_CODE = 'yieldlab'; +var BID_RESPONSE_TTL_SEC = 300; +var CURRENCY_CODE = 'EUR'; +var OUTSTREAMPLAYER_URL = 'https://ad2.movad.net/dynamic.ad?a=o193092&ma_loadEvent=ma-start-event'; +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */], __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + if (bid && bid.params && bid.params.adslotId && bid.params.supplyId) { + return true; + } + + return false; + }, + + /** + * This method should build correct URL + * @param validBidRequests + * @returns {{method: string, url: string}} + */ + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + var adslotIds = []; + var timestamp = Date.now(); + var query = { + ts: timestamp, + json: true + }; + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["_each"](validBidRequests, function (bid) { + adslotIds.push(bid.params.adslotId); + + if (bid.params.targeting) { + query.t = createTargetingString(bid.params.targeting); + } + + if (bid.userIdAsEids && Array.isArray(bid.userIdAsEids)) { + query.ids = createUserIdString(bid.userIdAsEids); + } + + if (bid.params.customParams && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isPlainObject"](bid.params.customParams)) { + for (var prop in bid.params.customParams) { + query[prop] = bid.params.customParams[prop]; + } + } + }); + + if (bidderRequest) { + if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { + query.pubref = bidderRequest.refererInfo.referer; + } + + if (bidderRequest.gdprConsent) { + query.gdpr = typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' ? bidderRequest.gdprConsent.gdprApplies : true; + + if (query.gdpr) { + query.consent = bidderRequest.gdprConsent.consentString; + } + } + } + + var adslots = adslotIds.join(','); + var queryString = createQueryString(query); + return { + method: 'GET', + url: "".concat(ENDPOINT, "/yp/").concat(adslots, "?").concat(queryString), + validBidRequests: validBidRequests + }; + }, + + /** + * Map ad values and pricing and stuff + * @param serverResponse + * @param originalBidRequest + */ + interpretResponse: function interpretResponse(serverResponse, originalBidRequest) { + var bidResponses = []; + var timestamp = Date.now(); + originalBidRequest.validBidRequests.forEach(function (bidRequest) { + if (!serverResponse.body) { + return; + } + + var matchedBid = __WEBPACK_IMPORTED_MODULE_2_core_js_pure_features_array_find_js___default()(serverResponse.body, function (bidResponse) { + return bidRequest.params.adslotId == bidResponse.id; + }); + + if (matchedBid) { + var primarysize = bidRequest.sizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](bidRequest.sizes[0]) ? bidRequest.sizes : bidRequest.sizes[0]; + var customsize = bidRequest.params.adSize !== undefined ? parseSize(bidRequest.params.adSize) : primarysize; + var extId = bidRequest.params.extId !== undefined ? '&id=' + bidRequest.params.extId : ''; + var adType = matchedBid.adtype !== undefined ? matchedBid.adtype : ''; + var bidResponse = { + requestId: bidRequest.bidId, + cpm: matchedBid.price / 100, + width: customsize[0], + height: customsize[1], + creativeId: '' + matchedBid.id, + dealId: matchedBid['c.dealid'] ? matchedBid['c.dealid'] : matchedBid.pid, + currency: CURRENCY_CODE, + netRevenue: false, + ttl: BID_RESPONSE_TTL_SEC, + referrer: '', + ad: "") + }; + + if (isVideo(bidRequest, adType)) { + var playersize = getPlayerSize(bidRequest); + + if (playersize) { + bidResponse.width = playersize[0]; + bidResponse.height = playersize[1]; + } + + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_3__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.vastUrl = "".concat(ENDPOINT, "/d/").concat(matchedBid.id, "/").concat(bidRequest.params.supplyId, "/").concat(customsize[0], "x").concat(customsize[1], "?ts=").concat(timestamp).concat(extId); + + if (isOutstream(bidRequest)) { + var renderer = __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__["a" /* Renderer */].install({ + id: bidRequest.bidId, + url: OUTSTREAMPLAYER_URL, + loaded: false + }); + renderer.setRender(outstreamRender); + bidResponse.renderer = renderer; + } + } + + bidResponses.push(bidResponse); + } + }); + return bidResponses; + } +}; +/** + * Is this a video format? + * @param {Object} format + * @param {String} adtype + * @returns {Boolean} + */ + +function isVideo(format, adtype) { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](format, 'mediaTypes.video') && adtype.toLowerCase() === 'video'; +} +/** + * Is this an outstream context? + * @param {Object} format + * @returns {Boolean} + */ + + +function isOutstream(format) { + var context = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](format, 'mediaTypes.video.context'); + return context === 'outstream'; +} +/** + * Gets optional player size + * @param {Object} format + * @returns {Array} + */ + + +function getPlayerSize(format) { + var playerSize = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](format, 'mediaTypes.video.playerSize'); + return playerSize && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](playerSize[0]) ? playerSize[0] : playerSize; +} +/** + * Expands a 'WxH' string as a 2-element [W, H] array + * @param {String} size + * @returns {Array} + */ + + +function parseSize(size) { + return size.split('x').map(Number); +} +/** + * Creates a string out of an array of eids with source and uid + * @param {Array} eids + * @returns {String} + */ + + +function createUserIdString(eids) { + var str = []; + + for (var i = 0; i < eids.length; i++) { + str.push(eids[i].source + ':' + eids[i].uids[0].id); + } + + return str.join(','); +} +/** + * Creates a querystring out of an object with key-values + * @param {Object} obj + * @returns {String} + */ + + +function createQueryString(obj) { + var str = []; + + for (var p in obj) { + if (obj.hasOwnProperty(p)) { + str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p])); + } + } + + return str.join('&'); +} +/** + * Creates an unencoded targeting string out of an object with key-values + * @param {Object} obj + * @returns {String} + */ + + +function createTargetingString(obj) { + var str = []; + + for (var p in obj) { + if (obj.hasOwnProperty(p)) { + var key = p; + var val = obj[p]; + str.push(key + '=' + val); + } + } + + return str.join('&'); +} +/** + * Handles an outstream response after the library is loaded + * @param {Object} bid + */ + + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.ma_width = bid.width; + window.ma_height = bid.height; + window.ma_vastUrl = bid.vastUrl; + window.ma_container = bid.adUnitCode; + window.document.dispatchEvent(new Event('ma-start-event')); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[814]); \ No newline at end of file diff --git a/build/dist/yieldliftBidAdapter.js b/build/dist/yieldliftBidAdapter.js new file mode 100644 index 00000000000..a7d3c365707 --- /dev/null +++ b/build/dist/yieldliftBidAdapter.js @@ -0,0 +1,169 @@ +pbjsChunk([51],{ + +/***/ 816: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(817); + + +/***/ }), + +/***/ 817: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); + + + +var ENDPOINT_URL = 'https://x.yieldlift.com/auction'; +var DEFAULT_BID_TTL = 30; +var DEFAULT_CURRENCY = 'USD'; +var DEFAULT_NET_REVENUE = true; +var spec = { + code: 'yieldlift', + aliases: ['yl'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.unitId && typeof bid.params.unitId === 'string' || !!bid.params.networkId && typeof bid.params.networkId === 'string' || !!bid.params.publisherId && typeof bid.params.publisherId === 'string'; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + if (!validBidRequests || !bidderRequest) { + return; + } + + var publisherId = validBidRequests[0].params.publisherId; + var networkId = validBidRequests[0].params.networkId; + var impressions = validBidRequests.map(function (bidRequest) { + return { + id: bidRequest.bidId, + banner: { + format: bidRequest.mediaTypes.banner.sizes.map(function (sizeArr) { + return { + w: sizeArr[0], + h: sizeArr[1] + }; + }) + }, + ext: { + exchange: { + unitId: bidRequest.params.unitId + } + } + }; + }); + var openrtbRequest = { + id: bidderRequest.auctionId, + imp: impressions, + site: { + domain: window.location.hostname, + page: window.location.href, + ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null + }, + ext: { + exchange: { + publisherId: publisherId, + networkId: networkId + } + } + }; // adding schain object + + if (validBidRequests[0].schain) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepSetValue"](openrtbRequest, 'source.ext.schain', validBidRequests[0].schain); + } // Attaching GDPR Consent Params + + + if (bidderRequest.gdprConsent) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepSetValue"](openrtbRequest, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepSetValue"](openrtbRequest, 'regs.ext.gdpr', bidderRequest.gdprConsent.gdprApplies ? 1 : 0); + } // CCPA + + + if (bidderRequest.uspConsent) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepSetValue"](openrtbRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent); + } + + var payloadString = JSON.stringify(openrtbRequest); + return { + method: 'POST', + url: ENDPOINT_URL, + data: payloadString + }; + }, + interpretResponse: function interpretResponse(serverResponse) { + var bidResponses = []; + var response = (serverResponse || {}).body; // response is always one seat (exchange) with (optional) bids for each impression + + if (response && response.seatbid && response.seatbid.length === 1 && response.seatbid[0].bid && response.seatbid[0].bid.length) { + response.seatbid[0].bid.forEach(function (bid) { + bidResponses.push({ + requestId: bid.impid, + cpm: bid.price, + width: bid.w, + height: bid.h, + ad: bid.adm, + ttl: DEFAULT_BID_TTL, + creativeId: bid.crid, + netRevenue: DEFAULT_NET_REVENUE, + currency: DEFAULT_CURRENCY + }); + }); + } else { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('yieldlift.interpretResponse :: no valid responses to interpret'); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions, serverResponses) { + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('yieldlift.getUserSyncs', 'syncOptions', syncOptions, 'serverResponses', serverResponses); + var syncs = []; + + if (!syncOptions.iframeEnabled && !syncOptions.pixelEnabled) { + return syncs; + } + + serverResponses.forEach(function (resp) { + var userSync = __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["deepAccess"](resp, 'body.ext.usersync'); + + if (userSync) { + var syncDetails = []; + Object.keys(userSync).forEach(function (key) { + var value = userSync[key]; + + if (value.syncs && value.syncs.length) { + syncDetails = syncDetails.concat(value.syncs); + } + }); + syncDetails.forEach(function (syncDetails) { + syncs.push({ + type: syncDetails.type === 'iframe' ? 'iframe' : 'image', + url: syncDetails.url + }); + }); + + if (!syncOptions.iframeEnabled) { + syncs = syncs.filter(function (s) { + return s.type !== 'iframe'; + }); + } + + if (!syncOptions.pixelEnabled) { + syncs = syncs.filter(function (s) { + return s.type !== 'image'; + }); + } + } + }); + __WEBPACK_IMPORTED_MODULE_1__src_utils_js__["logInfo"]('yieldlift.getUserSyncs result=%o', syncs); + return syncs; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_0__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[816]); \ No newline at end of file diff --git a/build/dist/yieldmoBidAdapter.js b/build/dist/yieldmoBidAdapter.js new file mode 100644 index 00000000000..acbfa75b138 --- /dev/null +++ b/build/dist/yieldmoBidAdapter.js @@ -0,0 +1,373 @@ +pbjsChunk([50],{ + +/***/ 818: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(819); + + +/***/ }), + +/***/ 819: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + +var BIDDER_CODE = 'yieldmo'; +var CURRENCY = 'USD'; +var TIME_TO_LIVE = 300; +var NET_REVENUE = true; +var SERVER_ENDPOINT = 'https://ads.yieldmo.com/exchange/prebid'; +var localWindow = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["getWindowTop"](); +var spec = { + code: BIDDER_CODE, + supportedMediaTypes: ['banner'], + + /** + * Determines whether or not the given bid request is valid. + * @param {object} bid, bid to validate + * @return boolean, true if valid, otherwise false + */ + isBidRequestValid: function isBidRequestValid(bid) { + return !!(bid && bid.adUnitCode && bid.bidId); + }, + + /** + * 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 serverRequest = { + p: [], + page_url: bidderRequest.refererInfo.referer, + bust: new Date().getTime().toString(), + pr: bidderRequest.refererInfo.referer, + scrd: localWindow.devicePixelRatio || 0, + dnt: getDNT(), + e: getEnvironment(), + description: getPageDescription(), + title: localWindow.document.title || '', + w: localWindow.innerWidth, + h: localWindow.innerHeight, + userConsent: JSON.stringify({ + // case of undefined, stringify will remove param + gdprApplies: bidderRequest && bidderRequest.gdprConsent ? bidderRequest.gdprConsent.gdprApplies : '', + cmp: bidderRequest && bidderRequest.gdprConsent ? bidderRequest.gdprConsent.consentString : '' + }), + us_privacy: bidderRequest && bidderRequest.uspConsent ? bidderRequest.uspConsent : '' + }; + bidRequests.forEach(function (request) { + serverRequest.p.push(addPlacement(request)); + var pubcid = getId(request, 'pubcid'); + + if (pubcid) { + serverRequest.pubcid = pubcid; + } else if (request.crumbs) { + if (request.crumbs.pubcid) { + serverRequest.pubcid = request.crumbs.pubcid; + } + } + + var tdid = getId(request, 'tdid'); + + if (tdid) { + serverRequest.tdid = tdid; + } + + var criteoId = getId(request, 'criteoId'); + + if (criteoId) { + serverRequest.cri_prebid = criteoId; + } + + if (request.schain) { + serverRequest.schain = JSON.stringify(request.schain); + } + }); + serverRequest.p = '[' + serverRequest.p.toString() + ']'; + return { + method: 'GET', + url: SERVER_ENDPOINT, + data: serverRequest + }; + }, + + /** + * Makes Yieldmo Ad Server response compatible to Prebid specs + * @param serverResponse successful response from Ad Server + * @return {Bid[]} an array of bids + */ + interpretResponse: function interpretResponse(serverResponse) { + var bids = []; + var data = serverResponse.body; + + if (data.length > 0) { + data.forEach(function (response) { + if (response.cpm && response.cpm > 0) { + bids.push(createNewBid(response)); + } + }); + } + + return bids; + }, + getUserSyncs: function getUserSyncs() { + return []; + } +}; +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); +/*************************************** + * Helper Functions + ***************************************/ + +/** + * Adds placement information to array + * @param request bid request + */ + +function addPlacement(request) { + var placementInfo = { + placement_id: request.adUnitCode, + callback_id: request.bidId, + sizes: request.mediaTypes.banner.sizes + }; + + if (request.params) { + if (request.params.placementId) { + placementInfo.ym_placement_id = request.params.placementId; + } + + if (request.params.bidFloor) { + placementInfo.bidFloor = request.params.bidFloor; + } + } + + return JSON.stringify(placementInfo); +} +/** + * creates a new bid with response information + * @param response server response + */ + + +function createNewBid(response) { + return { + requestId: response['callback_id'], + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.creative_id, + currency: CURRENCY, + netRevenue: NET_REVENUE, + ttl: TIME_TO_LIVE, + ad: response.ad + }; +} +/** + * Detects whether dnt is true + * @returns true if user enabled dnt + */ + + +function getDNT() { + return window.doNotTrack === '1' || window.navigator.doNotTrack === '1' || false; +} +/** + * get page description + */ + + +function getPageDescription() { + if (document.querySelector('meta[name="description"]')) { + return document.querySelector('meta[name="description"]').getAttribute('content'); // Value of the description metadata from the publisher's page. + } else { + return ''; + } +} +/*************************************** + * Detect Environment Helper Functions + ***************************************/ + +/** + * Represents a method for loading Yieldmo ads. Environments affect + * which formats can be loaded into the page + * Environments: + * CodeOnPage: 0, // div directly on publisher's page + * Amp: 1, // google Accelerate Mobile Pages ampproject.org + * Mraid = 2, // native loaded through the MRAID spec, without Yieldmo's SDK https://www.iab.net/media/file/IAB_MRAID_v2_FINAL.pdf + * Dfp: 4, // google doubleclick for publishers https://www.doubleclickbygoogle.com/ + * DfpInAmp: 5, // AMP page containing a DFP iframe + * SafeFrame: 10, + * DfpSafeFrame: 11,Sandboxed: 16, // An iframe that can't get to the top window. + * SuperSandboxed: 89, // An iframe without allow-same-origin + * Unknown: 90, // A default sandboxed implementation delivered by EnvironmentDispatch when all positive environment checks fail + */ + +/** + * Detects what environment we're in + * @returns Environment kind + */ + + +function getEnvironment() { + if (isSuperSandboxedIframe()) { + return 89; + } else if (isDfpInAmp()) { + return 5; + } else if (isDfp()) { + return 4; + } else if (isAmp()) { + return 1; + } else if (isDFPSafeFrame()) { + return 11; + } else if (isSafeFrame()) { + return 10; + } else if (isMraid()) { + return 2; + } else if (isCodeOnPage()) { + return 0; + } else if (isSandboxedIframe()) { + return 16; + } else { + return 90; + } +} +/** + * @returns true if we are running on the top window at dispatch time + */ + + +function isCodeOnPage() { + return window === window.parent; +} +/** + * @returns true if the environment is both DFP and AMP + */ + + +function isDfpInAmp() { + return isDfp() && isAmp(); +} +/** + * @returns true if the window is in an iframe whose id and parent element id match DFP + */ + + +function isDfp() { + try { + var frameElement = window.frameElement; + var parentElement = window.frameElement.parentNode; + + if (frameElement && parentElement) { + return frameElement.id.indexOf('google_ads_iframe') > -1 && parentElement.id.indexOf('google_ads_iframe') > -1; + } + + return false; + } catch (e) { + return false; + } +} +/** + * @returns true if there is an AMP context object + */ + + +function isAmp() { + try { + var ampContext = window.context || window.parent.context; + + if (ampContext && ampContext.pageViewId) { + return ampContext; + } + + return false; + } catch (e) { + return false; + } +} +/** + * @returns true if the environment is a SafeFrame. + */ + + +function isSafeFrame() { + return window.$sf && window.$sf.ext; +} +/** + * @returns true if the environment is a dfp safe frame. + */ + + +function isDFPSafeFrame() { + if (window.location && window.location.href) { + var href = window.location.href; + return isSafeFrame() && href.indexOf('google') !== -1 && href.indexOf('safeframe') !== -1; + } + + return false; +} +/** + * Return true if we are in an iframe and can't access the top window. + */ + + +function isSandboxedIframe() { + return window.top !== window && !window.frameElement; +} +/** + * Return true if we cannot document.write to a child iframe (this implies no allow-same-origin) + */ + + +function isSuperSandboxedIframe() { + var sacrificialIframe = window.document.createElement('iframe'); + + try { + sacrificialIframe.setAttribute('style', 'display:none'); + window.document.body.appendChild(sacrificialIframe); + sacrificialIframe.contentWindow._testVar = true; + window.document.body.removeChild(sacrificialIframe); + return false; + } catch (e) { + window.document.body.removeChild(sacrificialIframe); + return true; + } +} +/** + * @returns true if the window has the attribute identifying MRAID + */ + + +function isMraid() { + return !!window.mraid; +} +/** + * Gets an id from the userId object if it exists + * @param {*} request + * @param {*} idType + * @returns an id if there is one, or undefined + */ + + +function getId(request, idType) { + var id; + + if (request && request.userId && request.userId[idType] && _typeof(request.userId) === 'object') { + id = request.userId[idType]; + } + + return id; +} + +/***/ }) + +},[818]); \ No newline at end of file diff --git a/build/dist/yieldoneAnalyticsAdapter.js b/build/dist/yieldoneAnalyticsAdapter.js new file mode 100644 index 00000000000..75b422ae535 --- /dev/null +++ b/build/dist/yieldoneAnalyticsAdapter.js @@ -0,0 +1,501 @@ +pbjsChunk([3],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 820: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(821); + + +/***/ }), + +/***/ 821: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_targeting_js__ = __webpack_require__(41); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_auctionManager_js__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + + +var ANALYTICS_CODE = 'yieldone'; +var analyticsType = 'endpoint'; // const VERSION = '1.0.0'; + +var defaultUrl = 'https://pool.tsukiji.iponweb.net/hba'; +var requestedBidders = {}; +var requestedBids = {}; +var referrers = {}; +var ignoredEvents = {}; +ignoredEvents[__WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_ADJUSTMENT] = true; +ignoredEvents[__WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BIDDER_DONE] = true; +ignoredEvents[__WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_END] = true; +var currentAuctionId = ''; +var url = defaultUrl; +var pubId = ''; + +function makeAdUnitNameMap() { + if (window.googletag && window.googletag.pubads) { + // eslint-disable-next-line no-undef + var p = googletag.pubads(); + + if (p && p.getSlots) { + var slots = p.getSlots(); + + if (slots && slots.length) { + var map = {}; + slots.forEach(function (slot) { + var id = slot.getSlotElementId(); + var name = (slot.getAdUnitPath() || '').split('/').pop(); + map[id] = name; + }); + return map; + } + } + } +} + +function addAdUnitNameForArray(ar, map) { + if (__WEBPACK_IMPORTED_MODULE_6__src_utils_js__["isArray"](ar)) { + ar.forEach(function (it) { + addAdUnitName(it, map); + }); + } +} + +function addAdUnitName(params, map) { + if (params.adUnitCode && map[params.adUnitCode]) { + params.adUnitName = map[params.adUnitCode]; + } + + if (__WEBPACK_IMPORTED_MODULE_6__src_utils_js__["isArray"](params.adUnits)) { + params.adUnits.forEach(function (adUnit) { + if (adUnit.code && map[adUnit.code]) { + adUnit.name = map[adUnit.code]; + } + }); + } + + if (__WEBPACK_IMPORTED_MODULE_6__src_utils_js__["isArray"](params.adUnitCodes)) { + params.adUnitNames = params.adUnitCodes.map(function (code) { + return map[code]; + }); + } + + ['bids', 'bidderRequests', 'bidsReceived', 'noBids'].forEach(function (it) { + addAdUnitNameForArray(params[it], map); + }); +} + +var yieldoneAnalytics = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + analyticsType: analyticsType +}), { + getUrl: function getUrl() { + return url; + }, + track: function track(_ref) { + var eventType = _ref.eventType, + _ref$args = _ref.args, + args = _ref$args === void 0 ? {} : _ref$args; + + if (eventType === __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_REQUESTED) { + var reqBidderId = "".concat(args.bidderCode, "_").concat(args.auctionId); + requestedBidders[reqBidderId] = __WEBPACK_IMPORTED_MODULE_6__src_utils_js__["deepClone"](args); + requestedBidders[reqBidderId].bids = []; + args.bids.forEach(function (bid) { + requestedBids["".concat(bid.bidId, "_").concat(bid.auctionId)] = bid; + }); + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_TIMEOUT && __WEBPACK_IMPORTED_MODULE_6__src_utils_js__["isArray"](args)) { + var eventsStorage = yieldoneAnalytics.eventsStorage; + var reqBidders = {}; + args.forEach(function (bid) { + var reqBidId = "".concat(bid.bidId, "_").concat(bid.auctionId); + var reqBidderId = "".concat(bid.bidder, "_").concat(bid.auctionId); + if (!eventsStorage[bid.auctionId]) eventsStorage[bid.auctionId] = { + events: [] + }; + + if ((requestedBidders[reqBidderId] || reqBidders[bid.bidder]) && requestedBids[reqBidId]) { + if (!reqBidders[bid.bidder]) { + reqBidders[bid.bidder] = requestedBidders[reqBidderId]; + eventsStorage[bid.auctionId].events.push({ + eventType: eventType, + params: reqBidders[bid.bidder] + }); + delete requestedBidders[reqBidderId]; + } + + reqBidders[bid.bidder].bids.push(requestedBids[reqBidId]); + delete requestedBids[reqBidId]; + } + }); + } else { + currentAuctionId = args.auctionId || currentAuctionId; + + if (currentAuctionId) { + var _eventsStorage = yieldoneAnalytics.eventsStorage; + if (!_eventsStorage[currentAuctionId]) _eventsStorage[currentAuctionId] = { + events: [] + }; + var referrer = args.refererInfo && args.refererInfo.referer; + + if (referrer && referrers[currentAuctionId] !== referrer) { + referrers[currentAuctionId] = referrer; + } + + var params = _extends({}, args); + + delete params.ad; + + if (params.bidsReceived) { + params.bidsReceived = params.bidsReceived.map(function (bid) { + var res = _extends({}, bid); + + delete res.ad; + return res; + }); + } + + if (!ignoredEvents[eventType]) { + _eventsStorage[currentAuctionId].events.push({ + eventType: eventType, + params: params + }); + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.AUCTION_END || eventType === __WEBPACK_IMPORTED_MODULE_2__src_constants_json___default.a.EVENTS.BID_WON) { + params.adServerTargeting = __WEBPACK_IMPORTED_MODULE_4__src_targeting_js__["a" /* targeting */].getAllTargeting(__WEBPACK_IMPORTED_MODULE_5__src_auctionManager_js__["a" /* auctionManager */].getAdUnitCodes(), __WEBPACK_IMPORTED_MODULE_5__src_auctionManager_js__["a" /* auctionManager */].getBidsReceived()); + + if (yieldoneAnalytics.eventsStorage[currentAuctionId]) { + yieldoneAnalytics.eventsStorage[currentAuctionId].page = { + url: referrers[currentAuctionId] + }; + yieldoneAnalytics.eventsStorage[currentAuctionId].pubId = pubId; + yieldoneAnalytics.eventsStorage[currentAuctionId].wrapper_version = "4.2.0"; + var adUnitNameMap = makeAdUnitNameMap(); + + if (adUnitNameMap) { + yieldoneAnalytics.eventsStorage[currentAuctionId].events.forEach(function (it) { + addAdUnitName(it.params, adUnitNameMap); + }); + } + } + + yieldoneAnalytics.sendStat(yieldoneAnalytics.eventsStorage[currentAuctionId], currentAuctionId); + } + } + } + }, + sendStat: function sendStat(events, auctionId) { + if (!events) return; + delete yieldoneAnalytics.eventsStorage[auctionId]; + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(url, { + success: function success() {}, + error: function error() {} + }, JSON.stringify(events), { + method: 'POST' + }); + } +}); + +yieldoneAnalytics.eventsStorage = {}; // save the base class function + +yieldoneAnalytics.originEnableAnalytics = yieldoneAnalytics.enableAnalytics; // override enableAnalytics so we can get access to the config passed in from the page + +yieldoneAnalytics.enableAnalytics = function (config) { + var options = config && config.options; + + if (options) { + if (typeof options.url === 'string') { + url = options.url; + } + + if (options.pubId) { + pubId = options.pubId.toString(); + } + } + + yieldoneAnalytics.originEnableAnalytics(config); // call the base class function +}; + +__WEBPACK_IMPORTED_MODULE_3__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: yieldoneAnalytics, + code: ANALYTICS_CODE +}); +/* harmony default export */ __webpack_exports__["default"] = (yieldoneAnalytics); + +/***/ }) + +},[820]); \ No newline at end of file diff --git a/build/dist/yieldoneBidAdapter.js b/build/dist/yieldoneBidAdapter.js new file mode 100644 index 00000000000..a70f2c8627e --- /dev/null +++ b/build/dist/yieldoneBidAdapter.js @@ -0,0 +1,189 @@ +pbjsChunk([49],{ + +/***/ 822: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(823); + + +/***/ }), + +/***/ 823: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_config_js__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__ = __webpack_require__(2); + + + + + +var BIDDER_CODE = 'yieldone'; +var ENDPOINT_URL = 'https://y.one.impact-ad.jp/h_bid'; +var USER_SYNC_URL = 'https://y.one.impact-ad.jp/push_sync'; +var VIDEO_PLAYER_URL = 'https://img.ak.impact-ad.jp/ic/pone/ivt/firstview/js/dac-video-prebid.min.js'; +var CMER_PLAYER_URL = 'https://an.cmertv.com/hb/renderer/cmertv-video-yone-prebid.min.js'; +var VIEWABLE_PERCENTAGE_URL = 'https://img.ak.impact-ad.jp/ic/pone/ivt/firstview/js/prebid-adformat-config.js'; +var spec = { + code: BIDDER_CODE, + aliases: ['y1'], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]], + isBidRequestValid: function isBidRequestValid(bid) { + return !!bid.params.placementId; + }, + buildRequests: function buildRequests(validBidRequests, bidderRequest) { + return validBidRequests.map(function (bidRequest) { + var params = bidRequest.params; + var placementId = params.placementId; + var cb = Math.floor(Math.random() * 99999999999); + var referrer = bidderRequest.refererInfo.referer; + var bidId = bidRequest.bidId; + var transactionId = bidRequest.transactionId; + var unitCode = bidRequest.adUnitCode; + var timeout = __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('bidderTimeout'); + var payload = { + v: 'hb1', + p: placementId, + cb: cb, + r: referrer, + uid: bidId, + tid: transactionId, + uc: unitCode, + tmax: timeout, + t: 'i' + }; + var videoMediaType = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video'); + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bidRequest.mediaType) && __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isEmpty"](bidRequest.mediaTypes) || bidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */] || bidRequest.mediaTypes && bidRequest.mediaTypes[__WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]]) { + var sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes; + payload.sz = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](sizes).join(','); + } else if (bidRequest.mediaType === __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */] || videoMediaType) { + var _sizes = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidRequest, 'mediaTypes.video.playerSize') || bidRequest.sizes; + + var size = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["parseSizesInput"](_sizes)[0]; + payload.w = size.split('x')[0]; + payload.h = size.split('x')[1]; + } + + return { + method: 'GET', + url: ENDPOINT_URL, + data: payload + }; + }); + }, + interpretResponse: function interpretResponse(serverResponse, bidRequest) { + var bidResponses = []; + var response = serverResponse.body; + var crid = response.crid || 0; + var width = response.width || 0; + var height = response.height || 0; + var cpm = response.cpm * 1000 || 0; + + if (width !== 0 && height !== 0 && cpm !== 0 && crid !== 0) { + var dealId = response.dealId || ''; + var renderId = response.renderid || ''; + var currency = response.currency || 'JPY'; + var netRevenue = response.netRevenue === undefined ? true : response.netRevenue; + var referrer = bidRequest.data.r || ''; + var bidResponse = { + requestId: response.uid, + cpm: cpm, + width: response.width, + height: response.height, + creativeId: crid, + dealId: dealId, + currency: currency, + netRevenue: netRevenue, + ttl: __WEBPACK_IMPORTED_MODULE_1__src_config_js__["b" /* config */].getConfig('_bidderTimeout'), + referrer: referrer + }; + + if (response.adTag && renderId === 'ViewableRendering') { + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]; + var viewableScript = "\n \n \n "); + bidResponse.ad = viewableScript; + } else if (response.adTag) { + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["b" /* BANNER */]; + bidResponse.ad = response.adTag; + } else if (response.adm) { + bidResponse.mediaType = __WEBPACK_IMPORTED_MODULE_4__src_mediaTypes_js__["d" /* VIDEO */]; + bidResponse.vastXml = response.adm; + + if (renderId === 'cmer') { + bidResponse.renderer = newCmerRenderer(response); + } else { + bidResponse.renderer = newRenderer(response); + } + } + + bidResponses.push(bidResponse); + } + + return bidResponses; + }, + getUserSyncs: function getUserSyncs(syncOptions) { + if (syncOptions.iframeEnabled) { + return [{ + type: 'iframe', + url: USER_SYNC_URL + }]; + } + } +}; + +function newRenderer(response) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: response.uid, + url: VIDEO_PLAYER_URL, + loaded: false + }); + + try { + renderer.setRender(outstreamRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on newRenderer', err); + } + + return renderer; +} + +function outstreamRender(bid) { + bid.renderer.push(function () { + window.DACIVTPREBID.renderPrebid(bid); + }); +} + +function newCmerRenderer(response) { + var renderer = __WEBPACK_IMPORTED_MODULE_3__src_Renderer_js__["a" /* Renderer */].install({ + id: response.uid, + url: CMER_PLAYER_URL, + loaded: false + }); + + try { + renderer.setRender(cmerRender); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on newRenderer', err); + } + + return renderer; +} + +function cmerRender(bid) { + bid.renderer.push(function () { + window.CMERYONEPREBID.renderPrebid(bid); + }); +} + +Object(__WEBPACK_IMPORTED_MODULE_2__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[822]); \ No newline at end of file diff --git a/build/dist/yuktamediaAnalyticsAdapter.js b/build/dist/yuktamediaAnalyticsAdapter.js new file mode 100644 index 00000000000..8a68e94b93a --- /dev/null +++ b/build/dist/yuktamediaAnalyticsAdapter.js @@ -0,0 +1,444 @@ +pbjsChunk([2],{ + +/***/ 6: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = AnalyticsAdapter; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ajax_js__ = __webpack_require__(4); +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 _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + + + + +var events = __webpack_require__(8); + +var utils = __webpack_require__(0); + +var _CONSTANTS$EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants_json___default.a.EVENTS, + AUCTION_INIT = _CONSTANTS$EVENTS.AUCTION_INIT, + AUCTION_END = _CONSTANTS$EVENTS.AUCTION_END, + REQUEST_BIDS = _CONSTANTS$EVENTS.REQUEST_BIDS, + BID_REQUESTED = _CONSTANTS$EVENTS.BID_REQUESTED, + BID_TIMEOUT = _CONSTANTS$EVENTS.BID_TIMEOUT, + BID_RESPONSE = _CONSTANTS$EVENTS.BID_RESPONSE, + NO_BID = _CONSTANTS$EVENTS.NO_BID, + BID_WON = _CONSTANTS$EVENTS.BID_WON, + BID_ADJUSTMENT = _CONSTANTS$EVENTS.BID_ADJUSTMENT, + BIDDER_DONE = _CONSTANTS$EVENTS.BIDDER_DONE, + SET_TARGETING = _CONSTANTS$EVENTS.SET_TARGETING, + AD_RENDER_FAILED = _CONSTANTS$EVENTS.AD_RENDER_FAILED, + ADD_AD_UNITS = _CONSTANTS$EVENTS.ADD_AD_UNITS; +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 === 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() === BUNDLE) { + window[global](handler, eventType, args); + } + + if (this.getAdapterType() === ENDPOINT) { + _callEndpoint.apply(void 0, arguments); + } + } + + function _callEndpoint(_ref3) { + var eventType = _ref3.eventType, + args = _ref3.args, + callback = _ref3.callback; + Object(__WEBPACK_IMPORTED_MODULE_1__ajax_js__["a" /* 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) === '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, REQUEST_BIDS, function (args) { + return _this2.enqueue({ + eventType: REQUEST_BIDS, + args: args + }); + }), _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, NO_BID, function (args) { + return _this2.enqueue({ + eventType: NO_BID, + 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, BIDDER_DONE, function (args) { + return _this2.enqueue({ + eventType: BIDDER_DONE, + 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, ADD_AD_UNITS, function (args) { + return _this2.enqueue({ + eventType: ADD_AD_UNITS, + args: args + }); + }), _defineProperty(_handlers2, AUCTION_INIT, function (args) { + args.config = _typeof(config) === 'object' ? 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 \"".concat(global, "\" disabled by sampling")); + } // finally set this function to return log message, prevents multiple adapter listeners + + + this._oldEnable = this.enableAnalytics; + + this.enableAnalytics = function _enable() { + return utils.logMessage("Analytics adapter for \"".concat(global, "\" already enabled, unnecessary call to `enableAnalytics`.")); + }; + } + + function _disable() { + utils._each(_handlers, function (handler, event) { + events.off(event, handler); + }); + + this.enableAnalytics = this._oldEnable ? this._oldEnable : _enable; + } + + 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 ".concat(global, ": ").concat(_eventCount)); + } +} + +/***/ }), + +/***/ 824: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(825); + + +/***/ }), + +/***/ 825: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_ajax_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__src_constants_json__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_utils_js__ = __webpack_require__(0); +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + +var emptyUrl = ''; +var analyticsType = 'endpoint'; +var yuktamediaAnalyticsVersion = 'v2.0.0'; +var initOptions; +var auctionTimestamp; +var events = { + bids: [] +}; + +var yuktamediaAnalyticsAdapter = _extends(Object(__WEBPACK_IMPORTED_MODULE_1__src_AnalyticsAdapter_js__["a" /* default */])({ + emptyUrl: emptyUrl, + analyticsType: analyticsType +}), { + track: function track(_ref) { + var eventType = _ref.eventType, + args = _ref.args; + + if (typeof args !== 'undefined') { + if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_TIMEOUT) { + args.forEach(function (item) { + mapBidResponse(item, 'timeout'); + }); + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_INIT) { + events.auctionInit = args; + auctionTimestamp = args.timestamp; + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_REQUESTED) { + mapBidRequests(args).forEach(function (item) { + events.bids.push(item); + }); + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_RESPONSE) { + mapBidResponse(args, 'response'); + } else if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.BID_WON) { + send({ + bidWon: mapBidResponse(args, 'win') + }, 'won'); + } + } + + if (eventType === __WEBPACK_IMPORTED_MODULE_3__src_constants_json___default.a.EVENTS.AUCTION_END) { + send(events, 'auctionEnd'); + } + } +}); + +function mapBidRequests(params) { + var arr = []; + + if (typeof params.bids !== 'undefined' && params.bids.length) { + params.bids.forEach(function (bid) { + arr.push({ + bidderCode: bid.bidder, + bidId: bid.bidId, + adUnitCode: bid.adUnitCode, + requestId: bid.bidderRequestId, + auctionId: bid.auctionId, + transactionId: bid.transactionId, + sizes: __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["parseSizesInput"](bid.mediaTypes.banner.sizes).toString(), + renderStatus: 1, + requestTimestamp: params.auctionStart + }); + }); + } + + return arr; +} + +function mapBidResponse(bidResponse, status) { + if (status !== 'win') { + var bid = events.bids.filter(function (o) { + return o.bidId == bidResponse.bidId || o.bidId == bidResponse.requestId; + })[0]; + + _extends(bid, { + bidderCode: bidResponse.bidder, + bidId: status == 'timeout' ? bidResponse.bidId : bidResponse.requestId, + adUnitCode: bidResponse.adUnitCode, + auctionId: bidResponse.auctionId, + creativeId: bidResponse.creativeId, + transactionId: bidResponse.transactionId, + currency: bidResponse.currency, + cpm: bidResponse.cpm, + netRevenue: bidResponse.netRevenue, + mediaType: bidResponse.mediaType, + statusMessage: bidResponse.statusMessage, + status: bidResponse.status, + renderStatus: status == 'timeout' ? 3 : 2, + timeToRespond: bidResponse.timeToRespond, + requestTimestamp: bidResponse.requestTimestamp, + responseTimestamp: bidResponse.responseTimestamp + }); + } else if (status == 'win') { + return { + bidderCode: bidResponse.bidder, + bidId: bidResponse.requestId, + adUnitCode: bidResponse.adUnitCode, + auctionId: bidResponse.auctionId, + creativeId: bidResponse.creativeId, + transactionId: bidResponse.transactionId, + currency: bidResponse.currency, + cpm: bidResponse.cpm, + netRevenue: bidResponse.netRevenue, + renderedSize: bidResponse.size, + mediaType: bidResponse.mediaType, + statusMessage: bidResponse.statusMessage, + status: bidResponse.status, + renderStatus: 4, + timeToRespond: bidResponse.timeToRespond, + requestTimestamp: bidResponse.requestTimestamp, + responseTimestamp: bidResponse.responseTimestamp + }; + } +} + +function send(data, status) { + var location = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["getWindowLocation"](); + + if (typeof data !== 'undefined' && typeof data.auctionInit !== 'undefined') { + data.auctionInit = _extends({ + host: location.host, + path: location.pathname, + search: location.search + }, data.auctionInit); + } + + data.initOptions = initOptions; + var yuktamediaAnalyticsRequestUrl = __WEBPACK_IMPORTED_MODULE_4__src_utils_js__["buildUrl"]({ + protocol: 'https', + hostname: 'analytics-prebid.yuktamedia.com', + pathname: status == 'auctionEnd' ? '/api/bids' : '/api/bid/won', + search: { + auctionTimestamp: auctionTimestamp, + yuktamediaAnalyticsVersion: yuktamediaAnalyticsVersion, + prebidVersion: pbjs.version + } + }); + Object(__WEBPACK_IMPORTED_MODULE_0__src_ajax_js__["a" /* ajax */])(yuktamediaAnalyticsRequestUrl, undefined, JSON.stringify(data), { + method: 'POST', + contentType: 'text/plain' + }); +} + +yuktamediaAnalyticsAdapter.originEnableAnalytics = yuktamediaAnalyticsAdapter.enableAnalytics; + +yuktamediaAnalyticsAdapter.enableAnalytics = function (config) { + initOptions = config.options; + yuktamediaAnalyticsAdapter.originEnableAnalytics(config); +}; + +__WEBPACK_IMPORTED_MODULE_2__src_adapterManager_js__["default"].registerAnalyticsAdapter({ + adapter: yuktamediaAnalyticsAdapter, + code: 'yuktamedia' +}); +/* harmony default export */ __webpack_exports__["default"] = (yuktamediaAnalyticsAdapter); + +/***/ }) + +},[824]); \ No newline at end of file diff --git a/build/dist/zedoBidAdapter.js b/build/dist/zedoBidAdapter.js new file mode 100644 index 00000000000..3ed3d365eb9 --- /dev/null +++ b/build/dist/zedoBidAdapter.js @@ -0,0 +1,398 @@ +pbjsChunk([48],{ + +/***/ 826: +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(827); + + +/***/ }), + +/***/ 827: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spec", function() { return spec; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_utils_js__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find__ = __webpack_require__(10); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_refererDetection_js__ = __webpack_require__(30); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _extends() { _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; }; return _extends.apply(this, arguments); } + + + + + + + +var BIDDER_CODE = 'zedo'; +var SECURE_URL = 'https://saxp.zedo.com/asw/fmh.json'; +var DIM_TYPE = { + '7': 'display', + '9': 'display', + '14': 'display', + '70': 'SBR', + '83': 'CurtainRaiser', + '85': 'Inarticle', + '86': 'pswipeup', + '88': 'Inview', + '100': 'display', + '101': 'display', + '102': 'display', + '103': 'display' // '85': 'pre-mid-post-roll', + +}; +var SECURE_EVENT_PIXEL_URL = 'tt1.zedo.com/log/p.gif'; +var spec = { + code: BIDDER_CODE, + aliases: [], + supportedMediaTypes: [__WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */], __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* 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 && bid.params.channelCode && bid.params.dimId); + }, + + /** + * 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 data = { + placements: [] + }; + bidRequests.map(function (bidRequest) { + var channelCode = parseInt(bidRequest.params.channelCode); + var network = parseInt(channelCode / 1000000); + var channel = channelCode % 1000000; + var dim = getSizes(bidRequest.sizes); + var placement = { + id: bidRequest.bidId, + network: network, + channel: channel, + publisher: bidRequest.params.pubId ? bidRequest.params.pubId : 0, + width: dim[0], + height: dim[1], + dimension: bidRequest.params.dimId, + version: "4.2.0", + keyword: '', + transactionId: bidRequest.transactionId + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + if (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean') { + data.gdpr = Number(bidderRequest.gdprConsent.gdprApplies); + } + + data.gdpr_consent = bidderRequest.gdprConsent.consentString; + } // Add CCPA consent string + + + if (bidderRequest && bidderRequest.uspConsent) { + data.usp = bidderRequest.uspConsent; + } + + var dimType = DIM_TYPE[String(bidRequest.params.dimId)]; + + if (dimType) { + placement['renderers'] = [{ + 'name': dimType + }]; + } else { + // default to display + placement['renderers'] = [{ + 'name': 'display' + }]; + } + + data['placements'].push(placement); + }); // adding schain object + + if (bidRequests[0].schain) { + data['supplyChain'] = getSupplyChain(bidRequests[0].schain); + } + + return { + method: 'GET', + url: SECURE_URL, + data: 'g=' + JSON.stringify(data) + }; + }, + + /** + * 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) { + serverResponse = serverResponse.body; + var bids = []; + + if (!serverResponse || serverResponse.error) { + var errorMessage = "in response for ".concat(request.bidderCode, " adapter"); + + if (serverResponse && serverResponse.error) { + errorMessage += ": ".concat(serverResponse.error); + } + + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](errorMessage); + return bids; + } + + if (serverResponse.ad) { + serverResponse.ad.forEach(function (ad) { + var creativeBid = getCreative(ad); + + if (creativeBid) { + if (parseInt(creativeBid.cpm) !== 0) { + var bid = newBid(ad, creativeBid, request); + bid.mediaType = parseMediaType(creativeBid); + bids.push(bid); + } + } + }); + } + + return bids; + }, + getUserSyncs: function getUserSyncs(syncOptions, responses, gdprConsent) { + if (syncOptions.iframeEnabled) { + var url = 'https://tt3.zedo.com/rs/us/fcs.html'; + + if (gdprConsent && typeof gdprConsent.consentString === 'string') { + // add 'gdpr' only if 'gdprApplies' is defined + if (typeof gdprConsent.gdprApplies === 'boolean') { + url += "?gdpr=".concat(Number(gdprConsent.gdprApplies), "&gdpr_consent=").concat(gdprConsent.consentString); + } else { + url += "?gdpr_consent=".concat(gdprConsent.consentString); + } + } + + return [{ + type: 'iframe', + url: url + }]; + } + }, + onTimeout: function onTimeout(timeoutData) { + try { + logEvent('117', timeoutData); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e); + } + }, + onBidWon: function onBidWon(bid) { + try { + logEvent('116', [bid]); + } catch (e) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logError"](e); + } + } +}; + +function getSupplyChain(supplyChain) { + return { + complete: supplyChain.complete, + nodes: supplyChain.nodes + }; +} + +; + +function getCreative(ad) { + return ad && ad.creatives && ad.creatives.length && __WEBPACK_IMPORTED_MODULE_3_core_js_pure_features_array_find___default()(ad.creatives, function (creative) { + return creative.adId; + }); +} + +; +/** + * Unpack the Server's Bid into a Prebid-compatible one. + * @param serverBid + * @param rtbBid + * @param bidderRequest + * @return Bid + */ + +function newBid(serverBid, creativeBid, bidderRequest) { + var bid = { + requestId: serverBid.slotId, + creativeId: creativeBid.adId, + network: serverBid.network, + adType: creativeBid.creativeDetails.type, + dealId: 99999999, + currency: 'USD', + netRevenue: true, + ttl: 300 + }; + + if (creativeBid.creativeDetails.type === 'VAST') { + _extends(bid, { + width: creativeBid.width, + height: creativeBid.height, + vastXml: creativeBid.creativeDetails.adContent, + cpm: parseInt(creativeBid.bidCpm) / 1000000, + ttl: 3600 + }); + + var rendererOptions = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bidderRequest, 'renderer.options'); + var rendererUrl = 'https://ss3.zedo.com/gecko/beta/fmpbgt.min.js'; + + _extends(bid, { + adResponse: serverBid, + renderer: getRenderer(bid.adUnitCode, serverBid.slotId, rendererUrl, rendererOptions) + }); + } else { + _extends(bid, { + width: creativeBid.width, + height: creativeBid.height, + cpm: parseInt(creativeBid.bidCpm) / 1000000, + ad: creativeBid.creativeDetails.adContent + }); + } + + return bid; +} +/* Turn bid request sizes into compatible format */ + + +function getSizes(requestSizes) { + var width = 0; + var height = 0; + + if (__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes) && requestSizes.length === 2 && !__WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](requestSizes[0])) { + width = parseInt(requestSizes[0], 10); + height = parseInt(requestSizes[1], 10); + } else if (_typeof(requestSizes) === 'object') { + for (var i = 0; i < requestSizes.length; i++) { + var size = requestSizes[i]; + width = parseInt(size[0], 10); + height = parseInt(size[1], 10); + break; + } + } + + return [width, height]; +} + +function getRenderer(adUnitCode, rendererId, rendererUrl) { + var rendererOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + var renderer = __WEBPACK_IMPORTED_MODULE_4__src_Renderer_js__["a" /* Renderer */].install({ + id: rendererId, + url: rendererUrl, + config: rendererOptions, + loaded: false + }); + + try { + renderer.setRender(videoRenderer); + } catch (err) { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logWarn"]('Prebid Error calling setRender on renderer', err); + } + + renderer.setEventHandlers({ + impression: function impression() { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('ZEDO video impression'); + }, + loaded: function loaded() { + return __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('ZEDO video loaded'); + }, + ended: function ended() { + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["logMessage"]('ZEDO renderer video ended'); + document.querySelector("#".concat(adUnitCode)).style.display = 'none'; + } + }); + return renderer; +} + +function videoRenderer(bid) { + // push to render queue + var refererInfo = Object(__WEBPACK_IMPORTED_MODULE_5__src_refererDetection_js__["a" /* getRefererInfo */])(); + var referrer = ''; + + if (refererInfo) { + referrer = refererInfo.referer; + } + + bid.renderer.push(function () { + var channelCode = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.0.channelCode') || 0; + var dimId = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.0.dimId') || 0; + var publisher = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.0.pubId') || 0; + var options = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](bid, 'params.0.options') || {}; + var channel = channelCode > 0 ? channelCode - bid.network * 1000000 : 0; + var rndr = new window.ZdPBTag(bid.adUnitCode, bid.network, bid.width, bid.height, bid.adType, bid.vastXml, channel, dimId, encodeURI(referrer) || '', options); + rndr.renderAd(publisher); + }); +} + +function parseMediaType(creativeBid) { + var adType = creativeBid.creativeDetails.type; + + if (adType === 'VAST') { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["d" /* VIDEO */]; + } else { + return __WEBPACK_IMPORTED_MODULE_2__src_mediaTypes_js__["b" /* BANNER */]; + } +} + +function logEvent(eid, data) { + var getParams = { + protocol: 'https', + hostname: SECURE_EVENT_PIXEL_URL, + search: getLoggingData(eid, data) + }; + var eventUrl = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["buildUrl"](getParams).replace(/&/g, ';'); + __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["triggerPixel"](eventUrl); +} + +function getLoggingData(eid, data) { + data = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["isArray"](data) && data || []; + var params = {}; + var channel, network, dim, publisher, adunitCode, timeToRespond, cpm; + data.map(function (adunit) { + adunitCode = adunit.adUnitCode; + channel = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](adunit, 'params.0.channelCode') || 0; + network = channel > 0 ? parseInt(channel / 1000000) : 0; + dim = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](adunit, 'params.0.dimId') * 256 || 0; + publisher = __WEBPACK_IMPORTED_MODULE_0__src_utils_js__["deepAccess"](adunit, 'params.0.pubId') || 0; + timeToRespond = adunit.timeout ? adunit.timeout : adunit.timeToRespond; + cpm = adunit.cpm; + }); + var referrer = ''; + var refererInfo = Object(__WEBPACK_IMPORTED_MODULE_5__src_refererDetection_js__["a" /* getRefererInfo */])(); + + if (refererInfo) { + referrer = refererInfo.referer; + } + + params.n = network; + params.c = channel; + params.s = publisher; + params.x = dim; + params.ai = encodeURI('Prebid^zedo^' + adunitCode + '^' + cpm + '^' + timeToRespond); + params.pu = encodeURI(referrer) || ''; + params.eid = eid; + params.e = 'e'; + params.z = Math.random(); + return params; +} + +Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__["registerBidder"])(spec); + +/***/ }) + +},[826]); \ No newline at end of file