diff --git a/modules/realvuAnalyticsAdapter.js b/modules/realvuAnalyticsAdapter.js index 5540d136dea..832e907893c 100644 --- a/modules/realvuAnalyticsAdapter.js +++ b/modules/realvuAnalyticsAdapter.js @@ -3,11 +3,9 @@ import adapter from '../src/AnalyticsAdapter.js'; import adapterManager from '../src/adapterManager.js'; import CONSTANTS from '../src/constants.json'; import { getStorageManager } from '../src/storageManager.js'; - +import { logMessage, logError } from '../src/utils.js'; const storage = getStorageManager(); -const utils = require('../src/utils.js'); - let realvuAnalyticsAdapter = adapter({ global: 'realvuAnalytics', handler: 'on', @@ -401,7 +399,7 @@ export let lib = { // @if NODE_ENV='debug' let now = new Date(); let msg = (now.getTime() - time0) / 1000 + ' RENDERED ' + a.unit_id; - utils.logMessage(msg); + logMessage(msg); // @endif let rpt = z.bids_rpt(a, true); z.track(a, 'rend', rpt); @@ -885,7 +883,7 @@ realvuAnalyticsAdapter.originEnableAnalytics = realvuAnalyticsAdapter.enableAnal 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'); + logError('Missed realvu.com partnerId parameter', 101, 'Missed partnerId parameter'); } realvuAnalyticsAdapter.originEnableAnalytics(config); return _options.partnerId; @@ -905,7 +903,7 @@ realvuAnalyticsAdapter.track = function ({eventType, args}) { ' creativei_id=' + args.creative_id; } // msg += '\nargs=' + JSON.stringify(args) + '
'; - utils.logMessage(msg); + logMessage(msg); // @endif const boost = window.top1.realvu_aa; @@ -935,7 +933,7 @@ realvuAnalyticsAdapter.track = function ({eventType, args}) { 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'); + logError('Missed realvu.com partnerId parameter', 102, 'Missed partnerId parameter'); } let a = window.top1.realvu_aa.check({ unit_id: bid.adUnitCode, diff --git a/modules/reconciliationRtdProvider.js b/modules/reconciliationRtdProvider.js index f8636862d4c..fc5f0ab621a 100644 --- a/modules/reconciliationRtdProvider.js +++ b/modules/reconciliationRtdProvider.js @@ -18,7 +18,7 @@ import { submodule } from '../src/hook.js'; import { ajaxBuilder } from '../src/ajax.js'; -import * as utils from '../src/utils.js'; +import { isGptPubadsDefined, timestamp, generateUUID, logError } from '../src/utils.js'; import find from 'core-js-pure/features/array/find.js'; /** @type {Object} */ @@ -52,7 +52,7 @@ function handleAdMessage(e) { } if (data.type === MessageType.IMPRESSION_REQUEST) { - if (utils.isGptPubadsDefined()) { + if (isGptPubadsDefined()) { // 1. Find the last iframed window before window.top where the tracker was injected // (the tracker could be injected in nested iframes) const adWin = getTopIFrameWin(e.source); @@ -65,7 +65,7 @@ function handleAdMessage(e) { adDeliveryId = adSlot.getTargeting('RSDK_ADID'); adDeliveryId = adDeliveryId.length ? adDeliveryId[0] - : `${utils.timestamp()}-${utils.generateUUID()}`; + : `${timestamp()}-${generateUUID()}`; } } } @@ -136,7 +136,7 @@ export function getTopIFrameWin(win, topWin) { * @return {Object[]} slot GoogleTag slots */ function getAllSlots() { - return utils.isGptPubadsDefined() && window.googletag.pubads().getSlots(); + return isGptPubadsDefined() && window.googletag.pubads().getSlots(); } /** @@ -246,7 +246,7 @@ function getReconciliationData(adUnitsCodes) { const adSlot = getSlotByCode(adUnitCode); const adUnitId = adSlot ? adSlot.getAdUnitPath() : adUnitCode; - const adDeliveryId = `${utils.timestamp()}-${utils.generateUUID()}`; + const adDeliveryId = `${timestamp()}-${generateUUID()}`; dataToReturn[adUnitCode] = { RSDK_AUID: adUnitId, @@ -287,7 +287,7 @@ function init(moduleConfig) { _moduleParams = Object.assign({}, DEFAULT_PARAMS, params); initListeners(); } else { - utils.logError('missing params for Reconciliation provider'); + logError('missing params for Reconciliation provider'); } return true; } diff --git a/modules/relaidoBidAdapter.js b/modules/relaidoBidAdapter.js index 14effa263a3..4df13b52a39 100644 --- a/modules/relaidoBidAdapter.js +++ b/modules/relaidoBidAdapter.js @@ -1,4 +1,4 @@ -import * as utils from '../src/utils.js'; +import { deepAccess, logWarn, getBidIdParameter, parseQueryStringParameters, triggerPixel, generateUUID, isArray } from '../src/utils.js'; import { registerBidder } from '../src/adapters/bidderFactory.js'; import { BANNER, VIDEO } from '../src/mediaTypes.js'; import { Renderer } from '../src/Renderer.js'; @@ -13,19 +13,19 @@ const UUID_KEY = 'relaido_uuid'; const storage = getStorageManager(); function isBidRequestValid(bid) { - if (!utils.deepAccess(bid, 'params.placementId')) { - utils.logWarn('placementId param is reqeuired.'); + if (!deepAccess(bid, 'params.placementId')) { + logWarn('placementId param is reqeuired.'); return false; } if (hasVideoMediaType(bid) && isVideoValid(bid)) { return true; } else { - utils.logWarn('Invalid mediaType video.'); + logWarn('Invalid mediaType video.'); } if (hasBannerMediaType(bid) && isBannerValid(bid)) { return true; } else { - utils.logWarn('Invalid mediaType banner.'); + logWarn('Invalid mediaType banner.'); } return false; } @@ -35,7 +35,7 @@ function buildRequests(validBidRequests, bidderRequest) { for (let i = 0; i < validBidRequests.length; i++) { const bidRequest = validBidRequests[i]; - const placementId = utils.getBidIdParameter('placementId', bidRequest.params); + const placementId = getBidIdParameter('placementId', bidRequest.params); const bidDomain = bidRequest.params.domain || BIDDER_DOMAIN; const bidUrl = `https://${bidDomain}/bid/v1/prebid/${placementId}`; const uuid = getUuid(); @@ -44,12 +44,12 @@ function buildRequests(validBidRequests, bidderRequest) { let height = 0; if (hasVideoMediaType(bidRequest) && isVideoValid(bidRequest)) { - const playerSize = getValidSizes(utils.deepAccess(bidRequest, 'mediaTypes.video.playerSize')); + const playerSize = getValidSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize')); width = playerSize[0][0]; height = playerSize[0][1]; mediaType = VIDEO; } else if (hasBannerMediaType(bidRequest) && isBannerValid(bidRequest)) { - const sizes = getValidSizes(utils.deepAccess(bidRequest, 'mediaTypes.banner.sizes')); + const sizes = getValidSizes(deepAccess(bidRequest, 'mediaTypes.banner.sizes')); width = sizes[0][0]; height = sizes[0][1]; mediaType = BANNER; @@ -136,7 +136,7 @@ function getUserSyncs(syncOptions, serverResponses) { } let syncUrl = `https://${BIDDER_DOMAIN}/tr/v1/prebid/sync.html`; if (serverResponses.length > 0) { - syncUrl = utils.deepAccess(serverResponses, '0.body.syncUrl') || syncUrl; + syncUrl = deepAccess(serverResponses, '0.body.syncUrl') || syncUrl; } return [{ type: 'iframe', @@ -145,34 +145,34 @@ function getUserSyncs(syncOptions, serverResponses) { } function onBidWon(bid) { - let query = utils.parseQueryStringParameters({ - placement_id: utils.deepAccess(bid, 'params.0.placementId'), - creative_id: utils.deepAccess(bid, 'creativeId'), - price: utils.deepAccess(bid, 'cpm'), - auction_id: utils.deepAccess(bid, 'auctionId'), - bid_id: utils.deepAccess(bid, 'requestId'), - ad_id: utils.deepAccess(bid, 'adId'), - ad_unit_code: utils.deepAccess(bid, 'adUnitCode'), + let query = parseQueryStringParameters({ + placement_id: deepAccess(bid, 'params.0.placementId'), + creative_id: deepAccess(bid, 'creativeId'), + price: deepAccess(bid, 'cpm'), + auction_id: deepAccess(bid, 'auctionId'), + bid_id: deepAccess(bid, 'requestId'), + ad_id: deepAccess(bid, 'adId'), + ad_unit_code: deepAccess(bid, 'adUnitCode'), ref: window.location.href, }).replace(/\&$/, ''); - const bidDomain = utils.deepAccess(bid, 'params.0.domain') || BIDDER_DOMAIN; + const bidDomain = deepAccess(bid, 'params.0.domain') || BIDDER_DOMAIN; const burl = `https://${bidDomain}/tr/v1/prebid/win.gif?${query}`; - utils.triggerPixel(burl); + triggerPixel(burl); } function onTimeout(data) { - let query = utils.parseQueryStringParameters({ - placement_id: utils.deepAccess(data, '0.params.0.placementId'), - timeout: utils.deepAccess(data, '0.timeout'), - auction_id: utils.deepAccess(data, '0.auctionId'), - bid_id: utils.deepAccess(data, '0.bidId'), - ad_unit_code: utils.deepAccess(data, '0.adUnitCode'), + let query = parseQueryStringParameters({ + placement_id: deepAccess(data, '0.params.0.placementId'), + timeout: deepAccess(data, '0.timeout'), + auction_id: deepAccess(data, '0.auctionId'), + bid_id: deepAccess(data, '0.bidId'), + ad_unit_code: deepAccess(data, '0.adUnitCode'), version: ADAPTER_VERSION, ref: window.location.href, }).replace(/\&$/, ''); - const bidDomain = utils.deepAccess(data, '0.params.0.domain') || BIDDER_DOMAIN; + const bidDomain = deepAccess(data, '0.params.0.domain') || BIDDER_DOMAIN; const timeoutUrl = `https://${bidDomain}/tr/v1/prebid/timeout.gif?${query}`; - utils.triggerPixel(timeoutUrl); + triggerPixel(timeoutUrl); } function createPlayerTag(playerUrl) { @@ -199,7 +199,7 @@ function newRenderer(bidId, playerUrl) { try { renderer.setRender(outstreamRender); } catch (err) { - utils.logWarn('renderer.setRender Error', err); + logWarn('renderer.setRender Error', err); } return renderer; } @@ -220,7 +220,7 @@ function isBannerValid(bid) { if (!isMobile()) { return false; } - const sizes = getValidSizes(utils.deepAccess(bid, 'mediaTypes.banner.sizes')); + const sizes = getValidSizes(deepAccess(bid, 'mediaTypes.banner.sizes')); if (sizes.length > 0) { return true; } @@ -228,9 +228,9 @@ function isBannerValid(bid) { } function isVideoValid(bid) { - const playerSize = getValidSizes(utils.deepAccess(bid, 'mediaTypes.video.playerSize')); + const playerSize = getValidSizes(deepAccess(bid, 'mediaTypes.video.playerSize')); if (playerSize.length > 0) { - const context = utils.deepAccess(bid, 'mediaTypes.video.context'); + const context = deepAccess(bid, 'mediaTypes.video.context'); if (context && context === 'outstream') { return true; } @@ -241,7 +241,7 @@ function isVideoValid(bid) { function getUuid() { const id = storage.getCookie(UUID_KEY) if (id) return id; - const newId = utils.generateUUID(); + const newId = generateUUID(); storage.setCookie(UUID_KEY, newId); return newId; } @@ -255,18 +255,18 @@ export function isMobile() { } function hasBannerMediaType(bid) { - return !!utils.deepAccess(bid, 'mediaTypes.banner'); + return !!deepAccess(bid, 'mediaTypes.banner'); } function hasVideoMediaType(bid) { - return !!utils.deepAccess(bid, 'mediaTypes.video'); + return !!deepAccess(bid, 'mediaTypes.video'); } function getValidSizes(sizes) { let result = []; - if (sizes && utils.isArray(sizes) && sizes.length > 0) { + if (sizes && isArray(sizes) && sizes.length > 0) { for (let i = 0; i < sizes.length; i++) { - if (utils.isArray(sizes[i]) && sizes[i].length == 2) { + if (isArray(sizes[i]) && sizes[i].length == 2) { const width = sizes[i][0]; const height = sizes[i][1]; if (width == 1 && height == 1) { diff --git a/modules/resetdigitalBidAdapter.js b/modules/resetdigitalBidAdapter.js index 7591c3391a0..255ee32629c 100644 --- a/modules/resetdigitalBidAdapter.js +++ b/modules/resetdigitalBidAdapter.js @@ -1,8 +1,7 @@ -import * as utils from '../src/utils.js'; +import { timestamp, deepAccess, getOrigin } from '../src/utils.js'; import { config } from '../src/config.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {getOrigin} from '../src/utils.js'; const BIDDER_CODE = 'resetdigital'; export const spec = { @@ -20,7 +19,7 @@ export const spec = { ? config.getConfig('userSync').syncsPerBidder : 5 const payload = { - start_time: utils.timestamp(), + start_time: timestamp(), language: window.navigator.userLanguage || window.navigator.language, site: { domain: getOrigin(), @@ -51,7 +50,7 @@ export const spec = { imp_id: req.transactionId, sizes: req.sizes, force_bid: req.params.forceBid, - media_types: utils.deepAccess(req, 'mediaTypes') + media_types: deepAccess(req, 'mediaTypes') }); } diff --git a/modules/revcontentBidAdapter.js b/modules/revcontentBidAdapter.js index 777060a5eb6..0888e5ad1b4 100644 --- a/modules/revcontentBidAdapter.js +++ b/modules/revcontentBidAdapter.js @@ -3,7 +3,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; import { BANNER, NATIVE } from '../src/mediaTypes.js'; -import * as utils from '../src/utils.js'; +import { triggerPixel, isFn, deepAccess, getAdUnitSizes, parseGPTSingleSizeArrayToRtbSize, _map } from '../src/utils.js'; const BIDDER_CODE = 'revcontent'; const NATIVE_PARAMS = { @@ -160,7 +160,7 @@ export const spec = { }, onBidWon: function (bid) { if (bid.nurl) { - utils.triggerPixel(bid.nurl); + triggerPixel(bid.nurl); } return true; } @@ -215,14 +215,14 @@ function extractHostname(url) { function buildImp(bid, id) { let bidfloor; - if (utils.isFn(bid.getFloor)) { + if (isFn(bid.getFloor)) { bidfloor = bid.getFloor({ currency: 'USD', mediaType: '*', size: '*' }).floor; } else { - bidfloor = utils.deepAccess(bid, `params.bidfloor`) || 0.1; + bidfloor = deepAccess(bid, `params.bidfloor`) || 0.1; } let imp = { @@ -236,17 +236,17 @@ function buildImp(bid, id) { secure: '1' }; - let bannerReq = utils.deepAccess(bid, `mediaTypes.banner`); - let nativeReq = utils.deepAccess(bid, `mediaTypes.native`); + let bannerReq = deepAccess(bid, `mediaTypes.banner`); + let nativeReq = deepAccess(bid, `mediaTypes.native`); if (bannerReq) { - let sizes = utils.getAdUnitSizes(bid); + let sizes = getAdUnitSizes(bid); imp.banner = { w: sizes[0][0], h: sizes[0][1], - format: sizes.map(wh => utils.parseGPTSingleSizeArrayToRtbSize(wh)), + format: sizes.map(wh => parseGPTSingleSizeArrayToRtbSize(wh)), } } else if (nativeReq) { - const assets = utils._map(bid.nativeParams, (bidParams, key) => { + const assets = _map(bid.nativeParams, (bidParams, key) => { const props = NATIVE_PARAMS[key]; const asset = { required: bidParams.required & 1 diff --git a/modules/rhythmoneBidAdapter.js b/modules/rhythmoneBidAdapter.js index 36b2c369213..d0e399ab7e3 100644 --- a/modules/rhythmoneBidAdapter.js +++ b/modules/rhythmoneBidAdapter.js @@ -1,6 +1,7 @@ + 'use strict'; -import * as utils from '../src/utils.js'; +import { deepAccess, getDNT, parseSizesInput, isArray } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import { BANNER, VIDEO } from '../src/mediaTypes.js'; @@ -41,13 +42,13 @@ function RhythmOneBidAdapter() { impObj.bidfloor = 0; impObj.secure = isSecure; - if (utils.deepAccess(BRs[i], 'mediaTypes.banner') || utils.deepAccess(BRs[i], 'mediaType') === 'banner') { + if (deepAccess(BRs[i], 'mediaTypes.banner') || deepAccess(BRs[i], 'mediaType') === 'banner') { let banner = frameBanner(BRs[i]); if (banner) { impObj.banner = banner; } } - if (utils.deepAccess(BRs[i], 'mediaTypes.video') || utils.deepAccess(BRs[i], 'mediaType') === 'video') { + if (deepAccess(BRs[i], 'mediaTypes.video') || deepAccess(BRs[i], 'mediaType') === 'video') { impObj.video = frameVideo(BRs[i]); } if (!(impObj.banner || impObj.video)) { @@ -85,7 +86,7 @@ function RhythmOneBidAdapter() { return { ua: navigator.userAgent, ip: '', // Empty Ip string is required, server gets the ip from HTTP header - dnt: utils.getDNT() ? 1 : 0, + dnt: getDNT() ? 1 : 0, } } @@ -105,7 +106,7 @@ function RhythmOneBidAdapter() { if (adUnit.mediaTypes && adUnit.mediaTypes.banner) { sizeList = adUnit.mediaTypes.banner.sizes; } - var sizeStringList = utils.parseSizesInput(sizeList); + var sizeStringList = parseSizesInput(sizeList); var format = []; sizeStringList.forEach(function(size) { if (size) { @@ -129,9 +130,9 @@ function RhythmOneBidAdapter() { function frameVideo(bid) { var size = []; - if (utils.deepAccess(bid, 'mediaTypes.video.playerSize')) { + if (deepAccess(bid, 'mediaTypes.video.playerSize')) { var dimensionSet = bid.mediaTypes.video.playerSize; - if (utils.isArray(bid.mediaTypes.video.playerSize[0])) { + if (isArray(bid.mediaTypes.video.playerSize[0])) { dimensionSet = bid.mediaTypes.video.playerSize[0]; } var validSize = getValidSizeSet(dimensionSet) @@ -140,15 +141,15 @@ function RhythmOneBidAdapter() { } } return { - mimes: utils.deepAccess(bid, 'mediaTypes.video.mimes') || SUPPORTED_VIDEO_MIMES, - protocols: utils.deepAccess(bid, 'mediaTypes.video.protocols') || SUPPORTED_VIDEO_PROTOCOLS, + mimes: deepAccess(bid, 'mediaTypes.video.mimes') || SUPPORTED_VIDEO_MIMES, + protocols: deepAccess(bid, 'mediaTypes.video.protocols') || SUPPORTED_VIDEO_PROTOCOLS, w: size[0], h: size[1], - startdelay: utils.deepAccess(bid, 'mediaTypes.video.startdelay') || 0, - skip: utils.deepAccess(bid, 'mediaTypes.video.skip') || 0, - playbackmethod: utils.deepAccess(bid, 'mediaTypes.video.playbackmethod') || SUPPORTED_VIDEO_PLAYBACK_METHODS, - delivery: utils.deepAccess(bid, 'mediaTypes.video.delivery') || SUPPORTED_VIDEO_DELIVERY, - api: utils.deepAccess(bid, 'mediaTypes.video.api') || SUPPORTED_VIDEO_API, + startdelay: deepAccess(bid, 'mediaTypes.video.startdelay') || 0, + skip: deepAccess(bid, 'mediaTypes.video.skip') || 0, + playbackmethod: deepAccess(bid, 'mediaTypes.video.playbackmethod') || SUPPORTED_VIDEO_PLAYBACK_METHODS, + delivery: deepAccess(bid, 'mediaTypes.video.delivery') || SUPPORTED_VIDEO_DELIVERY, + api: deepAccess(bid, 'mediaTypes.video.api') || SUPPORTED_VIDEO_API, } } @@ -170,14 +171,14 @@ function RhythmOneBidAdapter() { device: frameDevice(), user: { ext: { - consent: utils.deepAccess(bidderRequest, 'gdprConsent.gdprApplies') ? bidderRequest.gdprConsent.consentString : '' + consent: deepAccess(bidderRequest, 'gdprConsent.gdprApplies') ? bidderRequest.gdprConsent.consentString : '' } }, at: 1, tmax: 1000, regs: { ext: { - gdpr: utils.deepAccess(bidderRequest, 'gdprConsent.gdprApplies') ? Boolean(bidderRequest.gdprConsent.gdprApplies & 1) : false + gdpr: deepAccess(bidderRequest, 'gdprConsent.gdprApplies') ? Boolean(bidderRequest.gdprConsent.gdprApplies & 1) : false } } }; diff --git a/modules/richaudienceBidAdapter.js b/modules/richaudienceBidAdapter.js index 4b556e83236..eace460eb22 100755 --- a/modules/richaudienceBidAdapter.js +++ b/modules/richaudienceBidAdapter.js @@ -1,7 +1,7 @@ +import { isEmpty, deepAccess, isStr } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; -import * as utils from '../src/utils.js'; import { Renderer } from '../src/Renderer.js'; const BIDDER_CODE = 'richaudience'; @@ -52,7 +52,7 @@ export const spec = { videoData: raiGetVideoInfo(bid), scr_rsl: raiGetResolution(), cpuc: (typeof window.navigator != 'undefined' ? window.navigator.hardwareConcurrency : null), - kws: (!utils.isEmpty(bid.params.keywords) ? bid.params.keywords : null) + kws: (!isEmpty(bid.params.keywords) ? bid.params.keywords : null) }; REFERER = (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null) @@ -220,19 +220,19 @@ function raiSetEids(bid) { let eids = []; if (bid && bid.userId) { - raiSetUserId(bid, eids, 'id5-sync.com', utils.deepAccess(bid, `userId.id5id.uid`)); - raiSetUserId(bid, eids, 'pubcommon', utils.deepAccess(bid, `userId.pubcid`)); - raiSetUserId(bid, eids, 'criteo.com', utils.deepAccess(bid, `userId.criteoId`)); - raiSetUserId(bid, eids, 'liveramp.com', utils.deepAccess(bid, `userId.idl_env`)); - raiSetUserId(bid, eids, 'liveintent.com', utils.deepAccess(bid, `userId.lipb.lipbid`)); - raiSetUserId(bid, eids, 'adserver.org', utils.deepAccess(bid, `userId.tdid`)); + raiSetUserId(bid, eids, 'id5-sync.com', deepAccess(bid, `userId.id5id.uid`)); + raiSetUserId(bid, eids, 'pubcommon', deepAccess(bid, `userId.pubcid`)); + raiSetUserId(bid, eids, 'criteo.com', deepAccess(bid, `userId.criteoId`)); + raiSetUserId(bid, eids, 'liveramp.com', deepAccess(bid, `userId.idl_env`)); + raiSetUserId(bid, eids, 'liveintent.com', deepAccess(bid, `userId.lipb.lipbid`)); + raiSetUserId(bid, eids, 'adserver.org', deepAccess(bid, `userId.tdid`)); } return eids; } function raiSetUserId(bid, eids, source, value) { - if (utils.isStr(value)) { + if (isStr(value)) { eids.push({ userId: value, source: source diff --git a/modules/riseBidAdapter.js b/modules/riseBidAdapter.js index 492653afb95..7f84dbd3344 100644 --- a/modules/riseBidAdapter.js +++ b/modules/riseBidAdapter.js @@ -1,5 +1,5 @@ +import { logWarn, isArray, isFn, deepAccess, isEmpty, contains, timestamp, getBidIdParameter } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import * as utils from '../src/utils.js'; import {VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; @@ -25,12 +25,12 @@ export const spec = { supportedMediaTypes: SUPPORTED_AD_TYPES, isBidRequestValid: function(bidRequest) { if (!bidRequest.params) { - utils.logWarn('no params have been set to Rise adapter'); + logWarn('no params have been set to Rise adapter'); return false; } if (!bidRequest.params.org) { - utils.logWarn('org is a mandatory param for Rise adapter'); + logWarn('org is a mandatory param for Rise adapter'); return false; } @@ -82,7 +82,7 @@ export const spec = { url: response.body.userSyncURL }); } - if (syncOptions.pixelEnabled && utils.isArray(response.body.userSyncPixels)) { + if (syncOptions.pixelEnabled && isArray(response.body.userSyncPixels)) { const pixels = response.body.userSyncPixels.map(pixel => { return { type: 'image', @@ -104,7 +104,7 @@ registerBidder(spec); * @returns {Number} */ function getFloor(bid) { - if (!utils.isFn(bid.getFloor)) { + if (!isFn(bid.getFloor)) { return 0; } let floorResult = bid.getFloor({ @@ -137,7 +137,7 @@ function buildVideoRequest(bid, bidderRequest) { * @returns {Array} */ function getSizes(bid) { - if (utils.deepAccess(bid, 'mediaTypes.video.sizes')) { + if (deepAccess(bid, 'mediaTypes.video.sizes')) { return bid.mediaTypes.video.sizes[0]; } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) { return bid.sizes[0]; @@ -151,7 +151,7 @@ function getSizes(bid) { * @returns {string} */ function getSupplyChain(schainObject) { - if (utils.isEmpty(schainObject)) { + if (isEmpty(schainObject)) { return ''; } let scStr = `${schainObject.ver},${schainObject.complete}`; @@ -173,7 +173,7 @@ function getSupplyChain(schainObject) { * @returns {string} */ function getEncodedValIfNotEmpty(val) { - return !utils.isEmpty(val) ? encodeURIComponent(val) : ''; + return !isEmpty(val) ? encodeURIComponent(val) : ''; } /** @@ -203,8 +203,8 @@ function isSyncMethodAllowed(syncRule, bidderCode) { return false; } const isInclude = syncRule.filter === 'include'; - const bidders = utils.isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode]; - return isInclude && utils.contains(bidders, bidderCode); + const bidders = isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode]; + return isInclude && contains(bidders, bidderCode); } /** @@ -263,25 +263,25 @@ function generateParameters(bid, bidderRequest) { wrapper_vendor: '$$PREBID_GLOBAL$$', wrapper_version: '$prebid.version$', adapter_version: ADAPTER_VERSION, - auction_start: utils.timestamp(), - ad_unit_code: utils.getBidIdParameter('adUnitCode', bid), + auction_start: timestamp(), + ad_unit_code: getBidIdParameter('adUnitCode', bid), tmax: timeout, width: width, height: height, publisher_id: params.org, floor_price: Math.max(getFloor(bid), params.floorPrice), ua: navigator.userAgent, - bid_id: utils.getBidIdParameter('bidId', bid), - bidder_request_id: utils.getBidIdParameter('bidderRequestId', bid), - transaction_id: utils.getBidIdParameter('transactionId', bid), - session_id: utils.getBidIdParameter('auctionId', bid), + bid_id: getBidIdParameter('bidId', bid), + bidder_request_id: getBidIdParameter('bidderRequestId', bid), + transaction_id: getBidIdParameter('transactionId', bid), + session_id: getBidIdParameter('auctionId', bid), publisher_name: domain, site_domain: domain, dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0, device_type: getDeviceType(navigator.userAgent) }; - const userIdsParam = utils.getBidIdParameter('userId', bid); + const userIdsParam = getBidIdParameter('userId', bid); if (userIdsParam) { requestParams.userIds = JSON.stringify(userIdsParam); } @@ -294,31 +294,31 @@ function generateParameters(bid, bidderRequest) { requestParams.user_metadata = JSON.stringify(ortb2Metadata.user); } - const playbackMethod = utils.deepAccess(bid, 'mediaTypes.video.playbackmethod'); + const playbackMethod = deepAccess(bid, 'mediaTypes.video.playbackmethod'); if (playbackMethod) { requestParams.playback_method = playbackMethod; } - const placement = utils.deepAccess(bid, 'mediaTypes.video.placement'); + const placement = deepAccess(bid, 'mediaTypes.video.placement'); if (placement) { requestParams.placement = placement; } - const pos = utils.deepAccess(bid, 'mediaTypes.video.pos'); + const pos = deepAccess(bid, 'mediaTypes.video.pos'); if (pos) { requestParams.pos = pos; } - const minduration = utils.deepAccess(bid, 'mediaTypes.video.minduration'); + const minduration = deepAccess(bid, 'mediaTypes.video.minduration'); if (minduration) { requestParams.min_duration = minduration; } - const maxduration = utils.deepAccess(bid, 'mediaTypes.video.maxduration'); + const maxduration = deepAccess(bid, 'mediaTypes.video.maxduration'); if (maxduration) { requestParams.max_duration = maxduration; } - const skip = utils.deepAccess(bid, 'mediaTypes.video.skip'); + const skip = deepAccess(bid, 'mediaTypes.video.skip'); if (skip) { requestParams.skip = skip; } - const linearity = utils.deepAccess(bid, 'mediaTypes.video.linearity'); + const linearity = deepAccess(bid, 'mediaTypes.video.linearity'); if (linearity) { requestParams.linearity = linearity; } @@ -352,8 +352,8 @@ function generateParameters(bid, bidderRequest) { } if (bidderRequest && bidderRequest.refererInfo) { - requestParams.referrer = utils.deepAccess(bidderRequest, 'refererInfo.referer'); - requestParams.page_url = config.getConfig('pageUrl') || utils.deepAccess(window, 'location.href'); + requestParams.referrer = deepAccess(bidderRequest, 'refererInfo.referer'); + requestParams.page_url = config.getConfig('pageUrl') || deepAccess(window, 'location.href'); } return requestParams; diff --git a/modules/roxotAnalyticsAdapter.js b/modules/roxotAnalyticsAdapter.js index b6857d69f45..c9245d4ae08 100644 --- a/modules/roxotAnalyticsAdapter.js +++ b/modules/roxotAnalyticsAdapter.js @@ -1,3 +1,4 @@ +import { deepClone, getParameterByName, logInfo, logError } from '../src/utils.js'; import adapter from '../src/AnalyticsAdapter.js'; import CONSTANTS from '../src/constants.json'; import adapterManager from '../src/adapterManager.js'; @@ -7,7 +8,6 @@ import { getStorageManager } from '../src/storageManager.js'; const storage = getStorageManager(); -const utils = require('../src/utils.js'); let ajax = ajaxBuilder(0); const DEFAULT_EVENT_URL = 'pa.rxthdr.com/v3'; @@ -153,7 +153,7 @@ function buildBidderRequest(auction, bidRequest) { function buildBidAfterTimeout(adUnitAuction, args) { return { - 'auction': utils.deepClone(adUnitAuction), + 'auction': deepClone(adUnitAuction), 'adUnit': extractAdUnitCode(args), 'bidder': extractBidder(args), 'cpm': args.cpm, @@ -170,7 +170,7 @@ function buildBidAfterTimeout(adUnitAuction, args) { function buildImpression(adUnitAuction, args) { return { 'isNew': checkIsNewFlag() ? 1 : 0, - 'auction': utils.deepClone(adUnitAuction), + 'auction': deepClone(adUnitAuction), 'adUnit': extractAdUnitCode(args), 'bidder': extractBidder(args), 'cpm': args.cpm, @@ -342,7 +342,7 @@ roxotAdapter.originEnableAnalytics = roxotAdapter.enableAnalytics; roxotAdapter.enableAnalytics = function (config) { if (this.initConfig(config)) { - logInfo('Analytics adapter enabled', initOptions); + _logInfo('Analytics adapter enabled', initOptions); roxotAdapter.originEnableAnalytics(config); } }; @@ -351,7 +351,7 @@ roxotAdapter.buildUtmTagData = function () { let utmTagData = {}; let utmTagsDetected = false; utmTags.forEach(function (utmTagKey) { - let utmTagValue = utils.getParameterByName(utmTagKey); + let utmTagValue = getParameterByName(utmTagKey); if (utmTagValue !== '') { utmTagsDetected = true; } @@ -374,11 +374,11 @@ roxotAdapter.buildUtmTagData = function () { roxotAdapter.initConfig = function (config) { let isCorrectConfig = true; initOptions = {}; - initOptions.options = utils.deepClone(config.options); + initOptions.options = deepClone(config.options); initOptions.publisherId = initOptions.options.publisherId || (initOptions.options.publisherIds[0]) || null; if (!initOptions.publisherId) { - logError('"options.publisherId" is empty'); + _logError('"options.publisherId" is empty'); isCorrectConfig = false; } @@ -407,7 +407,7 @@ function registerEvent(eventType, eventName, data) { sendEventCache.push(eventData); - logInfo('Register event', eventData); + _logInfo('Register event', eventData); (typeof initOptions.serverConfig === 'undefined') ? checkEventAfterTimeout() : checkSendEvent(); } @@ -427,7 +427,7 @@ function checkSendEvent() { let event = sendEventCache.shift(); let isNeedSend = initOptions.serverConfig[event.eventType] || 0; if (Number(isNeedSend) === 0) { - logInfo('Skip event ' + event.eventName, event); + _logInfo('Skip event ' + event.eventName, event); continue; } sendEvent(event.eventType, event.eventName, event.data); @@ -454,7 +454,7 @@ function sendEvent(eventType, eventName, data) { ajax( url, function () { - logInfo(eventName + ' sent', eventData); + _logInfo(eventName + ' sent', eventData); }, JSON.stringify(eventData), { @@ -490,12 +490,12 @@ function loadServerConfig() { ); } -function logInfo(message, meta) { - utils.logInfo(buildLogMessage(message), meta); +function _logInfo(message, meta) { + logInfo(buildLogMessage(message), meta); } -function logError(message) { - utils.logError(buildLogMessage(message)); +function _logError(message) { + logError(buildLogMessage(message)); } function buildLogMessage(message) { diff --git a/modules/rtbhouseBidAdapter.js b/modules/rtbhouseBidAdapter.js index 036bdfaebeb..2c562e5841a 100644 --- a/modules/rtbhouseBidAdapter.js +++ b/modules/rtbhouseBidAdapter.js @@ -1,4 +1,4 @@ -import * as utils from '../src/utils.js'; +import { isArray, deepAccess, getOrigin, logError } from '../src/utils.js'; import { BANNER, NATIVE } from '../src/mediaTypes.js'; import { registerBidder } from '../src/adapters/bidderFactory.js'; import includes from 'core-js-pure/features/array/includes.js'; @@ -82,7 +82,7 @@ export const spec = { }, interpretResponse: function (serverResponse, originalRequest) { const responseBody = serverResponse.body; - if (!utils.isArray(responseBody)) { + if (!isArray(responseBody)) { return []; } @@ -145,7 +145,7 @@ function mapImpression(slot) { */ function mapBanner(slot) { if (slot.mediaType === 'banner' || - utils.deepAccess(slot, 'mediaTypes.banner') || + deepAccess(slot, 'mediaTypes.banner') || (!slot.mediaType && !slot.mediaTypes)) { var sizes = slot.sizes || slot.mediaTypes.banner.sizes; return { @@ -173,7 +173,7 @@ function mapSite(slot, bidderRequest) { id: pubId.toString(), }, page: bidderRequest.refererInfo.referer, - name: utils.getOrigin() + name: getOrigin() } } @@ -198,7 +198,7 @@ function mapSchain(schain) { return null; } if (!validateSchain(schain)) { - utils.logError('RTB House: required schain params missing'); + logError('RTB House: required schain params missing'); return null; } return schain; @@ -223,7 +223,7 @@ function validateSchain(schain) { * @returns {object} Request by OpenRTB Native Ads 1.1 §4 */ function mapNative(slot) { - if (slot.mediaType === 'native' || utils.deepAccess(slot, 'mediaTypes.native')) { + if (slot.mediaType === 'native' || deepAccess(slot, 'mediaTypes.native')) { return { request: { assets: mapNativeAssets(slot) @@ -238,7 +238,7 @@ function mapNative(slot) { * @returns {array} Request Assets by OpenRTB Native Ads 1.1 §4.2 */ function mapNativeAssets(slot) { - const params = slot.nativeParams || utils.deepAccess(slot, 'mediaTypes.native'); + const params = slot.nativeParams || deepAccess(slot, 'mediaTypes.native'); const assets = []; if (params.title) { assets.push({ diff --git a/modules/rtbsapeBidAdapter.js b/modules/rtbsapeBidAdapter.js index f5c648d5234..d58b3a1f240 100644 --- a/modules/rtbsapeBidAdapter.js +++ b/modules/rtbsapeBidAdapter.js @@ -1,9 +1,8 @@ -import * as utils from '../src/utils.js'; +import { deepAccess, triggerPixel } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {OUTSTREAM} from '../src/video.js'; import {Renderer} from '../src/Renderer.js'; -import {triggerPixel} from '../src/utils.js'; const BIDDER_CODE = 'rtbsape'; const ENDPOINT = 'https://ssp-rtb.sape.ru/prebid'; @@ -68,7 +67,7 @@ export const spec = { .filter(bid => typeof (bid.meta || {}).advertiserDomains !== 'undefined') .map(bid => { let requestBid = bids[bid.requestId]; - let context = utils.deepAccess(requestBid, 'mediaTypes.video.context'); + let context = deepAccess(requestBid, 'mediaTypes.video.context'); if (context === OUTSTREAM && (bid.vastUrl || bid.vastXml)) { let renderer = Renderer.install({ @@ -77,7 +76,7 @@ export const spec = { loaded: false }); - let muted = utils.deepAccess(requestBid, 'params.video.playerMuted'); + let muted = deepAccess(requestBid, 'params.video.playerMuted'); if (typeof muted === 'undefined') { muted = true; } diff --git a/modules/rubiconAnalyticsAdapter.js b/modules/rubiconAnalyticsAdapter.js index 3222c673a1b..5b17048cbd3 100644 --- a/modules/rubiconAnalyticsAdapter.js +++ b/modules/rubiconAnalyticsAdapter.js @@ -1,9 +1,9 @@ +import { generateUUID, mergeDeep, deepAccess, parseUrl, logError, pick, isEmpty, logWarn, debugTurnedOn, parseQS, getWindowLocation, isAdUnitCodeMatchingSlot, isNumber, isGptPubadsDefined, _each, deepSetValue } from '../src/utils.js'; import adapter from '../src/AnalyticsAdapter.js'; import adapterManager from '../src/adapterManager.js'; import CONSTANTS from '../src/constants.json'; import { ajax } from '../src/ajax.js'; import { config } from '../src/config.js'; -import * as utils from '../src/utils.js'; import { getGlobal } from '../src/prebidGlobal.js'; import { getStorageManager } from '../src/storageManager.js'; @@ -60,23 +60,23 @@ const cache = { const BID_REJECTED_IPF = 'rejected-ipf'; export let rubiConf = { - pvid: utils.generateUUID().slice(0, 8), + pvid: generateUUID().slice(0, 8), analyticsEventDelay: 0 }; // we are saving these as global to this module so that if a pub accidentally overwrites the entire // rubicon object, then we do not lose other data config.getConfig('rubicon', config => { - utils.mergeDeep(rubiConf, config.rubicon); - if (utils.deepAccess(config, 'rubicon.updatePageView') === true) { - rubiConf.pvid = utils.generateUUID().slice(0, 8) + mergeDeep(rubiConf, config.rubicon); + if (deepAccess(config, 'rubicon.updatePageView') === true) { + rubiConf.pvid = generateUUID().slice(0, 8) } }); export function getHostNameFromReferer(referer) { try { - rubiconAdapter.referrerHostname = utils.parseUrl(referer, { noDecodeWholeURL: true }).hostname; + rubiconAdapter.referrerHostname = parseUrl(referer, { noDecodeWholeURL: true }).hostname; } catch (e) { - utils.logError('Rubicon Analytics: Unable to parse hostname from supplied url: ', referer, e); + logError('Rubicon Analytics: Unable to parse hostname from supplied url: ', referer, e); rubiconAdapter.referrerHostname = ''; } return rubiconAdapter.referrerHostname @@ -117,10 +117,10 @@ function formatSource(src) { function sendMessage(auctionId, bidWonId, trigger) { function formatBid(bid) { - return utils.pick(bid, [ + return pick(bid, [ 'bidder', 'bidderDetail', - 'bidId', bidId => utils.deepAccess(bid, 'bidResponse.pbsBidId') || utils.deepAccess(bid, 'bidResponse.seatBidId') || bidId, + 'bidId', bidId => deepAccess(bid, 'bidResponse.pbsBidId') || deepAccess(bid, 'bidResponse.seatBidId') || bidId, 'status', 'error', 'source', (source, bid) => { @@ -133,7 +133,7 @@ function sendMessage(auctionId, bidWonId, trigger) { 'clientLatencyMillis', 'serverLatencyMillis', 'params', - 'bidResponse', bidResponse => bidResponse ? utils.pick(bidResponse, [ + 'bidResponse', bidResponse => bidResponse ? pick(bidResponse, [ 'bidPriceUSD', 'dealId', 'dimensions', @@ -146,13 +146,13 @@ function sendMessage(auctionId, bidWonId, trigger) { ]); } function formatBidWon(bid) { - return Object.assign(formatBid(bid), utils.pick(bid.adUnit, [ + return Object.assign(formatBid(bid), pick(bid.adUnit, [ 'adUnitCode', 'transactionId', 'videoAdFormat', () => bid.videoAdFormat, 'mediaTypes' ]), { - adserverTargeting: !utils.isEmpty(cache.targeting[bid.adUnit.adUnitCode]) ? stringProperties(cache.targeting[bid.adUnit.adUnitCode]) : undefined, + adserverTargeting: !isEmpty(cache.targeting[bid.adUnit.adUnitCode]) ? stringProperties(cache.targeting[bid.adUnit.adUnitCode]) : undefined, bidwonStatus: 'success', // hard-coded for now accountId, siteId: bid.siteId, @@ -187,13 +187,13 @@ function sendMessage(auctionId, bidWonId, trigger) { let bid = auctionCache.bids[bidId]; let adUnit = adUnits[bid.adUnit.adUnitCode]; if (!adUnit) { - adUnit = adUnits[bid.adUnit.adUnitCode] = utils.pick(bid.adUnit, [ + adUnit = adUnits[bid.adUnit.adUnitCode] = pick(bid.adUnit, [ 'adUnitCode', 'transactionId', 'mediaTypes', 'dimensions', - 'adserverTargeting', () => !utils.isEmpty(cache.targeting[bid.adUnit.adUnitCode]) ? stringProperties(cache.targeting[bid.adUnit.adUnitCode]) : undefined, - 'gam', gam => !utils.isEmpty(gam) ? gam : undefined, + 'adserverTargeting', () => !isEmpty(cache.targeting[bid.adUnit.adUnitCode]) ? stringProperties(cache.targeting[bid.adUnit.adUnitCode]) : undefined, + 'gam', gam => !isEmpty(gam) ? gam : undefined, 'pbAdSlot', 'pattern' ]); @@ -203,10 +203,10 @@ function sendMessage(auctionId, bidWonId, trigger) { // 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 (utils.deepAccess(bid, 'params.accountId') == accountId) { + if (deepAccess(bid, 'params.accountId') == accountId) { adUnit.accountId = parseInt(accountId); - adUnit.siteId = parseInt(utils.deepAccess(bid, 'params.siteId')); - adUnit.zoneId = parseInt(utils.deepAccess(bid, 'params.zoneId')); + adUnit.siteId = parseInt(deepAccess(bid, 'params.siteId')); + adUnit.zoneId = parseInt(deepAccess(bid, 'params.zoneId')); } } @@ -229,7 +229,7 @@ function sendMessage(auctionId, bidWonId, trigger) { // This allows the bidWon events to have these params even in the case of a delayed render Object.keys(auctionCache.bids).forEach(function (bidId) { let adCode = auctionCache.bids[bidId].adUnit.adUnitCode; - Object.assign(auctionCache.bids[bidId], utils.pick(adUnitMap[adCode], ['accountId', 'siteId', 'zoneId'])); + Object.assign(auctionCache.bids[bidId], pick(adUnitMap[adCode], ['accountId', 'siteId', 'zoneId'])); }); let auction = { @@ -243,20 +243,20 @@ function sendMessage(auctionId, bidWonId, trigger) { // pick our of top level floor data we want to send! if (auctionCache.floorData) { if (auctionCache.floorData.location === 'noData') { - auction.floors = utils.pick(auctionCache.floorData, [ + auction.floors = pick(auctionCache.floorData, [ 'location', 'fetchStatus', 'floorProvider as provider' ]); } else { - auction.floors = utils.pick(auctionCache.floorData, [ + auction.floors = pick(auctionCache.floorData, [ 'location', 'modelVersion as modelName', 'modelWeight', 'modelTimestamp', 'skipped', - 'enforcement', () => utils.deepAccess(auctionCache.floorData, 'enforcements.enforceJS'), - 'dealsEnforced', () => utils.deepAccess(auctionCache.floorData, 'enforcements.floorDeals'), + 'enforcement', () => deepAccess(auctionCache.floorData, 'enforcements.enforceJS'), + 'dealsEnforced', () => deepAccess(auctionCache.floorData, 'enforcements.floorDeals'), 'skipRate', 'fetchStatus', 'floorMin', @@ -267,7 +267,7 @@ function sendMessage(auctionId, bidWonId, trigger) { // gather gdpr info if (auctionCache.gdprConsent) { - auction.gdpr = utils.pick(auctionCache.gdprConsent, [ + auction.gdpr = pick(auctionCache.gdprConsent, [ 'gdprApplies as applies', 'consentString', 'apiVersion as version' @@ -276,13 +276,13 @@ function sendMessage(auctionId, bidWonId, trigger) { // gather session info if (auctionCache.session) { - message.session = utils.pick(auctionCache.session, [ + message.session = pick(auctionCache.session, [ 'id', 'pvid', 'start', 'expires' ]); - if (!utils.isEmpty(auctionCache.session.fpkvs)) { + if (!isEmpty(auctionCache.session.fpkvs)) { message.fpkvs = Object.keys(auctionCache.session.fpkvs).map(key => { return { key, value: auctionCache.session.fpkvs[key] }; }); @@ -329,14 +329,14 @@ function sendMessage(auctionId, bidWonId, trigger) { } function adUnitIsOnlyInstream(adUnit) { - return adUnit.mediaTypes && Object.keys(adUnit.mediaTypes).length === 1 && utils.deepAccess(adUnit, 'mediaTypes.video.context') === 'instream'; + return adUnit.mediaTypes && Object.keys(adUnit.mediaTypes).length === 1 && deepAccess(adUnit, 'mediaTypes.video.context') === 'instream'; } function getBidPrice(bid) { // get the cpm from bidResponse let cpm; let currency; - if (bid.status === BID_REJECTED && utils.deepAccess(bid, 'floorData.cpmAfterAdjustments')) { + if (bid.status === BID_REJECTED && deepAccess(bid, 'floorData.cpmAfterAdjustments')) { // if bid was rejected and bid.floorData.cpmAfterAdjustments use it cpm = bid.floorData.cpmAfterAdjustments; currency = bid.floorData.floorCurrency; @@ -356,7 +356,7 @@ function getBidPrice(bid) { try { return Number(prebidGlobal.convertCurrency(cpm, currency, 'USD')); } catch (err) { - utils.logWarn('Rubicon Analytics Adapter: Could not determine the bidPriceUSD of the bid ', bid); + logWarn('Rubicon Analytics Adapter: Could not determine the bidPriceUSD of the bid ', bid); } } @@ -367,7 +367,7 @@ export function parseBidResponse(bid, previousBidResponse, auctionFloorData) { if (previousBidResponse && previousBidResponse.bidPriceUSD > responsePrice) { return previousBidResponse; } - return utils.pick(bid, [ + return pick(bid, [ 'bidPriceUSD', () => responsePrice, 'dealId', 'status', @@ -378,13 +378,13 @@ export function parseBidResponse(bid, previousBidResponse, auctionFloorData) { return (width && height) ? { width, height } : undefined; }, // Handling use case where pbs sends back 0 or '0' bidIds - 'pbsBidId', pbsBidId => pbsBidId == 0 ? utils.generateUUID() : pbsBidId, - 'seatBidId', seatBidId => seatBidId == 0 ? utils.generateUUID() : seatBidId, - 'floorValue', () => utils.deepAccess(bid, 'floorData.floorValue'), - 'floorRuleValue', () => utils.deepAccess(bid, 'floorData.floorRuleValue'), - 'floorRule', () => utils.debugTurnedOn() ? utils.deepAccess(bid, 'floorData.floorRule') : undefined, + 'pbsBidId', pbsBidId => pbsBidId == 0 ? generateUUID() : pbsBidId, + 'seatBidId', seatBidId => seatBidId == 0 ? generateUUID() : seatBidId, + 'floorValue', () => deepAccess(bid, 'floorData.floorValue'), + 'floorRuleValue', () => deepAccess(bid, 'floorData.floorRuleValue'), + 'floorRule', () => debugTurnedOn() ? deepAccess(bid, 'floorData.floorRule') : undefined, 'adomains', () => { - let adomains = utils.deepAccess(bid, 'meta.advertiserDomains'); + let adomains = deepAccess(bid, 'meta.advertiserDomains'); return Array.isArray(adomains) && adomains.length > 0 ? adomains.slice(0, 10) : undefined } ]); @@ -397,7 +397,7 @@ function getUtmParams() { let search; try { - search = utils.parseQS(utils.getWindowLocation().search); + search = parseQS(getWindowLocation().search); } catch (e) { search = {}; } @@ -445,7 +445,7 @@ function getRpaCookie() { try { return JSON.parse(window.atob(encodedCookie)); } catch (e) { - utils.logError(`Rubicon Analytics: Unable to decode ${COOKIE_NAME} value: `, e); + logError(`Rubicon Analytics: Unable to decode ${COOKIE_NAME} value: `, e); } } return {}; @@ -455,7 +455,7 @@ function setRpaCookie(decodedCookie) { try { storage.setDataInLocalStorage(COOKIE_NAME, window.btoa(JSON.stringify(decodedCookie))); } catch (e) { - utils.logError(`Rubicon Analytics: Unable to encode ${COOKIE_NAME} value: `, e); + logError(`Rubicon Analytics: Unable to encode ${COOKIE_NAME} value: `, e); } } @@ -468,7 +468,7 @@ function updateRpaCookie() { decodedRpaCookie.expires < currentTime ) { decodedRpaCookie = { - id: utils.generateUUID(), + id: generateUUID(), start: currentTime, expires: currentTime + END_EXPIRE_TIME, // six hours later, } @@ -485,7 +485,7 @@ function updateRpaCookie() { function subscribeToGamSlots() { window.googletag.pubads().addEventListener('slotRenderEnded', event => { - const isMatchingAdSlot = utils.isAdUnitCodeMatchingSlot(event.slot); + const isMatchingAdSlot = isAdUnitCodeMatchingSlot(event.slot); // loop through auctions and adUnits and mark the info Object.keys(cache.auctions).forEach(auctionId => { (Object.keys(cache.auctions[auctionId].bids) || []).forEach(bidId => { @@ -495,12 +495,12 @@ function subscribeToGamSlots() { // mark this adUnit as having been rendered by gam cache.auctions[auctionId].gamHasRendered[bid.adUnit.adUnitCode] = true; - bid.adUnit.gam = utils.pick(event, [ + bid.adUnit.gam = pick(event, [ // these come in as `null` from Gpt, which when stringified does not get removed // so set explicitly to undefined when not a number - 'advertiserId', advertiserId => utils.isNumber(advertiserId) ? advertiserId : undefined, - 'creativeId', creativeId => utils.isNumber(event.sourceAgnosticCreativeId) ? event.sourceAgnosticCreativeId : utils.isNumber(creativeId) ? creativeId : undefined, - 'lineItemId', lineItemId => utils.isNumber(event.sourceAgnosticLineItemId) ? event.sourceAgnosticLineItemId : utils.isNumber(lineItemId) ? lineItemId : undefined, + 'advertiserId', advertiserId => isNumber(advertiserId) ? advertiserId : undefined, + 'creativeId', creativeId => isNumber(event.sourceAgnosticCreativeId) ? event.sourceAgnosticCreativeId : isNumber(creativeId) ? creativeId : undefined, + 'lineItemId', lineItemId => isNumber(event.sourceAgnosticLineItemId) ? event.sourceAgnosticLineItemId : isNumber(lineItemId) ? lineItemId : undefined, 'adSlot', () => event.slot.getAdUnitPath(), 'isSlotEmpty', () => event.isEmpty || undefined ]); @@ -535,7 +535,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { if (config.options.endpoint) { this.getUrl = () => config.options.endpoint; } else { - utils.logError('required endpoint missing from rubicon analytics'); + logError('required endpoint missing from rubicon analytics'); error = true; } if (typeof config.options.sampling !== 'undefined') { @@ -543,7 +543,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { } if (typeof config.options.samplingFactor !== 'undefined') { if (typeof config.options.sampling !== 'undefined') { - utils.logWarn('Both options.samplingFactor and options.sampling enabled in rubicon analytics, defaulting to samplingFactor'); + logWarn('Both options.samplingFactor and options.sampling enabled in rubicon analytics, defaulting to samplingFactor'); } samplingFactor = parseFloat(config.options.samplingFactor); config.options.sampling = 1 / samplingFactor; @@ -553,10 +553,10 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { let validSamplingFactors = [1, 10, 20, 40, 100]; if (validSamplingFactors.indexOf(samplingFactor) === -1) { error = true; - utils.logError('invalid samplingFactor for rubicon analytics: ' + samplingFactor + ', must be one of ' + validSamplingFactors.join(', ')); + logError('invalid samplingFactor for rubicon analytics: ' + samplingFactor + ', must be one of ' + validSamplingFactors.join(', ')); } else if (!accountId) { error = true; - utils.logError('required accountId missing for rubicon analytics'); + logError('required accountId missing for rubicon analytics'); } if (!error) { @@ -575,26 +575,26 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { case AUCTION_INIT: // set the rubicon aliases setRubiconAliases(adapterManager.aliasRegistry); - let cacheEntry = utils.pick(args, [ + let cacheEntry = pick(args, [ 'timestamp', 'timeout' ]); cacheEntry.bids = {}; cacheEntry.bidsWon = {}; cacheEntry.gamHasRendered = {}; - cacheEntry.referrer = utils.deepAccess(args, 'bidderRequests.0.refererInfo.referer'); - const floorData = utils.deepAccess(args, 'bidderRequests.0.bids.0.floorData'); + cacheEntry.referrer = deepAccess(args, 'bidderRequests.0.refererInfo.referer'); + const floorData = deepAccess(args, 'bidderRequests.0.bids.0.floorData'); if (floorData) { cacheEntry.floorData = { ...floorData }; } - cacheEntry.gdprConsent = utils.deepAccess(args, 'bidderRequests.0.gdprConsent'); + cacheEntry.gdprConsent = deepAccess(args, 'bidderRequests.0.gdprConsent'); cacheEntry.session = storage.localStorageIsEnabled() && updateRpaCookie(); - cacheEntry.userIds = Object.keys(utils.deepAccess(args, 'bidderRequests.0.bids.0.userId', {})).map(id => { + cacheEntry.userIds = Object.keys(deepAccess(args, 'bidderRequests.0.bids.0.userId', {})).map(id => { return { provider: id, hasId: true } }); cache.auctions[args.auctionId] = cacheEntry; // register to listen to gpt events if not done yet - if (!cache.gpt.registered && utils.isGptPubadsDefined()) { + if (!cache.gpt.registered && isGptPubadsDefined()) { subscribeToGamSlots(); cache.gpt.registered = true; } else if (!cache.gpt.registered) { @@ -615,7 +615,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { cache.auctions[args.auctionId].gamHasRendered[bid.adUnitCode] = false; } - memo[bid.bidId] = utils.pick(bid, [ + memo[bid.bidId] = pick(bid, [ 'bidder', bidder => bidder.toLowerCase(), 'bidId', 'status', () => 'no-bid', // default a bid to no-bid until response is recieved or bid is timed out @@ -624,7 +624,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { switch (bid.bidder) { // specify bidder params we want here case 'rubicon': - return utils.pick(params, [ + return pick(params, [ 'accountId', 'siteId', 'zoneId' @@ -640,9 +640,9 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { 204: 'mid-roll', 205: 'post-roll', 207: 'vertical' - })[utils.deepAccess(bid, 'params.video.size_id')]; + })[deepAccess(bid, 'params.video.size_id')]; } else { - let startdelay = parseInt(utils.deepAccess(bid, 'params.video.startdelay'), 10); + let startdelay = parseInt(deepAccess(bid, 'params.video.startdelay'), 10); if (!isNaN(startdelay)) { if (startdelay > 0) { return 'mid-roll'; @@ -655,7 +655,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { } } }, - 'adUnit', () => utils.pick(bid, [ + 'adUnit', () => pick(bid, [ 'adUnitCode', 'transactionId', 'sizes as dimensions', sizes => sizes.map(sizeToDimensions), @@ -669,7 +669,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { if (typeof types === 'object') { if (!bid.sizes) { bid.dimensions = []; - utils._each(types, (type) => + _each(types, (type) => bid.dimensions = bid.dimensions.concat( type.sizes.map(sizeToDimensions) ) @@ -680,12 +680,12 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { return ['banner']; }, 'gam', () => { - if (utils.deepAccess(bid, 'ortb2Imp.ext.data.adserver.name') === 'gam') { + if (deepAccess(bid, 'ortb2Imp.ext.data.adserver.name') === 'gam') { return { adSlot: bid.ortb2Imp.ext.data.adserver.adslot } } }, - 'pbAdSlot', () => utils.deepAccess(bid, 'ortb2Imp.ext.data.pbadslot'), - 'pattern', () => utils.deepAccess(bid, 'ortb2Imp.ext.data.aupname') + 'pbAdSlot', () => deepAccess(bid, 'ortb2Imp.ext.data.pbadslot'), + 'pattern', () => deepAccess(bid, 'ortb2Imp.ext.data.aupname') ]) ]); return memo; @@ -702,15 +702,15 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { let bid = auctionEntry.bids[args.requestId]; // If floor resolved gptSlot but we have not yet, then update the adUnit to have the adSlot name - if (!utils.deepAccess(bid, 'adUnit.gam.adSlot') && utils.deepAccess(args, 'floorData.matchedFields.gptSlot')) { - utils.deepSetValue(bid, 'adUnit.gam.adSlot', args.floorData.matchedFields.gptSlot); + if (!deepAccess(bid, 'adUnit.gam.adSlot') && deepAccess(args, 'floorData.matchedFields.gptSlot')) { + deepSetValue(bid, 'adUnit.gam.adSlot', args.floorData.matchedFields.gptSlot); } // if we have not set enforcements yet set it - if (!utils.deepAccess(auctionEntry, 'floorData.enforcements') && utils.deepAccess(args, 'floorData.enforcements')) { + if (!deepAccess(auctionEntry, 'floorData.enforcements') && deepAccess(args, 'floorData.enforcements')) { auctionEntry.floorData.enforcements = { ...args.floorData.enforcements }; } if (!bid) { - utils.logError('Rubicon Anlytics Adapter Error: Could not find associated bid request for bid response with requestId: ', args.requestId); + 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); @@ -733,7 +733,7 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { bid.bidResponse = parseBidResponse(args, bid.bidResponse); break; case BIDDER_DONE: - const serverError = utils.deepAccess(args, 'serverErrors.0'); + const serverError = deepAccess(args, 'serverErrors.0'); const serverResponseTimeMs = args.serverResponseTimeMs; args.bids.forEach(bid => { let cachedBid = cache.auctions[bid.auctionId].bids[bid.bidId || bid.requestId]; diff --git a/modules/rubiconBidAdapter.js b/modules/rubiconBidAdapter.js index d502d7efb25..8e3733af947 100644 --- a/modules/rubiconBidAdapter.js +++ b/modules/rubiconBidAdapter.js @@ -1,4 +1,4 @@ -import * as utils from '../src/utils.js'; +import { mergeDeep, _each, logError, deepAccess, deepSetValue, isStr, isNumber, logWarn, convertTypes, isArray, parseSizesInput, logMessage } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; @@ -15,7 +15,7 @@ let rubiConf = {}; // we are saving these as global to this module so that if a pub accidentally overwrites the entire // rubicon object, then we do not lose other data config.getConfig('rubicon', config => { - utils.mergeDeep(rubiConf, config.rubicon); + mergeDeep(rubiConf, config.rubicon); }); const GVLID = 52; @@ -122,7 +122,7 @@ var sizeMap = { 578: '980x552', 580: '505x656' }; -utils._each(sizeMap, (item, key) => sizeMap[item] = key); +_each(sizeMap, (item, key) => sizeMap[item] = key); export const spec = { code: 'rubicon', @@ -140,7 +140,7 @@ export const spec = { for (let 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]])) { - utils.logError('Rubicon: wrong format of accountId or siteId or zoneId.') + logError('Rubicon: wrong format of accountId or siteId or zoneId.') return false } } @@ -180,7 +180,7 @@ export const spec = { ext: { [bidRequest.bidder]: bidRequest.params }, - video: utils.deepAccess(bidRequest, 'mediaTypes.video') || {} + video: deepAccess(bidRequest, 'mediaTypes.video') || {} }], ext: { prebid: { @@ -217,7 +217,7 @@ export const spec = { let modules = (getGlobal()).installedModules; if (modules && (!modules.length || modules.indexOf('rubiconAnalyticsAdapter') !== -1)) { - utils.deepSetValue(data, 'ext.prebid.analytics', {'rubicon': {'client-analytics': true}}); + deepSetValue(data, 'ext.prebid.analytics', {'rubicon': {'client-analytics': true}}); } let bidFloor; @@ -230,11 +230,11 @@ export const spec = { size: parseSizes(bidRequest, 'video') }); } catch (e) { - utils.logError('Rubicon: getFloor threw an error: ', e); + logError('Rubicon: getFloor threw an error: ', e); } bidFloor = typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseInt(floorInfo.floor)) ? parseFloat(floorInfo.floor) : undefined; } else { - bidFloor = parseFloat(utils.deepAccess(bidRequest, 'params.floor')); + bidFloor = parseFloat(deepAccess(bidRequest, 'params.floor')); } if (!isNaN(bidFloor)) { data.imp[0].bidfloor = bidFloor; @@ -253,36 +253,36 @@ export const spec = { gdprApplies = bidderRequest.gdprConsent.gdprApplies ? 1 : 0; } - utils.deepSetValue(data, 'regs.ext.gdpr', gdprApplies); - utils.deepSetValue(data, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + deepSetValue(data, 'regs.ext.gdpr', gdprApplies); + deepSetValue(data, 'user.ext.consent', bidderRequest.gdprConsent.consentString); } if (bidderRequest.uspConsent) { - utils.deepSetValue(data, 'regs.ext.us_privacy', bidderRequest.uspConsent); + deepSetValue(data, 'regs.ext.us_privacy', bidderRequest.uspConsent); } - const eids = utils.deepAccess(bidderRequest, 'bids.0.userIdAsEids'); + const eids = deepAccess(bidderRequest, 'bids.0.userIdAsEids'); if (eids && eids.length) { - utils.deepSetValue(data, 'user.ext.eids', eids); + deepSetValue(data, 'user.ext.eids', eids); } // set user.id value from config value const configUserId = config.getConfig('user.id'); if (configUserId) { - utils.deepSetValue(data, 'user.id', configUserId); + deepSetValue(data, 'user.id', configUserId); } if (config.getConfig('coppa') === true) { - utils.deepSetValue(data, 'regs.coppa', 1); + deepSetValue(data, 'regs.coppa', 1); } if (bidRequest.schain && hasValidSupplyChainParams(bidRequest.schain)) { - utils.deepSetValue(data, 'source.ext.schain', bidRequest.schain); + deepSetValue(data, 'source.ext.schain', bidRequest.schain); } const multibid = config.getConfig('multibid'); if (multibid) { - utils.deepSetValue(data, 'ext.prebid.multibid', multibid.reduce((result, i) => { + deepSetValue(data, 'ext.prebid.multibid', multibid.reduce((result, i) => { let obj = {}; Object.keys(i).forEach(key => { @@ -299,11 +299,11 @@ export const spec = { // if storedAuctionResponse has been set, pass SRID if (bidRequest.storedAuctionResponse) { - utils.deepSetValue(data.imp[0], 'ext.prebid.storedauctionresponse.id', bidRequest.storedAuctionResponse.toString()); + deepSetValue(data.imp[0], 'ext.prebid.storedauctionresponse.id', bidRequest.storedAuctionResponse.toString()); } // set ext.prebid.auctiontimestamp using auction time - utils.deepSetValue(data.imp[0], 'ext.prebid.auctiontimestamp', bidderRequest.auctionStart); + deepSetValue(data.imp[0], 'ext.prebid.auctiontimestamp', bidderRequest.auctionStart); return { method: 'POST', @@ -322,14 +322,14 @@ export const spec = { url: `https://${rubiConf.bannerHost || 'fastlane'}.rubiconproject.com/a/api/fastlane.json`, data: spec.getOrderedParams(bidParams).reduce((paramString, key) => { const propValue = bidParams[key]; - return ((utils.isStr(propValue) && propValue !== '') || utils.isNumber(propValue)) ? `${paramString}${encodeParam(key, propValue)}&` : paramString; + return ((isStr(propValue) && propValue !== '') || isNumber(propValue)) ? `${paramString}${encodeParam(key, propValue)}&` : paramString; }, '') + `slots=1&rand=${Math.random()}`, 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 + // note: groupBy wasn't used because deep property access was needed const nonVideoRequests = bidRequests.filter(bidRequest => bidType(bidRequest) === 'banner'); const groupedBidRequests = nonVideoRequests.reduce((groupedBids, bid) => { (groupedBids[bid.params['siteId']] = groupedBids[bid.params['siteId']] || []).push(bid); @@ -353,7 +353,7 @@ export const spec = { url: `https://${rubiConf.bannerHost || 'fastlane'}.rubiconproject.com/a/api/fastlane.json`, data: spec.getOrderedParams(combinedSlotParams).reduce((paramString, key) => { const propValue = combinedSlotParams[key]; - return ((utils.isStr(propValue) && propValue !== '') || utils.isNumber(propValue)) ? `${paramString}${encodeParam(key, propValue)}&` : paramString; + return ((isStr(propValue) && propValue !== '') || isNumber(propValue)) ? `${paramString}${encodeParam(key, propValue)}&` : paramString; }, '') + `slots=${bidsInGroup.length}&rand=${Math.random()}`, bidRequest: bidsInGroup }); @@ -485,7 +485,7 @@ export const spec = { size: '*' }); } catch (e) { - utils.logError('Rubicon: getFloor threw an error: ', e); + logError('Rubicon: getFloor threw an error: ', e); } data['rp_hard_floor'] = typeof floorInfo === 'object' && floorInfo.currency === 'USD' && !isNaN(parseInt(floorInfo.floor)) ? floorInfo.floor : undefined; } @@ -493,7 +493,7 @@ export const spec = { // 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 let posMapping = {1: 'atf', 3: 'btf'}; - let pos = posMapping[utils.deepAccess(bidRequest, 'mediaTypes.banner.pos')] || ''; + let pos = posMapping[deepAccess(bidRequest, 'mediaTypes.banner.pos')] || ''; data['p_pos'] = (params.position === 'atf' || params.position === 'btf') ? params.position : pos; // pass publisher provided userId if configured @@ -532,7 +532,7 @@ export const spec = { } } } catch (e) { - utils.logWarn('Rubicon: error reading eid:', eid, e); + logWarn('Rubicon: error reading eid:', eid, e); } }); } @@ -605,9 +605,9 @@ export const spec = { // video response from PBS Java openRTB if (responseObj.seatbid) { - const responseErrors = utils.deepAccess(responseObj, 'ext.errors.rubicon'); + const responseErrors = deepAccess(responseObj, 'ext.errors.rubicon'); if (Array.isArray(responseErrors) && responseErrors.length > 0) { - utils.logWarn('Rubicon: Error in video response'); + logWarn('Rubicon: Error in video response'); } const bids = []; responseObj.seatbid.forEach(seatbid => { @@ -620,8 +620,8 @@ export const spec = { bidderCode: seatbid.seat, ttl: 300, netRevenue: rubiConf.netRevenue !== false, // If anything other than false, netRev is true - width: bid.w || utils.deepAccess(bidRequest, 'mediaTypes.video.w') || utils.deepAccess(bidRequest, 'params.video.playerWidth'), - height: bid.h || utils.deepAccess(bidRequest, 'mediaTypes.video.h') || utils.deepAccess(bidRequest, 'params.video.playerHeight'), + width: bid.w || deepAccess(bidRequest, 'mediaTypes.video.w') || deepAccess(bidRequest, 'params.video.playerWidth'), + height: bid.h || deepAccess(bidRequest, 'mediaTypes.video.h') || deepAccess(bidRequest, 'params.video.playerHeight'), }; if (bid.id) { @@ -633,22 +633,22 @@ export const spec = { } if (bid.adomain) { - utils.deepSetValue(bidObject, 'meta.advertiserDomains', Array.isArray(bid.adomain) ? bid.adomain : [bid.adomain]); + deepSetValue(bidObject, 'meta.advertiserDomains', Array.isArray(bid.adomain) ? bid.adomain : [bid.adomain]); } - if (utils.deepAccess(bid, 'ext.bidder.rp.advid')) { - utils.deepSetValue(bidObject, 'meta.advertiserId', bid.ext.bidder.rp.advid); + if (deepAccess(bid, 'ext.bidder.rp.advid')) { + deepSetValue(bidObject, 'meta.advertiserId', bid.ext.bidder.rp.advid); } - let serverResponseTimeMs = utils.deepAccess(responseObj, 'ext.responsetimemillis.rubicon'); + let serverResponseTimeMs = deepAccess(responseObj, 'ext.responsetimemillis.rubicon'); if (bidRequest && serverResponseTimeMs) { bidRequest.serverResponseTimeMs = serverResponseTimeMs; } - if (utils.deepAccess(bid, 'ext.prebid.type') === VIDEO) { + if (deepAccess(bid, 'ext.prebid.type') === VIDEO) { bidObject.mediaType = VIDEO; - utils.deepSetValue(bidObject, 'meta.mediaType', VIDEO); - const extPrebidTargeting = utils.deepAccess(bid, 'ext.prebid.targeting'); + deepSetValue(bidObject, 'meta.mediaType', VIDEO); + const extPrebidTargeting = deepAccess(bid, 'ext.prebid.targeting'); // If ext.prebid.targeting exists, add it as a property value named 'adserverTargeting' if (extPrebidTargeting && typeof extPrebidTargeting === 'object') { @@ -670,12 +670,12 @@ export const spec = { if (bid.nurl) { bidObject.vastUrl = bid.nurl; } if (!bidObject.vastUrl && bid.nurl) { bidObject.vastUrl = bid.nurl; } - const videoContext = utils.deepAccess(bidRequest, 'mediaTypes.video.context'); + const videoContext = deepAccess(bidRequest, 'mediaTypes.video.context'); if (videoContext.toLowerCase() === 'outstream') { bidObject.renderer = outstreamRenderer(bidObject); } } else { - utils.logWarn('Rubicon: video response received non-video media type'); + logWarn('Rubicon: video response received non-video media type'); } bids.push(bidObject); @@ -754,7 +754,7 @@ export const spec = { bids.push(bid); } else { - utils.logError(`Rubicon: bidRequest undefined at index position:${i}`, bidRequest, responseObj); + logError(`Rubicon: bidRequest undefined at index position:${i}`, bidRequest, responseObj); } return bids; @@ -794,7 +794,7 @@ export const spec = { * @return {Object} params bid params */ transformBidParams: function(params, isOpenRtb) { - return utils.convertTypes({ + return convertTypes({ 'accountId': 'number', 'siteId': 'number', 'zoneId': 'number' @@ -885,7 +885,7 @@ function outstreamRenderer(rtbBid) { try { renderer.setRender(renderBid); } catch (err) { - utils.logWarn('Prebid Error calling setRender on renderer', err); + logWarn('Prebid Error calling setRender on renderer', err); } return renderer; @@ -900,7 +900,7 @@ function parseSizes(bid, mediaType) { params.video.playerWidth, params.video.playerHeight ]; - } else if (Array.isArray(utils.deepAccess(bid, 'mediaTypes.video.playerSize')) && bid.mediaTypes.video.playerSize.length === 1) { + } else if (Array.isArray(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]; @@ -912,12 +912,12 @@ function parseSizes(bid, mediaType) { let sizes = []; if (Array.isArray(params.sizes)) { sizes = params.sizes; - } else if (typeof utils.deepAccess(bid, 'mediaTypes.banner.sizes') !== 'undefined') { + } else if (typeof 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 { - utils.logWarn('Rubicon: no sizes are setup or found'); + logWarn('Rubicon: no sizes are setup or found'); } return masSizeOrdering(sizes); @@ -984,16 +984,16 @@ function applyFPD(bidRequest, mediaType, data) { site: {ext: {data: {...bidRequest.params.inventory}}} }; - if (bidRequest.params.keywords) BID_FPD.site.keywords = (utils.isArray(bidRequest.params.keywords)) ? bidRequest.params.keywords.join(',') : bidRequest.params.keywords; + if (bidRequest.params.keywords) BID_FPD.site.keywords = (isArray(bidRequest.params.keywords)) ? bidRequest.params.keywords.join(',') : bidRequest.params.keywords; - let fpd = utils.mergeDeep({}, config.getConfig('ortb2') || {}, BID_FPD); - let impData = utils.deepAccess(bidRequest.ortb2Imp, 'ext.data') || {}; + let fpd = mergeDeep({}, config.getConfig('ortb2') || {}, BID_FPD); + let impData = deepAccess(bidRequest.ortb2Imp, 'ext.data') || {}; const SEGTAX = {user: [4], site: [1, 2, 5, 6]}; const MAP = {user: 'tg_v.', site: 'tg_i.', adserver: 'tg_i.dfp_ad_unit_code', pbadslot: 'tg_i.pbadslot', keywords: 'kw'}; const validate = function(prop, key, parentName) { if (key === 'data' && Array.isArray(prop)) { - return prop.filter(name => name.segment && utils.deepAccess(name, 'ext.segtax') && SEGTAX[parentName] && - SEGTAX[parentName].indexOf(utils.deepAccess(name, 'ext.segtax')) !== -1).map(value => { + return prop.filter(name => name.segment && deepAccess(name, 'ext.segtax') && SEGTAX[parentName] && + SEGTAX[parentName].indexOf(deepAccess(name, 'ext.segtax')) !== -1).map(value => { let segments = value.segment.filter(obj => obj.id).reduce((result, obj) => { result.push(obj.id); return result; @@ -1001,12 +1001,12 @@ function applyFPD(bidRequest, mediaType, data) { if (segments.length > 0) return segments.toString(); }).toString(); } else if (typeof prop === 'object' && !Array.isArray(prop)) { - utils.logWarn('Rubicon: Filtered FPD key: ', key, ': Expected value to be string, integer, or an array of strings/ints'); + logWarn('Rubicon: Filtered FPD key: ', key, ': Expected value to be string, integer, or an array of strings/ints'); } else if (typeof prop !== 'undefined') { return (Array.isArray(prop)) ? prop.filter(value => { if (typeof value !== 'object' && typeof value !== 'undefined') return value.toString(); - utils.logWarn('Rubicon: Filtered value: ', value, 'for key', key, ': Expected value to be string, integer, or an array of strings/ints'); + logWarn('Rubicon: Filtered value: ', value, 'for key', key, ': Expected value to be string, integer, or an array of strings/ints'); }).toString() : prop.toString(); } }; @@ -1045,10 +1045,10 @@ function applyFPD(bidRequest, mediaType, data) { }); } else { if (Object.keys(impData).length) { - utils.mergeDeep(data.imp[0].ext, {data: impData}); + mergeDeep(data.imp[0].ext, {data: impData}); } - utils.mergeDeep(data, fpd); + mergeDeep(data, fpd); } } @@ -1057,7 +1057,7 @@ function applyFPD(bidRequest, mediaType, data) { * @returns {*} */ function mapSizes(sizes) { - return utils.parseSizesInput(sizes) + return parseSizesInput(sizes) // map sizes while excluding non-matches .reduce((result, size) => { let mappedSize = parseInt(sizeMap[size], 10); @@ -1075,10 +1075,10 @@ function mapSizes(sizes) { * @returns {boolean} */ export function hasVideoMediaType(bidRequest) { - if (typeof utils.deepAccess(bidRequest, 'params.video') !== 'object') { + if (typeof deepAccess(bidRequest, 'params.video') !== 'object') { return false; } - return (typeof utils.deepAccess(bidRequest, `mediaTypes.${VIDEO}`) !== 'undefined'); + return (typeof deepAccess(bidRequest, `mediaTypes.${VIDEO}`) !== 'undefined'); } /** @@ -1092,9 +1092,9 @@ function bidType(bid, log = false) { 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(utils.deepAccess(bid, `mediaTypes.${VIDEO}.context`)) === -1) { + if (['outstream', 'instream'].indexOf(deepAccess(bid, `mediaTypes.${VIDEO}.context`)) === -1) { if (log) { - utils.logError('Rubicon: mediaTypes.video.context must be outstream or instream'); + logError('Rubicon: mediaTypes.video.context must be outstream or instream'); } return; } @@ -1102,13 +1102,13 @@ function bidType(bid, log = false) { // 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) { - utils.logError('Rubicon: could not determine the playerSize of the video'); + logError('Rubicon: could not determine the playerSize of the video'); } return; } if (log) { - utils.logMessage('Rubicon: making video request for adUnit', bid.adUnitCode); + logMessage('Rubicon: making video request for adUnit', bid.adUnitCode); } return 'video'; } else { @@ -1116,14 +1116,14 @@ function bidType(bid, log = false) { // if we cannot determine them, we reject it! if (parseSizes(bid, 'banner').length === 0) { if (log) { - utils.logError('Rubicon: could not determine the sizes for banner request'); + logError('Rubicon: could not determine the sizes for banner request'); } return; } // everything looks good for banner so lets do it if (log) { - utils.logMessage('Rubicon: making banner request for adUnit', bid.adUnitCode); + logMessage('Rubicon: making banner request for adUnit', bid.adUnitCode); } return 'banner'; } @@ -1155,13 +1155,13 @@ export function masSizeOrdering(sizes) { export function determineRubiconVideoSizeId(bid) { // If we have size_id in the bid then use it - let rubiconSizeId = parseInt(utils.deepAccess(bid, 'params.video.size_id')); + let rubiconSizeId = parseInt(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 utils.deepAccess(bid, `mediaTypes.${VIDEO}.context`) === 'outstream' ? 203 : 201; + return deepAccess(bid, `mediaTypes.${VIDEO}.context`) === 'outstream' ? 203 : 201; } /** @@ -1204,9 +1204,9 @@ export function hasValidVideoParams(bid) { } // loop through each param and verify it has the correct Object.keys(requiredParams).forEach(function(param) { - if (Object.prototype.toString.call(utils.deepAccess(bid, 'mediaTypes.video.' + param)) !== requiredParams[param]) { + if (Object.prototype.toString.call(deepAccess(bid, 'mediaTypes.video.' + param)) !== requiredParams[param]) { isValid = false; - utils.logError('Rubicon: mediaTypes.video.' + param + ' is required and must be of type: ' + requiredParams[param]); + logError('Rubicon: mediaTypes.video.' + param + ' is required and must be of type: ' + requiredParams[param]); } }) return isValid; @@ -1225,7 +1225,7 @@ export function hasValidSupplyChainParams(schain) { if (!status) return status; return requiredFields.every(field => node.hasOwnProperty(field)); }, true); - if (!isValid) utils.logError('Rubicon: required schain params missing'); + if (!isValid) logError('Rubicon: required schain params missing'); return isValid; } diff --git a/modules/scaleableAnalyticsAdapter.js b/modules/scaleableAnalyticsAdapter.js index 955a08c065a..d7379462e0d 100644 --- a/modules/scaleableAnalyticsAdapter.js +++ b/modules/scaleableAnalyticsAdapter.js @@ -4,7 +4,7 @@ import { ajax } from '../src/ajax.js'; import CONSTANTS from '../src/constants.json'; import adapter from '../src/AnalyticsAdapter.js'; import adapterManager from '../src/adapterManager.js'; -import * as utils from '../src/utils.js'; +import { logMessage } from '../src/utils.js'; // Object.entries polyfill const entries = Object.entries || function(obj) { @@ -62,7 +62,7 @@ scaleableAnalytics.enableAnalytics = config => { scaleableAnalytics.originEnableAnalytics(config); scaleableAnalytics.enableAnalytics = function _enable() { - return utils.logMessage(`Analytics adapter for "${global}" already enabled, unnecessary call to \`enableAnalytics\`.`); + return logMessage(`Analytics adapter for "${global}" already enabled, unnecessary call to \`enableAnalytics\`.`); }; } diff --git a/modules/seedingAllianceBidAdapter.js b/modules/seedingAllianceBidAdapter.js index 258830d422a..00f3b64fb44 100755 --- a/modules/seedingAllianceBidAdapter.js +++ b/modules/seedingAllianceBidAdapter.js @@ -3,7 +3,7 @@ import { registerBidder } from '../src/adapters/bidderFactory.js'; import { NATIVE } from '../src/mediaTypes.js'; -import * as utils from '../src/utils.js'; +import { _map, deepSetValue, isEmpty, deepAccess } from '../src/utils.js'; import { config } from '../src/config.js'; const BIDDER_CODE = 'seedingAlliance'; @@ -65,7 +65,7 @@ export const spec = { let url = bidderRequest.refererInfo.referer; const imp = validBidRequests.map((bid, id) => { - const assets = utils._map(bid.nativeParams, (bidParams, key) => { + const assets = _map(bid.nativeParams, (bidParams, key) => { const props = NATIVE_PARAMS[key]; const asset = { @@ -130,8 +130,8 @@ export const spec = { }; if (bidderRequest && bidderRequest.gdprConsent) { - utils.deepSetValue(request, 'user.ext.consent', bidderRequest.gdprConsent.consentString); - utils.deepSetValue(request, 'regs.ext.gdpr', (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' && bidderRequest.gdprConsent.gdprApplies) ? 1 : 0); + deepSetValue(request, 'user.ext.consent', bidderRequest.gdprConsent.consentString); + deepSetValue(request, 'regs.ext.gdpr', (typeof bidderRequest.gdprConsent.gdprApplies === 'boolean' && bidderRequest.gdprConsent.gdprApplies) ? 1 : 0); } return { @@ -146,7 +146,7 @@ export const spec = { }, interpretResponse: function(serverResponse, { bids }) { - if (utils.isEmpty(serverResponse.body)) { + if (isEmpty(serverResponse.body)) { return []; } @@ -219,7 +219,7 @@ function parseNative(bid) { function setOnAny(collection, key) { for (let i = 0, result; i < collection.length; i++) { - result = utils.deepAccess(collection[i], key); + result = deepAccess(collection[i], key); if (result) { return result; }