From 4e3915a68d8d4ba84287eb7b5595904d76d05f96 Mon Sep 17 00:00:00 2001 From: Demetrio Girardi Date: Wed, 25 May 2022 07:42:30 -0700 Subject: [PATCH] Squashed commit of the following: commit d6d54cab25563e0ebece456d75733c9b9d78175e Author: Demetrio Girardi Date: Wed May 25 07:40:48 2022 -0700 fix lint commit 43898cdf487b67061e48d65b7c469884df05918a Author: Demetrio Girardi Date: Wed May 25 07:37:46 2022 -0700 Do not provide a default value for publisherDomain commit 5db64028f42935d2b62f58052562b9ae908c58f8 Author: Demetrio Girardi Date: Wed May 25 07:33:45 2022 -0700 convert bidders: pass 2 commit a916edbb527f3342abfc2f55485918b08f8c2d30 Author: Demetrio Girardi Date: Wed May 25 07:09:05 2022 -0700 convert bidders: done! commit 1922bfbf57058b333540f9fef157bb177288dd51 Author: Demetrio Girardi Date: Wed May 25 06:53:44 2022 -0700 convert bidders: visx commit 31bb9c05044ca911ed683c7f86147ff9475964a1 Merge: dd22a3ddf e524628b9 Author: Demetrio Girardi Date: Wed May 25 06:40:54 2022 -0700 Merge branch 'prebid-7' into referer-merge commit e524628b9e001ddc2c82adfc8c7e6b9e208fa8b4 Merge: c88581601 14ae8d5bc Author: Demetrio Girardi Date: Wed May 25 06:35:12 2022 -0700 Merge branch 'master' into prebid-7 commit 14ae8d5bc28780d7cd64b4913935326ada58b595 Author: Patrick McCann Date: Tue May 24 15:58:21 2022 -0400 Update fintezaAnalyticsAdapter_spec.js (#8467) commit b01ec406a94e1ecd0a6537b1aca085b9101805bd Author: Prebid.js automated release Date: Tue May 24 18:40:10 2022 +0000 Increment version to 6.27.0-pre commit e728f54ba4ce90e0bfe65f1d6cd08b594fbe3314 Author: Prebid.js automated release Date: Tue May 24 18:40:10 2022 +0000 Prebid 6.26.0 release commit 170f6fd547047e69fba3416ea1351d79ef382b81 Author: Patrick McCann Date: Tue May 24 14:23:40 2022 -0400 Revert "Akamai RTD: fixed bugs on rtd module and added the entropy values (#8284)" (#8464) This reverts commit c4348892b5d3425d21373e1dcf4d67da04fed622. commit a6e3c449e0e7609386dc81ef5eb68ff1112ba882 Author: Demetrio Girardi Date: Tue May 24 11:21:26 2022 -0700 Remove medianetRtdProvider tests (#8463) commit dd22a3ddf7dd6b01a9adfacada728f9c435cd0b0 Author: Demetrio Girardi Date: Tue May 24 10:31:14 2022 -0700 convert bidders: unicorn commit de3801d8709e362d0507ee75dd92807734824bbf Author: Demetrio Girardi Date: Tue May 24 09:17:20 2022 -0700 convert bidders: sovrn commit 063dfb337e67fb8fff98a738e86459ab3851b13e Author: Demetrio Girardi Date: Tue May 24 08:54:47 2022 -0700 convert bidders: smarthub commit 1a4d03b0fb3c362f3d73a2ac4ee652aa2dba3768 Author: Demetrio Girardi Date: Tue May 24 08:33:45 2022 -0700 convert bidders: rubicon commit c8858160191bab0b5bce420e7734da567d74d0ab Author: Nic G Date: Tue May 24 11:09:27 2022 -0400 Sortable Adapter Removal (#8447) commit f11bcdaa0695662e13faee53520ae176fbb0ee29 Author: asurovenko-zeta <80847074+asurovenko-zeta@users.noreply.github.com> Date: Tue May 24 20:51:05 2022 +0700 Zeta global ssp bid adapter: add shortname param (#8454) * zeta_global_sspBidAdapter shortname was added * remove the trash Co-authored-by: Surovenko Alexey commit c4348892b5d3425d21373e1dcf4d67da04fed622 Author: Vikas Srivastava <30315503+visrivastava@users.noreply.github.com> Date: Tue May 24 19:17:57 2022 +0530 Akamai RTD: fixed bugs on rtd module and added the entropy values (#8284) * Fixed bugs on rtd module and added the entropy values required by Akamai DAP * Fixed the timeout issue in build browserstack tests * Fixing review comments * Fixing review comments - using storage manager for managing localStorage * Fixing review comments - using loadExternalScript method to load the script * Fixed unit test case * Fixing review comments - Added consent handling commit 06ecc38f44e3bd538a9ce30de59e4812bc0cdef1 Author: haruka-yamashita2 <39541428+haruka-yamashita2@users.noreply.github.com> Date: Tue May 24 22:24:00 2022 +0900 Rename id to aoneId from dacId (#8453) --- modules/adhashBidAdapter.js | 3 +- modules/betweenBidAdapter.js | 10 +- modules/compassBidAdapter.js | 4 +- modules/dacIdSystem.md | 8 +- modules/logicadBidAdapter.js | 3 +- modules/mediafuseBidAdapter.js | 3 +- modules/rtbsapeBidAdapter.js | 3 +- modules/rubiconAnalyticsAdapter.js | 5 +- modules/rubiconBidAdapter.js | 5 +- modules/saambaaBidAdapter.js | 5 +- modules/seedingAllianceBidAdapter.js | 2 +- modules/seedtagBidAdapter.js | 2 +- modules/sharethroughBidAdapter.js | 7 +- modules/showheroes-bsBidAdapter.js | 2 +- modules/sirdataRtdProvider.js | 4 +- modules/slimcutBidAdapter.js | 4 +- modules/smaatoBidAdapter.js | 7 +- modules/smartadserverBidAdapter.js | 3 +- modules/smarthubBidAdapter.js | 2 +- modules/smartxBidAdapter.js | 3 +- modules/smartyadsBidAdapter.js | 3 +- modules/smilewantedBidAdapter.js | 2 +- modules/sonobiBidAdapter.js | 3 +- modules/sortableBidAdapter.js | 366 ------------ modules/sortableBidAdapter.md | 109 ---- modules/sovrnAnalyticsAdapter.js | 49 +- modules/sovrnBidAdapter.js | 23 +- modules/spotxBidAdapter.js | 5 +- modules/sspBCBidAdapter.js | 24 +- modules/sublimeBidAdapter.js | 3 +- modules/synacormediaBidAdapter.js | 7 +- modules/tappxBidAdapter.js | 17 +- modules/teadsBidAdapter.js | 5 +- modules/telariaBidAdapter.js | 5 +- modules/theAdxBidAdapter.js | 5 +- modules/tpmnBidAdapter.js | 6 +- modules/tripleliftBidAdapter.js | 3 +- modules/ttdBidAdapter.js | 4 +- modules/ucfunnelBidAdapter.js | 4 +- modules/undertoneBidAdapter.js | 20 +- modules/unicornBidAdapter.js | 6 +- modules/vdoaiBidAdapter.js | 3 +- modules/ventesBidAdapter.js | 16 +- modules/vidazooBidAdapter.js | 3 +- modules/videobyteBidAdapter.js | 6 +- modules/videoheroesBidAdapter.js | 22 +- modules/videoreachBidAdapter.js | 3 +- modules/vidoomyBidAdapter.js | 8 +- modules/viewdeosDXBidAdapter.js | 3 +- modules/visxBidAdapter.js | 5 +- modules/voxBidAdapter.js | 3 +- modules/waardexBidAdapter.js | 3 +- modules/winrBidAdapter.js | 3 +- modules/yahoosspBidAdapter.js | 2 +- modules/yandexBidAdapter.js | 6 +- modules/yieldlabBidAdapter.js | 5 +- modules/yieldliftBidAdapter.js | 6 +- modules/yieldmoBidAdapter.js | 9 +- modules/yieldoneAnalyticsAdapter.js | 3 +- modules/yieldoneBidAdapter.js | 3 +- modules/yuktamediaAnalyticsAdapter.js | 3 +- modules/zetaBidAdapter.js | 2 +- modules/zeta_global_sspBidAdapter.js | 18 +- package-lock.json | 2 +- package.json | 2 +- src/config.js | 5 +- .../modules/fintezaAnalyticsAdapter_spec.js | 8 +- test/spec/modules/mediafuseBidAdapter_spec.js | 2 +- test/spec/modules/medianetRtdProvider_spec.js | 146 ----- .../modules/rubiconAnalyticsAdapter_spec.js | 4 +- test/spec/modules/rubiconBidAdapter_spec.js | 19 +- test/spec/modules/seedtagBidAdapter_spec.js | 2 +- .../modules/sharethroughBidAdapter_spec.js | 2 +- test/spec/modules/slimcutBidAdapter_spec.js | 2 +- test/spec/modules/smaatoBidAdapter_spec.js | 4 +- test/spec/modules/smarthubBidAdapter_spec.js | 2 +- test/spec/modules/smartxBidAdapter_spec.js | 4 +- .../modules/smilewantedBidAdapter_spec.js | 2 +- test/spec/modules/sonobiBidAdapter_spec.js | 6 +- test/spec/modules/sortableBidAdapter_spec.js | 547 ------------------ test/spec/modules/sovrnBidAdapter_spec.js | 3 +- test/spec/modules/spotxBidAdapter_spec.js | 25 +- test/spec/modules/sspBCBidAdapter_spec.js | 23 +- test/spec/modules/tappxBidAdapter_spec.js | 2 +- test/spec/modules/teadsBidAdapter_spec.js | 2 +- test/spec/modules/tpmnBidAdapter_spec.js | 2 +- .../spec/modules/tripleliftBidAdapter_spec.js | 2 +- test/spec/modules/ttdBidAdapter_spec.js | 2 +- test/spec/modules/undertoneBidAdapter_spec.js | 32 +- test/spec/modules/unicornBidAdapter_spec.js | 2 +- test/spec/modules/ventesBidAdapter_spec.js | 5 +- test/spec/modules/vidazooBidAdapter_spec.js | 4 +- test/spec/modules/vidoomyBidAdapter_spec.js | 3 +- test/spec/modules/visxBidAdapter_spec.js | 12 +- test/spec/modules/voxBidAdapter_spec.js | 2 +- test/spec/modules/winrBidAdapter_spec.js | 2 +- test/spec/modules/yahoosspBidAdapter_spec.js | 4 +- test/spec/modules/yandexBidAdapter_spec.js | 4 +- test/spec/modules/yieldlabBidAdapter_spec.js | 2 +- .../modules/yieldoneAnalyticsAdapter_spec.js | 6 +- test/spec/modules/zetaBidAdapter_spec.js | 2 +- .../modules/zeta_global_sspBidAdapter_spec.js | 66 ++- 102 files changed, 313 insertions(+), 1542 deletions(-) delete mode 100644 modules/sortableBidAdapter.js delete mode 100644 modules/sortableBidAdapter.md delete mode 100644 test/spec/modules/medianetRtdProvider_spec.js delete mode 100644 test/spec/modules/sortableBidAdapter_spec.js diff --git a/modules/adhashBidAdapter.js b/modules/adhashBidAdapter.js index 7f5af047993..977d161b214 100644 --- a/modules/adhashBidAdapter.js +++ b/modules/adhashBidAdapter.js @@ -103,7 +103,8 @@ export const spec = { const bidRequests = []; let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + referrer = bidderRequest.refererInfo.page; } for (var i = 0; i < validBidRequests.length; i++) { var index = Math.floor(Math.random() * validBidRequests[i].sizes.length); diff --git a/modules/betweenBidAdapter.js b/modules/betweenBidAdapter.js index e4907c15974..9e57d0f5cd3 100644 --- a/modules/betweenBidAdapter.js +++ b/modules/betweenBidAdapter.js @@ -1,7 +1,6 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; -import { getAdUnitSizes, parseSizesInput } from '../src/utils.js'; -import { getRefererInfo } from '../src/refererDetection.js'; -import {includes} from '../src/polyfill.js' +import {getAdUnitSizes, parseSizesInput} from '../src/utils.js'; +import {includes} from '../src/polyfill.js'; const BIDDER_CODE = 'between'; let ENDPOINT = 'https://ads.betweendigital.com/adjson?t=prebid'; @@ -29,7 +28,7 @@ export const spec = { buildRequests: function(validBidRequests, bidderRequest) { let requests = []; const gdprConsent = bidderRequest && bidderRequest.gdprConsent; - const refInfo = getRefererInfo(); + const refInfo = bidderRequest?.refererInfo; validBidRequests.forEach((i) => { const video = i.mediaTypes && i.mediaTypes.video; @@ -79,7 +78,8 @@ export const spec = { params.schain = encodeToBase64WebSafe(JSON.stringify(i.schain)); } - if (refInfo && refInfo.referer) params.ref = refInfo.referer; + // TODO: is 'page' the right value here? + if (refInfo && refInfo.page) params.ref = refInfo.page; if (gdprConsent) { if (typeof gdprConsent.gdprApplies !== 'undefined') { diff --git a/modules/compassBidAdapter.js b/modules/compassBidAdapter.js index 77f918276bc..e439e72d1d9 100644 --- a/modules/compassBidAdapter.js +++ b/modules/compassBidAdapter.js @@ -126,14 +126,14 @@ export const spec = { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); } catch (e) { logMessage(e); } - + // TODO: does the fallback make sense here? let location = refferLocation || winLocation; const language = (navigator && navigator.language) ? navigator.language.split('-')[0] : ''; const host = location.host; diff --git a/modules/dacIdSystem.md b/modules/dacIdSystem.md index b422d0a536d..0239b4557e9 100644 --- a/modules/dacIdSystem.md +++ b/modules/dacIdSystem.md @@ -1,11 +1,11 @@ -## DAC User ID Submodule +## AudienceOne User ID Submodule -DAC ID, provided by [D.A.Consortium Inc.](https://www.dac.co.jp/), is ID for ad targeting by using 1st party cookie. +AudienceOne ID, provided by [D.A.Consortium Inc.](https://www.dac.co.jp/), is ID for ad targeting by using 1st party cookie. Please contact D.A.Consortium Inc. before using this ID. -## Building Prebid with DAC ID Support +## Building Prebid with AudienceOne ID Support -First, make sure to add the DAC ID submodule to your Prebid.js package with: +First, make sure to add the AudienceOne ID submodule to your Prebid.js package with: ``` gulp build --modules=dacIdSystem diff --git a/modules/logicadBidAdapter.js b/modules/logicadBidAdapter.js index 2c919f9c157..4f996ba3f09 100644 --- a/modules/logicadBidAdapter.js +++ b/modules/logicadBidAdapter.js @@ -60,7 +60,8 @@ function newBidRequest(bid, bidderRequest) { mediaTypes: bid.mediaTypes }], prebidJsVersion: '$prebid.version$', - referrer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referrer: bidderRequest.refererInfo.page, auctionStartTime: bidderRequest.auctionStart, eids: bid.userIdAsEids, }; diff --git a/modules/mediafuseBidAdapter.js b/modules/mediafuseBidAdapter.js index f813fb2e131..5f3339ee5b4 100644 --- a/modules/mediafuseBidAdapter.js +++ b/modules/mediafuseBidAdapter.js @@ -228,7 +228,8 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: this collects everything it finds, except for canonicalUrl + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack.map((url) => encodeURIComponent(url)).join(',') diff --git a/modules/rtbsapeBidAdapter.js b/modules/rtbsapeBidAdapter.js index d58b3a1f240..cf3d79eb377 100644 --- a/modules/rtbsapeBidAdapter.js +++ b/modules/rtbsapeBidAdapter.js @@ -43,7 +43,8 @@ export const spec = { requestId: bidderRequest.bidderRequestId, bids: validBidRequests, timezone: (tz > 0 ? '-' : '+') + padInt(Math.floor(Math.abs(tz) / 60)) + ':' + padInt(Math.abs(tz) % 60), - refererInfo: bidderRequest.refererInfo + // TODO: please do not send internal data structures over the network + refererInfo: bidderRequest.refererInfo.legacy }, } }, diff --git a/modules/rubiconAnalyticsAdapter.js b/modules/rubiconAnalyticsAdapter.js index 69335ff33a8..ca0d0c1fe65 100644 --- a/modules/rubiconAnalyticsAdapter.js +++ b/modules/rubiconAnalyticsAdapter.js @@ -148,7 +148,7 @@ function sendBillingEvent(event) { function getBasicEventDetails(auctionId, trigger) { let auctionCache = cache.auctions[auctionId]; - let referrer = config.getConfig('pageUrl') || pageReferer || (auctionCache && auctionCache.referrer); + let referrer = pageReferer || (auctionCache && auctionCache.referrer); let message = { timestamps: { prebidLoaded: rubiconAdapter.MODULE_INITIALIZED_TIME, @@ -676,7 +676,8 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { cacheEntry.bids = {}; cacheEntry.bidsWon = {}; cacheEntry.gamHasRendered = {}; - cacheEntry.referrer = pageReferer = deepAccess(args, 'bidderRequests.0.refererInfo.referer'); + // TODO: is 'page' the right value here? + cacheEntry.referrer = pageReferer = deepAccess(args, 'bidderRequests.0.refererInfo.page'); cacheEntry.bidderOrder = []; const floorData = deepAccess(args, 'bidderRequests.0.bids.0.floorData'); if (floorData) { diff --git a/modules/rubiconBidAdapter.js b/modules/rubiconBidAdapter.js index 5b3234a2257..f3c5f65a63a 100644 --- a/modules/rubiconBidAdapter.js +++ b/modules/rubiconBidAdapter.js @@ -836,11 +836,12 @@ function _getScreenResolution() { * @returns {string} */ function _getPageUrl(bidRequest, bidderRequest) { - let pageUrl = config.getConfig('pageUrl'); + let pageUrl; if (bidRequest.params.referrer) { pageUrl = bidRequest.params.referrer; } else if (!pageUrl) { - pageUrl = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + pageUrl = bidderRequest.refererInfo.page; } return bidRequest.params.secure ? pageUrl.replace(/^http:/i, 'https:') : pageUrl; } diff --git a/modules/saambaaBidAdapter.js b/modules/saambaaBidAdapter.js index 36ab50bfddd..5300fe879b0 100644 --- a/modules/saambaaBidAdapter.js +++ b/modules/saambaaBidAdapter.js @@ -1,3 +1,5 @@ +// TODO: this adapter appears to have no tests + import {deepAccess, generateUUID, isEmpty, isFn, parseSizesInput, parseUrl} from '../src/utils.js'; import {config} from '../src/config.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; @@ -321,8 +323,7 @@ function createVideoRequestData(bid, bidderRequest) { } function getTopWindowLocation(bidderRequest) { - let url = bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer; - return parseUrl(config.getConfig('pageUrl') || url, { decodeSearchAsString: true }); + return parseUrl(bidderRequest?.refererInfo?.page || '', { decodeSearchAsString: true }); } function createBannerRequestData(bid, bidderRequest) { diff --git a/modules/seedingAllianceBidAdapter.js b/modules/seedingAllianceBidAdapter.js index a071cdfea80..98b27de678c 100755 --- a/modules/seedingAllianceBidAdapter.js +++ b/modules/seedingAllianceBidAdapter.js @@ -62,7 +62,7 @@ export const spec = { const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net'; const tid = validBidRequests[0].transactionId; const cur = [config.getConfig('currency.adServerCurrency') || DEFAULT_CUR]; - let url = bidderRequest.refererInfo.referer; + let url = bidderRequest.refererInfo.page; const imp = validBidRequests.map((bid, id) => { const assets = _map(bid.nativeParams, (bidParams, key) => { diff --git a/modules/seedtagBidAdapter.js b/modules/seedtagBidAdapter.js index 2f61e0bc56a..f0f82a002f3 100644 --- a/modules/seedtagBidAdapter.js +++ b/modules/seedtagBidAdapter.js @@ -189,7 +189,7 @@ export const spec = { */ buildRequests(validBidRequests, bidderRequest) { const payload = { - url: bidderRequest.refererInfo.referer, + url: bidderRequest.refererInfo.page, publisherToken: validBidRequests[0].params.publisherId, cmp: !!bidderRequest.gdprConsent, timeout: bidderRequest.timeout, diff --git a/modules/sharethroughBidAdapter.js b/modules/sharethroughBidAdapter.js index de90cc86196..777b2bac31b 100644 --- a/modules/sharethroughBidAdapter.js +++ b/modules/sharethroughBidAdapter.js @@ -34,9 +34,10 @@ export const sharethroughAdapterSpec = { cur: ['USD'], tmax: timeout, site: { - domain: window.location.hostname, - page: window.location.href, - ref: deepAccess(bidderRequest, 'refererInfo.referer'), + // TODO: do the fallbacks make sense here? + domain: deepAccess(bidderRequest, 'refererInfo.domain') || window.location.hostname, + page: deepAccess(bidderRequest, 'refererInfo.page') || window.location.href, + ref: deepAccess(bidderRequest, 'refererInfo.ref'), ...firstPartyData.site, }, device: { diff --git a/modules/showheroes-bsBidAdapter.js b/modules/showheroes-bsBidAdapter.js index 4c8fb812edc..c1987a32c80 100644 --- a/modules/showheroes-bsBidAdapter.js +++ b/modules/showheroes-bsBidAdapter.js @@ -30,7 +30,7 @@ export const spec = { }, buildRequests: function(validBidRequests, bidderRequest) { let adUnits = []; - const pageURL = validBidRequests[0].params.contentPageUrl || bidderRequest.refererInfo.referer; + const pageURL = validBidRequests[0].params.contentPageUrl || bidderRequest.refererInfo.page; const isStage = !!validBidRequests[0].params.stage; const isOutstream = deepAccess(validBidRequests[0], 'mediaTypes.video.context') === 'outstream'; const isCustomRender = deepAccess(validBidRequests[0], 'params.outstreamOptions.customRender'); diff --git a/modules/sirdataRtdProvider.js b/modules/sirdataRtdProvider.js index 098016ce125..532d938375e 100644 --- a/modules/sirdataRtdProvider.js +++ b/modules/sirdataRtdProvider.js @@ -47,8 +47,8 @@ export function getSegmentsAndCategories(reqBidsConfigObj, onDone, moduleConfig, sirdataDomain = 'sddan.com'; sendWithCredentials = true; } - - var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().referer; + // TODO: is 'page' the right value here? + var actualUrl = moduleConfig.params.actualUrl || getRefererInfo().page; const url = 'https://kvt.' + sirdataDomain + '/api/v1/public/p/' + moduleConfig.params.partnerId + '/d/' + moduleConfig.params.key + '/s?callback=&gdpr=' + gdprApplies + '&gdpr_consent=' + tcString + (actualUrl ? '&url=' + encodeURIComponent(actualUrl) : ''); diff --git a/modules/slimcutBidAdapter.js b/modules/slimcutBidAdapter.js index 2d35e09d777..1e3e6ec9871 100644 --- a/modules/slimcutBidAdapter.js +++ b/modules/slimcutBidAdapter.js @@ -113,8 +113,8 @@ function buildRequestObject(bid) { } function getReferrerInfo(bidderRequest) { let ref = window.location.href; - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - ref = bidderRequest.refererInfo.referer; + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + ref = bidderRequest.refererInfo.page; } return ref; } diff --git a/modules/smaatoBidAdapter.js b/modules/smaatoBidAdapter.js index 522d7ed8e12..a24f296102f 100644 --- a/modules/smaatoBidAdapter.js +++ b/modules/smaatoBidAdapter.js @@ -16,9 +16,10 @@ const buildOpenRtbBidRequest = (bidRequest, bidderRequest) => { tmax: bidderRequest.timeout, site: { id: window.location.hostname, - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo.referer + // TODO: do the fallbacks make sense here? + domain: bidderRequest.refererInfo.domain || window.location.hostname, + page: bidderRequest.refererInfo.page || window.location.href, + ref: bidderRequest.refererInfo.ref }, device: { language: (navigator && navigator.language) ? navigator.language.split('-')[0] : '', diff --git a/modules/smartadserverBidAdapter.js b/modules/smartadserverBidAdapter.js index d6e1c8de452..5d64cad27b5 100644 --- a/modules/smartadserverBidAdapter.js +++ b/modules/smartadserverBidAdapter.js @@ -148,7 +148,8 @@ export const spec = { 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, + // TODO: is 'page' the right value here? + pageDomain: bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page ? bidderRequest.refererInfo.page : undefined, transactionId: bid.transactionId, timeout: config.getConfig('bidderTimeout'), bidId: bid.bidId, diff --git a/modules/smarthubBidAdapter.js b/modules/smarthubBidAdapter.js index a94ed972b2e..e15b4c488f4 100644 --- a/modules/smarthubBidAdapter.js +++ b/modules/smarthubBidAdapter.js @@ -100,7 +100,7 @@ function buildRequestParams(bidderRequest = {}, placements = []) { winLocation = window.location; } - const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.referer; + const refferUrl = bidderRequest.refererInfo && bidderRequest.refererInfo.page; let refferLocation; try { refferLocation = refferUrl && new URL(refferUrl); diff --git a/modules/smartxBidAdapter.js b/modules/smartxBidAdapter.js index 00c962445d9..5b36e17be11 100644 --- a/modules/smartxBidAdapter.js +++ b/modules/smartxBidAdapter.js @@ -67,7 +67,8 @@ export const spec = { * @return ServerRequest Info describing the request to the server. */ buildRequests: function (bidRequests, bidderRequest) { - const page = bidderRequest.refererInfo.referer; + // TODO: does the fallback make sense here? + const page = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; const isPageSecure = !!page.match(/^https:/) const smartxRequests = bidRequests.map(function (bid) { diff --git a/modules/smartyadsBidAdapter.js b/modules/smartyadsBidAdapter.js index b999d02b059..5125eacc716 100644 --- a/modules/smartyadsBidAdapter.js +++ b/modules/smartyadsBidAdapter.js @@ -35,8 +35,9 @@ export const spec = { buildRequests: (validBidRequests = [], bidderRequest) => { let winTop = window; let location; + // TODO: this odd try-catch block was copied in several adapters; it doesn't seem to be correct for cross-origin try { - location = new URL(bidderRequest.refererInfo.referer) + location = new URL(bidderRequest.refererInfo.page) winTop = window.top; } catch (e) { location = winTop.location; diff --git a/modules/smilewantedBidAdapter.js b/modules/smilewantedBidAdapter.js index 73bd6101670..9d4951526f6 100644 --- a/modules/smilewantedBidAdapter.js +++ b/modules/smilewantedBidAdapter.js @@ -51,7 +51,7 @@ export const spec = { } if (bidderRequest && bidderRequest.refererInfo) { - payload.pageDomain = bidderRequest.refererInfo.referer || ''; + payload.pageDomain = bidderRequest.refererInfo.page || ''; } if (bidderRequest && bidderRequest.gdprConsent) { diff --git a/modules/sonobiBidAdapter.js b/modules/sonobiBidAdapter.js index 8ea05ff52d6..b65fde79553 100644 --- a/modules/sonobiBidAdapter.js +++ b/modules/sonobiBidAdapter.js @@ -76,7 +76,8 @@ export const spec = { const payload = { 'key_maker': JSON.stringify(data), - 'ref': bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + 'ref': bidderRequest.refererInfo.page, 's': generateUUID(), 'pv': PAGEVIEW_ID, 'vp': _getPlatform(), diff --git a/modules/sortableBidAdapter.js b/modules/sortableBidAdapter.js deleted file mode 100644 index 15246a10eab..00000000000 --- a/modules/sortableBidAdapter.js +++ /dev/null @@ -1,366 +0,0 @@ -import { _each, logError, isFn, isPlainObject, isNumber, isStr, deepAccess, parseUrl, _map, getUniqueIdentifierStr, createTrackPixelHtml } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js'; -import { createEidsArray } from './userId/eids.js'; - -const BIDDER_CODE = 'sortable'; -const SERVER_URL = 'https://c.deployads.com'; - -function setAssetRequired(native, asset) { - if (native.required) { - asset.required = 1; - } - return asset; -} - -function buildNativeRequest(nativeMediaType) { - const assets = []; - const title = nativeMediaType.title; - if (title) { - assets.push(setAssetRequired(title, { - title: {len: title.len} - })); - } - const img = nativeMediaType.image; - if (img) { - assets.push(setAssetRequired(img, { - img: { - type: 3, // Main - wmin: 1, - hmin: 1 - } - })); - } - const icon = nativeMediaType.icon; - if (icon) { - assets.push(setAssetRequired(icon, { - img: { - type: 1, // Icon - wmin: 1, - hmin: 1 - } - })); - } - const body = nativeMediaType.body; - if (body) { - assets.push(setAssetRequired(body, {data: {type: 2}})); - } - const cta = nativeMediaType.cta; - if (cta) { - assets.push(setAssetRequired(cta, {data: {type: 12}})); - } - const sponsoredBy = nativeMediaType.sponsoredBy; - if (sponsoredBy) { - assets.push(setAssetRequired(sponsoredBy, {data: {type: 1}})); - } - - _each(assets, (asset, id) => asset.id = id); - return { - ver: '1', - request: JSON.stringify({ - ver: '1', - assets - }) - }; -} - -function tryParseNativeResponse(adm) { - let native = null; - try { - native = JSON.parse(adm); - } catch (e) { - 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) { - const native = {}; - if (response.link) { - native.clickUrl = response.link.url; - } - _each(response.assets, 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) { - _each(responses, res => { - if (res.body && res.body.ext && res.body.ext.sync_dsps && res.body.ext.sync_dsps.length) { - _each(res.body.ext.sync_dsps, sync => { - if (sync[0] === type && sync[1]) { - syncs.push({type, url: sync[1]}); - } - }); - } - }); -} - -function getBidFloor(bid) { - if (!isFn(bid.getFloor)) { - return bid.params.floor ? bid.params.floor : null; - } - - // MediaType and Size will automatically get set for us if the bid only has - // one media type or one size. - let floor = bid.getFloor({ - currency: 'USD', - mediaType: '*', - size: '*' - }); - if (isPlainObject(floor) && !isNaN(floor.floor) && floor.currency === 'USD') { - return floor.floor; - } - return null; -} - -export const spec = { - code: BIDDER_CODE, - supportedMediaTypes: [BANNER, NATIVE, VIDEO], - - isBidRequestValid: function(bid) { - const sortableConfig = config.getConfig('sortable'); - const haveSiteId = (sortableConfig && !!sortableConfig.siteId) || bid.params.siteId; - const floor = getBidFloor(bid); - const validFloor = !floor || isNumber(floor); - const validKeywords = !bid.params.keywords || - (isPlainObject(bid.params.keywords) && - Object.keys(bid.params.keywords).every(key => - isStr(key) && isStr(bid.params.keywords[key]) - )) - const isBanner = !bid.mediaTypes || bid.mediaTypes[BANNER] || !(bid.mediaTypes[NATIVE] || bid.mediaTypes[VIDEO]); - const bannerSizes = isBanner ? deepAccess(bid, `mediaType.${BANNER}.sizes`) || bid.sizes : null; - return !!(bid.params.tagId && haveSiteId && validFloor && validKeywords && (!isBanner || - (bannerSizes && bannerSizes.length > 0 && bannerSizes.every(sizeArr => sizeArr.length == 2 && sizeArr.every(num => isNumber(num)))))); - }, - - buildRequests: function(validBidReqs, bidderRequest) { - const sortableConfig = config.getConfig('sortable') || {}; - const globalSiteId = sortableConfig.siteId; - let loc = parseUrl(bidderRequest.refererInfo.referer); - - const sortableImps = _map(validBidReqs, bid => { - const rv = { - id: bid.bidId, - tagid: bid.params.tagId, - ext: {} - }; - const bannerMediaType = deepAccess(bid, `mediaTypes.${BANNER}`); - const nativeMediaType = deepAccess(bid, `mediaTypes.${NATIVE}`); - const videoMediaType = deepAccess(bid, `mediaTypes.${VIDEO}`); - if (bannerMediaType || !(nativeMediaType || videoMediaType)) { - const bannerSizes = (bannerMediaType && bannerMediaType.sizes) || bid.sizes; - rv.banner = { - format: _map(bannerSizes, ([width, height]) => ({w: width, h: height})) - }; - } - if (nativeMediaType) { - rv.native = buildNativeRequest(nativeMediaType); - } - if (videoMediaType && videoMediaType.context === 'instream') { - const video = {placement: 1}; - video.mimes = videoMediaType.mimes || []; - video.minduration = deepAccess(bid, 'params.video.minduration') || 10; - video.maxduration = deepAccess(bid, 'params.video.maxduration') || 60; - const startDelay = deepAccess(bid, 'params.video.startdelay'); - if (startDelay != null) { - video.startdelay = startDelay; - } - if (videoMediaType.playerSize && videoMediaType.playerSize.length) { - const 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; - } - const floor = getBidFloor(bid); - if (floor) { - rv.floor = floor; - } - if (bid.params.keywords) { - rv.ext.keywords = bid.params.keywords; - } - if (bid.params.bidderParams) { - _each(bid.params.bidderParams, (params, partner) => { - rv.ext[partner] = params; - }); - } - rv.ext.gpid = deepAccess(bid, 'ortb2Imp.ext.data.pbadslot'); - return rv; - }); - const gdprConsent = bidderRequest && bidderRequest.gdprConsent; - const bidUserId = validBidReqs[0].userId; - const eids = createEidsArray(bidUserId); - const sortableBidReq = { - id: 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 - }, - }, - user: { - ext: {} - } - }; - 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 (eids.length) { - sortableBidReq.user.ext.eids = eids; - } - if (bidderRequest.uspConsent) { - sortableBidReq.regs.ext.us_privacy = bidderRequest.uspConsent; - } - return { - method: 'POST', - url: `${SERVER_URL}/openrtb2/auction?src=$$REPO_AND_VERSION$$&host=${loc.hostname}`, - data: JSON.stringify(sortableBidReq), - options: {contentType: 'text/plain'} - }; - }, - - interpretResponse: function(serverResponse) { - const { body: {id, seatbid} } = serverResponse; - const sortableBids = []; - if (id && seatbid) { - _each(seatbid, seatbid => { - _each(seatbid.bid, bid => { - const 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: BANNER, - ttl: 60, - meta: { - advertiserDomains: bid.adomain || [] - } - }; - if (bid.adm) { - const adFormat = deepAccess(bid, 'ext.ad_format') - if (adFormat === 'native') { - let native = tryParseNativeResponse(bid.adm); - if (!native) { - return; - } - bidObj.mediaType = NATIVE; - bidObj.native = interpretNativeResponse(native); - } else if (adFormat === 'instream') { - bidObj.mediaType = VIDEO; - bidObj.vastXml = bid.adm; - } else { - bidObj.mediaType = BANNER; - bidObj.ad = bid.adm; - if (bid.nurl) { - bidObj.ad += 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: (syncOptions, responses) => { - const syncs = []; - if (syncOptions.iframeEnabled) { - transformSyncs(responses, 'iframe', syncs); - } - if (syncOptions.pixelEnabled) { - transformSyncs(responses, 'image', syncs); - } - return syncs; - }, - - onTimeout(details) { - fetch(`${SERVER_URL}/prebid/timeout`, { - method: 'POST', - body: JSON.stringify(details), - mode: 'no-cors', - headers: new Headers({ - 'Content-Type': 'text/plain' - }) - }); - } -}; - -registerBidder(spec); diff --git a/modules/sortableBidAdapter.md b/modules/sortableBidAdapter.md deleted file mode 100644 index c24ad85b752..00000000000 --- a/modules/sortableBidAdapter.md +++ /dev/null @@ -1,109 +0,0 @@ -# Overview - -``` -Module Name: Sortable Bid Adapter -Module Type: Bidder Adapter -Maintainer: prebid@sortable.com -``` - -# Description - -Sortable's adapter integration to the Prebid library. Posts plain-text JSON to the /openrtb2/auction endpoint. - -# Test Parameters - -``` -var adUnits = [ - { - code: 'test-pb-leaderboard', - mediaTypes: { - banner: { - sizes: [[728, 90]], - } - }, - bids: [{ - bidder: 'sortable', - params: { - tagId: 'test-pb-leaderboard', - siteId: 'prebid.example.com', - 'keywords': { - 'key1': 'val1', - 'key2': 'val2' - } - } - }] - }, { - code: 'test-pb-banner', - mediaTypes: { - banner: { - sizes: [[300, 250]], - } - }, - bids: [{ - bidder: 'sortable', - params: { - tagId: 'test-pb-banner', - siteId: 'prebid.example.com' - } - }] - }, { - code: 'test-pb-sidebar', - mediaTypes: { - banner: { - sizes: [[160, 600]], - } - }, - bids: [{ - bidder: 'sortable', - params: { - tagId: 'test-pb-sidebar', - siteId: 'prebid.example.com', - 'keywords': { - 'keyA': 'valA' - } - } - }] - }, { - code: 'test-pb-native', - mediaTypes: { - native: { - title: { - required: true, - len: 800 - }, - image: { - required: true, - sizes: [790, 294], - }, - sponsoredBy: { - required: true - } - } - }, - bids: [{ - bidder: 'sortable', - params: { - tagId: 'test-pb-native', - siteId: 'prebid.example.com' - } - }] - }, { - code: 'test-pb-video', - mediaTypes: { - video: { - playerSize: [640,480], - context: 'instream' - } - }, - bids: [ - { - bidder: 'sortable', - params: { - tagId: 'test-pb-video', - siteId: 'prebid.example.com' - } - } - ] - } -] -``` diff --git a/modules/sovrnAnalyticsAdapter.js b/modules/sovrnAnalyticsAdapter.js index 065cfaa58bc..8a5b816ef43 100644 --- a/modules/sovrnAnalyticsAdapter.js +++ b/modules/sovrnAnalyticsAdapter.js @@ -5,6 +5,7 @@ import CONSTANTS from '../src/constants.json'; import {ajaxBuilder} from '../src/ajax.js'; import {config} from '../src/config.js'; import {find, includes} from '../src/polyfill.js'; +import {getRefererInfo} from '../src/refererDetection.js'; const ajax = ajaxBuilder(0) @@ -22,49 +23,11 @@ let pbaUrl = 'https://pba.aws.lijit.com/analytics' let currentAuctions = {}; const analyticsType = 'endpoint' -const getClosestTop = () => { - let topFrame = window; - let 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, - err - }; -}; - -const getBestPageUrl = ({err: crossDomainError, topFrame}) => { - let 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) { - let aOrigins = window.location.ancestorOrigins; - sBestPageUrl = aOrigins[aOrigins.length - 1]; - } - } catch (e) { - sBestPageUrl = topFrame.document.referrer; - } - } - - return sBestPageUrl; -}; -const rootURL = getBestPageUrl(getClosestTop()) +const rootURL = (() => { + const ref = getRefererInfo(); + // TODO: does the fallback make sense here? + return ref.page || ref.topmostLocation; +})(); let sovrnAnalyticsAdapter = Object.assign(adapter({url: pbaUrl, analyticsType}), { track({ eventType, args }) { diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 1f33250a160..13a866d61f5 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -1,7 +1,17 @@ -import { _each, getBidIdParameter, isArray, parseUrl, getUniqueIdentifierStr, deepSetValue, logError, deepAccess, isInteger, logWarn } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js' -import { ADPOD, BANNER, VIDEO } from '../src/mediaTypes.js' -import { createEidsArray } from './userId/eids.js' +import { + _each, + deepAccess, + deepSetValue, + getBidIdParameter, + getUniqueIdentifierStr, + isArray, + isInteger, + logError, + logWarn +} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {ADPOD, BANNER, VIDEO} from '../src/mediaTypes.js'; +import {createEidsArray} from './userId/eids.js'; const ORTB_VIDEO_PARAMS = { 'mimes': (value) => Array.isArray(value) && value.length > 0 && value.every(v => typeof v === 'string'), @@ -137,9 +147,8 @@ export const spec = { const fpd = bidderRequest.ortb2 || {}; const site = fpd.site || {} - site.page = bidderRequest.refererInfo.referer - // clever trick to get the domain - site.domain = parseUrl(site.page).hostname + site.page = bidderRequest.refererInfo.page + site.domain = bidderRequest.refererInfo.domain const sovrnBidReq = { id: getUniqueIdentifierStr(), diff --git a/modules/spotxBidAdapter.js b/modules/spotxBidAdapter.js index 2fd403058d1..59c3f3a417e 100644 --- a/modules/spotxBidAdapter.js +++ b/modules/spotxBidAdapter.js @@ -68,7 +68,8 @@ export const spec = { * @return {ServerRequest} Info describing the request to the server. */ buildRequests: function(bidRequests, bidderRequest) { - const referer = bidderRequest.refererInfo.referer; + // TODO: does the fallback make sense here? + const referer = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; const isPageSecure = !!referer.match(/^https:/); const siteId = ''; @@ -76,8 +77,6 @@ export const spec = { let page; if (getBidIdParameter('page', bid.params)) { page = getBidIdParameter('page', bid.params); - } else if (config.getConfig('pageUrl')) { - page = config.getConfig('pageUrl'); } else { page = referer; } diff --git a/modules/sspBCBidAdapter.js b/modules/sspBCBidAdapter.js index 67f806ff792..c8e3d6cb5d3 100644 --- a/modules/sspBCBidAdapter.js +++ b/modules/sspBCBidAdapter.js @@ -1,9 +1,9 @@ -import { deepAccess, isArray, logWarn, parseUrl, getWindowTop } from '../src/utils.js'; -import { ajax } from '../src/ajax.js'; -import { config } from '../src/config.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js'; -import { includes as strIncludes } from '../src/polyfill.js'; +import {deepAccess, getWindowTop, isArray, logWarn} from '../src/utils.js'; +import {ajax} from '../src/ajax.js'; +import {config} from '../src/config.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; +import {includes as strIncludes} from '../src/polyfill.js'; const BIDDER_CODE = 'sspBC'; const BIDDER_URL = 'https://ssp.wp.pl/bidder/'; @@ -543,18 +543,12 @@ const spec = { const siteId = setOnAny(validBidRequests, 'params.siteId'); const publisherId = setOnAny(validBidRequests, 'params.publisherId'); - const page = setOnAny(validBidRequests, 'params.page') || bidderRequest.refererInfo.referer; - const domain = setOnAny(validBidRequests, 'params.domain') || parseUrl(page).hostname; + const page = setOnAny(validBidRequests, 'params.page') || bidderRequest.refererInfo.page; + const domain = setOnAny(validBidRequests, 'params.domain') || bidderRequest.refererInfo.domain; const tmax = setOnAny(validBidRequests, 'params.tmax') ? parseInt(setOnAny(validBidRequests, 'params.tmax'), 10) : TMAX; const pbver = '$prebid.version$'; const testMode = setOnAny(validBidRequests, 'params.test') ? 1 : undefined; - - let ref; - - try { - if (W.self === W.top && document.referrer) { ref = document.referrer; } - } catch (e) { - } + const ref = bidderRequest.refererInfo.ref; const payload = { id: bidderRequest.auctionId, diff --git a/modules/sublimeBidAdapter.js b/modules/sublimeBidAdapter.js index 4dfdd4f3faa..2d177fbe6eb 100644 --- a/modules/sublimeBidAdapter.js +++ b/modules/sublimeBidAdapter.js @@ -154,7 +154,8 @@ function buildRequests(validBidRequests, bidderRequest) { // RefererInfo if (bidderRequest && bidderRequest.refererInfo) { - commonPayload.referer = bidderRequest.refererInfo.referer; + // TODO: is 'topmostLocation' the right value here? + commonPayload.referer = bidderRequest.refererInfo.topmostLocation; commonPayload.numIframes = bidderRequest.refererInfo.numIframes; } // GDPR handling diff --git a/modules/synacormediaBidAdapter.js b/modules/synacormediaBidAdapter.js index 4cc648a2e04..b651d1d4bbc 100644 --- a/modules/synacormediaBidAdapter.js +++ b/modules/synacormediaBidAdapter.js @@ -38,9 +38,10 @@ export const spec = { const openRtbBidRequest = { id: bidderRequest.auctionId, site: { - domain: config.getConfig('publisherDomain') || location.hostname, - page: refererInfo.referer, - ref: document.referrer + // TODO: does the fallback make sense here? + domain: refererInfo.domain || location.hostname, + page: refererInfo.page, + ref: refererInfo.ref }, device: { ua: navigator.userAgent diff --git a/modules/tappxBidAdapter.js b/modules/tappxBidAdapter.js index 769e8f73565..fd038f3104e 100644 --- a/modules/tappxBidAdapter.js +++ b/modules/tappxBidAdapter.js @@ -5,6 +5,7 @@ import { registerBidder } from '../src/adapters/bidderFactory.js'; import { BANNER, VIDEO } from '../src/mediaTypes.js'; import { config } from '../src/config.js'; import { Renderer } from '../src/Renderer.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'tappx'; const GVLID_CODE = 628; @@ -555,19 +556,9 @@ export function _checkParamDataType(key, value, datatype) { } export function _extractPageUrl(validBidRequests, bidderRequest) { - let referrer = deepAccess(bidderRequest, 'refererInfo.referer'); - let page = deepAccess(bidderRequest, 'refererInfo.canonicalUrl') || deepAccess(window, 'location.href'); - let paramUrl = deepAccess(validBidRequests, 'params.domainUrl') || config.getConfig('pageUrl'); - - let domainUrl = referrer || page || paramUrl; - - try { - domainUrl = domainUrl.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img)[0].replace(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?/img, ''); - } catch (error) { - domainUrl = undefined; - } - - return domainUrl; + // TODO: does the fallback make sense? + let url = bidderRequest?.refererInfo?.page || bidderRequest.refererInfo?.topmostLocation; + return parseDomain(url, {noLeadingWww: true}); } registerBidder(spec); diff --git a/modules/teadsBidAdapter.js b/modules/teadsBidAdapter.js index ea94411b80f..1dc4626ee85 100644 --- a/modules/teadsBidAdapter.js +++ b/modules/teadsBidAdapter.js @@ -126,8 +126,9 @@ export const spec = { function getReferrerInfo(bidderRequest) { let ref = ''; - if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - ref = bidderRequest.refererInfo.referer; + if (bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + // TODO: is 'page' the right value here? + ref = bidderRequest.refererInfo.page; } return ref; } diff --git a/modules/telariaBidAdapter.js b/modules/telariaBidAdapter.js index 42913414cbc..f43f59b256e 100644 --- a/modules/telariaBidAdapter.js +++ b/modules/telariaBidAdapter.js @@ -247,8 +247,9 @@ function generateUrl(bid, bidderRequest) { } } - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - url += (`&referrer=${encodeURIComponent(bidderRequest.refererInfo.referer)}`); + if (bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + // TODO: is 'page' the right value here? + url += (`&referrer=${encodeURIComponent(bidderRequest.refererInfo.page)}`); } } diff --git a/modules/theAdxBidAdapter.js b/modules/theAdxBidAdapter.js index d7a79fe74d0..92bfb89f5e0 100644 --- a/modules/theAdxBidAdapter.js +++ b/modules/theAdxBidAdapter.js @@ -155,7 +155,8 @@ export const spec = { withCredentials: true, }, bidder: 'theadx', - referrer: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: is 'page' the right value here? + referrer: encodeURIComponent(bidderRequest.refererInfo.page || ''), data: generatePayload(bidRequest, bidderRequest), mediaTypes: bidRequest['mediaTypes'], requestId: bidderRequest.bidderRequestId, @@ -314,7 +315,7 @@ export const spec = { } let buildSiteComponent = (bidRequest, bidderRequest) => { - let loc = parseUrl(bidderRequest.refererInfo.referer, { + let loc = parseUrl(bidderRequest.refererInfo.page || '', { decodeSearchAsString: true }); diff --git a/modules/tpmnBidAdapter.js b/modules/tpmnBidAdapter.js index 88e89bcd64b..8687ab06f4c 100644 --- a/modules/tpmnBidAdapter.js +++ b/modules/tpmnBidAdapter.js @@ -116,13 +116,13 @@ registerBidder(spec); * Creates site description object */ function createSite(refInfo) { - let url = parseUrl(refInfo.referer); + let url = parseUrl(refInfo.page || ''); let site = { 'domain': url.hostname, 'page': url.protocol + '://' + url.hostname + url.pathname }; - if (self === top && document.referrer) { - site.ref = document.referrer; + if (refInfo.ref) { + site.ref = refInfo.ref } let keywords = document.getElementsByTagName('meta')['keywords']; if (keywords && keywords.content) { diff --git a/modules/tripleliftBidAdapter.js b/modules/tripleliftBidAdapter.js index 309c23a2bb3..ee04a229290 100644 --- a/modules/tripleliftBidAdapter.js +++ b/modules/tripleliftBidAdapter.js @@ -27,7 +27,8 @@ export const tripleliftAdapterSpec = { tlCall = tryAppendQueryString(tlCall, 'v', '$prebid.version$'); if (bidderRequest && bidderRequest.refererInfo) { - let referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + let referrer = bidderRequest.refererInfo.page; tlCall = tryAppendQueryString(tlCall, 'referrer', referrer); } diff --git a/modules/ttdBidAdapter.js b/modules/ttdBidAdapter.js index 4ec4971ee5c..55d7490a4ad 100644 --- a/modules/ttdBidAdapter.js +++ b/modules/ttdBidAdapter.js @@ -125,14 +125,14 @@ function getUser(bidderRequest) { function getSite(bidderRequest, firstPartyData) { var site = { id: utils.deepAccess(bidderRequest, 'bids.0.params.siteId'), - page: utils.deepAccess(bidderRequest, 'refererInfo.referer'), + page: utils.deepAccess(bidderRequest, 'refererInfo.page'), publisher: { id: utils.deepAccess(bidderRequest, 'bids.0.params.publisherId'), }, ...firstPartyData.site }; - var publisherDomain = config.getConfig('publisherDomain'); + var publisherDomain = bidderRequest.refererInfo.domain; if (publisherDomain) { utils.deepSetValue(site, 'publisher.domain', publisherDomain); } diff --git a/modules/ucfunnelBidAdapter.js b/modules/ucfunnelBidAdapter.js index 5c1b4680611..db085252a91 100644 --- a/modules/ucfunnelBidAdapter.js +++ b/modules/ucfunnelBidAdapter.js @@ -264,13 +264,13 @@ function getRequestData(bid, bidderRequest) { } addUserId(bidData, bid.userId); + // TODO: is 'page' the right value here? does the fallback make sense? + bidData.u = bidderRequest?.refererInfo?.page || bidderRequest?.refererInfo?.topmostLocation; try { bidData.host = window.top.location.hostname; - bidData.u = config.getConfig('publisherDomain') || window.top.location.href; bidData.xr = 0; } catch (e) { bidData.host = window.location.hostname; - bidData.u = config.getConfig('publisherDomain') || bidderRequest.refererInfo.referrer || document.referrer || window.location.href; bidData.xr = 1; } diff --git a/modules/undertoneBidAdapter.js b/modules/undertoneBidAdapter.js index f86faf3fe4d..eda4b6f579c 100644 --- a/modules/undertoneBidAdapter.js +++ b/modules/undertoneBidAdapter.js @@ -2,8 +2,8 @@ * Adapter to send bids to Undertone */ -import { deepAccess, parseUrl } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; +import {deepAccess, parseUrl} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; const BIDDER_CODE = 'undertone'; @@ -26,18 +26,6 @@ function getBidFloor(bidRequest, mediaType) { return (floor && floor.currency === 'USD' && floor.floor) || 0; } -function getCanonicalUrl() { - try { - let doc = window.top.document; - let element = doc.querySelector("link[rel='canonical']"); - if (element !== null) { - return element.href; - } - } catch (e) { - } - return null; -} - function extractDomainFromHost(pageHost) { let domain = null; try { @@ -111,8 +99,8 @@ export const spec = { 'x-ut-hb-params': [], 'commons': commons }; - const referer = bidderRequest.refererInfo.referer; - const canonicalUrl = getCanonicalUrl(); + const referer = bidderRequest.refererInfo.topmostLocation; + const canonicalUrl = bidderRequest.refererInfo.canonicalUrl; if (referer) { commons.referrer = referer; } diff --git a/modules/unicornBidAdapter.js b/modules/unicornBidAdapter.js index 977e694acf7..9cbc79f3e61 100644 --- a/modules/unicornBidAdapter.js +++ b/modules/unicornBidAdapter.js @@ -64,9 +64,9 @@ function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) { publisher: { id: String(deepAccess(validBidRequests[0], 'params.publisherId') || 0) }, - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo.referer + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref }, device: { language: navigator.language, diff --git a/modules/vdoaiBidAdapter.js b/modules/vdoaiBidAdapter.js index 40e3b3322a7..e149a56f988 100644 --- a/modules/vdoaiBidAdapter.js +++ b/modules/vdoaiBidAdapter.js @@ -37,7 +37,8 @@ export const spec = { placementId: bidRequest.params.placementId, sizes: sizes, bidId: bidRequest.bidId, - referer: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + referer: bidderRequest.refererInfo.page, id: bidRequest.auctionId, mediaType: bidRequest.mediaTypes.video ? 'video' : 'banner' }; diff --git a/modules/ventesBidAdapter.js b/modules/ventesBidAdapter.js index 42292ddaed3..054d59807a4 100644 --- a/modules/ventesBidAdapter.js +++ b/modules/ventesBidAdapter.js @@ -6,8 +6,6 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; const BID_METHOD = 'POST'; const BIDDER_URL = 'http://13.234.201.146:8088/va/ad'; -const DOMAIN_REGEX = new RegExp('//([^/]*)'); - function groupBy(values, key) { const groups = values.reduce((acc, value) => { const groupId = value[key]; @@ -69,26 +67,16 @@ function validateParameters(parameters) { return true; } -function extractSiteDomainFromURL(url) { - if (!url || !isStr(url)) return null; - - const domain = url.match(DOMAIN_REGEX); - - if (isArray(domain) && domain.length === 2) return domain[1]; - - return null; -} - function generateSiteFromAdUnitContext(bidRequests, adUnitContext) { if (!adUnitContext || !adUnitContext.refererInfo) return null; - const domain = extractSiteDomainFromURL(adUnitContext.refererInfo.referer); + const domain = adUnitContext.refererInfo.domain; const publisherId = bidRequests[0].params.publisherId; if (!domain) return null; return { - page: adUnitContext.refererInfo.referer, + page: adUnitContext.refererInfo.page, domain: domain, name: domain, publisher: { diff --git a/modules/vidazooBidAdapter.js b/modules/vidazooBidAdapter.js index fcd138a2443..3933d7632b6 100644 --- a/modules/vidazooBidAdapter.js +++ b/modules/vidazooBidAdapter.js @@ -128,7 +128,8 @@ function appendUserIdsToRequestPayload(payloadRef, userIds) { } function buildRequests(validBidRequests, bidderRequest) { - const topWindowUrl = bidderRequest.refererInfo.referer; + // TODO: does the fallback make sense here? + const topWindowUrl = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; const requests = []; validBidRequests.forEach(validBidRequest => { const sizes = parseSizesInput(validBidRequest.sizes); diff --git a/modules/videobyteBidAdapter.js b/modules/videobyteBidAdapter.js index 6e99b5bc42a..2ecc3d481aa 100644 --- a/modules/videobyteBidAdapter.js +++ b/modules/videobyteBidAdapter.js @@ -221,9 +221,9 @@ function buildRequestData(bidRequest, bidderRequest) { } ], site: { - domain: window.location.hostname, - page: window.location.href, - ref: bidRequest.refererInfo ? bidRequest.refererInfo.referer || null : null + domain: bidderRequest.refererInfo.domain, + page: bidderRequest.refererInfo.page, + ref: bidderRequest.refererInfo.ref, }, ext: { hb: 1, diff --git a/modules/videoheroesBidAdapter.js b/modules/videoheroesBidAdapter.js index edcdd698153..61123820cf5 100644 --- a/modules/videoheroesBidAdapter.js +++ b/modules/videoheroesBidAdapter.js @@ -62,23 +62,7 @@ export const spec = { return impObject; }); - let w = window; - let l = w.document.location.href; - let r = w.document.referrer; - - let loopChecker = 0; - while (w !== w.parent) { - if (++loopChecker == 10) break; - try { - w = w.parent; - l = w.location.href; - r = w.document.referrer; - } catch (e) { - break; - } - } - - let page = l || bidderRequest.refererInfo.referer; + let page = bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation; let data = { id: bidderRequest.bidderRequestId, @@ -97,8 +81,8 @@ export const spec = { imp }; - if (r) { - data.site.ref = r; + if (bidderRequest.refererInfo.ref) { + data.site.ref = bidderRequest.refererInfo.ref } if (bidderRequest.gdprConsent) { diff --git a/modules/videoreachBidAdapter.js b/modules/videoreachBidAdapter.js index 61ecd55a2ef..1fc38066407 100644 --- a/modules/videoreachBidAdapter.js +++ b/modules/videoreachBidAdapter.js @@ -28,7 +28,8 @@ export const spec = { }; if (bidderRequest && bidderRequest.refererInfo) { - data.referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + data.referrer = bidderRequest.refererInfo.page; } if (bidderRequest && bidderRequest.gdprConsent) { diff --git a/modules/vidoomyBidAdapter.js b/modules/vidoomyBidAdapter.js index ffa4a290072..ebecb5a46ae 100644 --- a/modules/vidoomyBidAdapter.js +++ b/modules/vidoomyBidAdapter.js @@ -73,9 +73,8 @@ const buildRequests = (validBidRequests, bidderRequest) => { } const [w, h] = (parseSizesInput(sizes)[0] || '0x0').split('x'); - const aElement = document.createElement('a'); - aElement.href = (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) || top.location.href; - const hostname = aElement.hostname + // TODO: is 'domain' the right value here? + const hostname = bidderRequest.refererInfo.domain || window.location.hostname; const videoContext = deepAccess(bid, 'mediaTypes.video.context'); const bidfloor = deepAccess(bid, `params.bidfloor`, 0); @@ -95,7 +94,8 @@ const buildRequests = (validBidRequests, bidderRequest) => { schain: bid.schain || '', bidfloor, d: getDomainWithoutSubdomain(hostname), // 'vidoomy.com', - sp: encodeURIComponent(aElement.href), + // TODO: does the fallback make sense here? + sp: encodeURIComponent(bidderRequest.refererInfo.page || bidderRequest.refererInfo.topmostLocation), usp: bidderRequest.uspConsent || '', coppa: !!config.getConfig('coppa'), videoContext: videoContext || '' diff --git a/modules/viewdeosDXBidAdapter.js b/modules/viewdeosDXBidAdapter.js index 9e0cb91af9b..7afd23cbde7 100644 --- a/modules/viewdeosDXBidAdapter.js +++ b/modules/viewdeosDXBidAdapter.js @@ -125,7 +125,8 @@ function parseRTBResponse(serverResponse, bidderRequest) { function bidToTag(bidRequests, bidderRequest) { const tag = { - domain: deepAccess(bidderRequest, 'refererInfo.referer') + // TODO: is 'page' the right value here? + domain: deepAccess(bidderRequest, 'refererInfo.page') }; if (deepAccess(bidderRequest, 'gdprConsent.gdprApplies')) { diff --git a/modules/visxBidAdapter.js b/modules/visxBidAdapter.js index 696d54e4b52..cec48a83c35 100644 --- a/modules/visxBidAdapter.js +++ b/modules/visxBidAdapter.js @@ -94,8 +94,9 @@ export const spec = { if (bidderRequest) { timeout = bidderRequest.timeout; - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - payload.u = bidderRequest.refererInfo.referer; + if (bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + // TODO: is 'page' the right value here? + payload.u = bidderRequest.refererInfo.page; } if (bidderRequest.gdprConsent) { if (bidderRequest.gdprConsent.consentString) { diff --git a/modules/voxBidAdapter.js b/modules/voxBidAdapter.js index 25dbbda90cf..7b8cb42bb0a 100644 --- a/modules/voxBidAdapter.js +++ b/modules/voxBidAdapter.js @@ -198,7 +198,8 @@ export const spec = { */ buildRequests(validBidRequests, bidderRequest) { const payload = { - url: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + url: bidderRequest.refererInfo.page, cmp: !!bidderRequest.gdprConsent, bidRequests: buildBidRequests(validBidRequests) }; diff --git a/modules/waardexBidAdapter.js b/modules/waardexBidAdapter.js index 51390840650..92b7fc26e4c 100644 --- a/modules/waardexBidAdapter.js +++ b/modules/waardexBidAdapter.js @@ -69,7 +69,8 @@ const getCommonBidsData = bidderRequest => { }; if (bidderRequest && bidderRequest.refererInfo) { - payload.referer = encodeURIComponent(bidderRequest.refererInfo.referer); + // TODO: is 'page' the right value here? + payload.referer = encodeURIComponent(bidderRequest.refererInfo.page || ''); } if (bidderRequest && bidderRequest.uspConsent) { diff --git a/modules/winrBidAdapter.js b/modules/winrBidAdapter.js index 072f8320cfc..9113ea695c2 100644 --- a/modules/winrBidAdapter.js +++ b/modules/winrBidAdapter.js @@ -227,7 +227,8 @@ export const spec = { if (bidderRequest && bidderRequest.refererInfo) { let refererinfo = { - rd_ref: encodeURIComponent(bidderRequest.refererInfo.referer), + // TODO: this collects everything it finds, except for canonicalUrl + rd_ref: encodeURIComponent(bidderRequest.refererInfo.topmostLocation), rd_top: bidderRequest.refererInfo.reachedTop, rd_ifs: bidderRequest.refererInfo.numIframes, rd_stk: bidderRequest.refererInfo.stack diff --git a/modules/yahoosspBidAdapter.js b/modules/yahoosspBidAdapter.js index a1fdb84774f..18356725f99 100644 --- a/modules/yahoosspBidAdapter.js +++ b/modules/yahoosspBidAdapter.js @@ -239,7 +239,7 @@ function generateOpenRtbObject(bidderRequest, bid) { cur: [getFloorModuleData(bidderRequest).currency || deepAccess(bid, 'params.bidOverride.cur') || DEFAULT_CURRENCY], imp: [], site: { - page: deepAccess(bidderRequest, 'refererInfo.referer'), + page: deepAccess(bidderRequest, 'refererInfo.page'), }, device: { dnt: 0, diff --git a/modules/yandexBidAdapter.js b/modules/yandexBidAdapter.js index e20f71bc08d..ae2fb16c8ac 100644 --- a/modules/yandexBidAdapter.js +++ b/modules/yandexBidAdapter.js @@ -1,4 +1,4 @@ -import {parseUrl, formatQS, deepAccess} from '../src/utils.js'; +import {formatQS, deepAccess} from '../src/utils.js'; import { registerBidder } from '../src/adapters/bidderFactory.js'; const BIDDER_CODE = 'yandex'; @@ -20,8 +20,8 @@ export const spec = { let referrer = ''; if (bidderRequest && bidderRequest.refererInfo) { - const url = parseUrl(bidderRequest.refererInfo.referer); - referrer = url.hostname; + // TODO: is 'domain' the right value here? + referrer = bidderRequest.refererInfo.domain } return validBidRequests.map((bidRequest) => { diff --git a/modules/yieldlabBidAdapter.js b/modules/yieldlabBidAdapter.js index bdbb36a9a6c..02486a82115 100644 --- a/modules/yieldlabBidAdapter.js +++ b/modules/yieldlabBidAdapter.js @@ -60,8 +60,9 @@ export const spec = { }) if (bidderRequest) { - if (bidderRequest.refererInfo && bidderRequest.refererInfo.referer) { - query.pubref = bidderRequest.refererInfo.referer + if (bidderRequest.refererInfo && bidderRequest.refererInfo.page) { + // TODO: is 'page' the right value here? + query.pubref = bidderRequest.refererInfo.page } if (bidderRequest.gdprConsent) { diff --git a/modules/yieldliftBidAdapter.js b/modules/yieldliftBidAdapter.js index 61b99d95605..9fe1bfe84fc 100644 --- a/modules/yieldliftBidAdapter.js +++ b/modules/yieldliftBidAdapter.js @@ -44,9 +44,9 @@ export const spec = { id: bidderRequest.auctionId, imp: impressions, site: { - domain: window.location.hostname, - page: window.location.href, - ref: bidderRequest.refererInfo ? bidderRequest.refererInfo.referer || null : null + domain: bidderRequest.refererInfo?.domain, + page: bidderRequest.refererInfo?.page, + ref: bidderRequest.refererInfo?.ref, }, ext: { exchange: { diff --git a/modules/yieldmoBidAdapter.js b/modules/yieldmoBidAdapter.js index bc29f4822c8..cbc41e82ed6 100644 --- a/modules/yieldmoBidAdapter.js +++ b/modules/yieldmoBidAdapter.js @@ -66,7 +66,8 @@ export const spec = { let serverRequest = { pbav: '$prebid.version$', p: [], - page_url: bidderRequest.refererInfo.referer, + // TODO: is 'page' the right value here? + page_url: bidderRequest.refererInfo.page, bust: new Date().getTime().toString(), dnt: getDNT(), description: getPageDescription(), @@ -445,13 +446,13 @@ function extractPlayerSize(bidRequest) { function openRtbSite(bidRequest, bidderRequest) { let result = {}; - const loc = parseUrl(deepAccess(bidderRequest, 'refererInfo.referer')); + const loc = parseUrl(deepAccess(bidderRequest, 'refererInfo.page')); if (!isEmpty(loc)) { result.page = `${loc.protocol}://${loc.hostname}${loc.pathname}`; } - if (self === top && document.referrer) { - result.ref = document.referrer; + if (bidderRequest.refererInfo?.ref) { + result.ref = bidderRequest.refererInfo.ref; } const keywords = document.getElementsByTagName('meta')['keywords']; diff --git a/modules/yieldoneAnalyticsAdapter.js b/modules/yieldoneAnalyticsAdapter.js index cb13503365e..126e3504f98 100644 --- a/modules/yieldoneAnalyticsAdapter.js +++ b/modules/yieldoneAnalyticsAdapter.js @@ -99,7 +99,8 @@ const yieldoneAnalytics = Object.assign(adapter({analyticsType}), { if (currentAuctionId) { const eventsStorage = yieldoneAnalytics.eventsStorage; if (!eventsStorage[currentAuctionId]) eventsStorage[currentAuctionId] = {events: []}; - const referrer = args.refererInfo && args.refererInfo.referer; + // TODO: is 'page' the right value here? + const referrer = args.refererInfo && args.refererInfo.page; if (referrer && referrers[currentAuctionId] !== referrer) { referrers[currentAuctionId] = referrer; } diff --git a/modules/yieldoneBidAdapter.js b/modules/yieldoneBidAdapter.js index 334de9eb3fa..69a5def17bd 100644 --- a/modules/yieldoneBidAdapter.js +++ b/modules/yieldoneBidAdapter.js @@ -25,7 +25,8 @@ export const spec = { const params = bidRequest.params; const placementId = params.placementId; const cb = Math.floor(Math.random() * 99999999999); - const referrer = bidderRequest.refererInfo.referer; + // TODO: is 'page' the right value here? + const referrer = bidderRequest.refererInfo.page; const bidId = bidRequest.bidId; const transactionId = bidRequest.transactionId; const unitCode = bidRequest.adUnitCode; diff --git a/modules/yuktamediaAnalyticsAdapter.js b/modules/yuktamediaAnalyticsAdapter.js index 6872820dd48..8ff22faa7f4 100644 --- a/modules/yuktamediaAnalyticsAdapter.js +++ b/modules/yuktamediaAnalyticsAdapter.js @@ -18,7 +18,8 @@ const events = { const localStoragePrefix = 'yuktamediaAnalytics_'; const utmTags = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; const location = getWindowLocation(); -const referer = getRefererInfo().referer; +// TODO: is 'page' the right value here? +const referer = getRefererInfo().page; const _pageInfo = { userAgent: window.navigator.userAgent, timezoneOffset: new Date().getTimezoneOffset(), diff --git a/modules/zetaBidAdapter.js b/modules/zetaBidAdapter.js index 27650888677..eb9fe4bea5b 100644 --- a/modules/zetaBidAdapter.js +++ b/modules/zetaBidAdapter.js @@ -94,7 +94,7 @@ export const spec = { payload.device.ua = navigator.userAgent; payload.device.ip = navigator.ip; - payload.site.page = bidderRequest.refererInfo.referer; + payload.site.page = bidderRequest.refererInfo.page; payload.site.mobile = /(ios|ipod|ipad|iphone|android)/i.test(navigator.userAgent) ? 1 : 0; payload.ext.definerId = params.definerId; diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index e5868e4dbce..0fc866e1458 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -2,6 +2,7 @@ import {deepAccess, deepSetValue, isArray, isBoolean, isNumber, isStr, logWarn} import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; +import {parseDomain} from '../src/refererDetection.js'; const BIDDER_CODE = 'zeta_global_ssp'; const ENDPOINT_URL = 'https://ssp.disqus.com/bid'; @@ -99,13 +100,14 @@ export const spec = { user: params.user ? params.user : {}, app: params.app ? params.app : {}, ext: { - tags: params.tags ? params.tags : {}, + tags: {...params.tags, shortname: params.shortname}, sid: params.sid ? params.sid : undefined } }; const rInfo = bidderRequest.refererInfo; - payload.site.page = config.getConfig('pageUrl') || ((rInfo && rInfo.referer) ? rInfo.referer.trim() : window.location.href); - payload.site.domain = config.getConfig('publisherDomain') || getDomainFromURL(payload.site.page); + // TODO: do the fallbacks make sense here? + payload.site.page = rInfo.page || rInfo.topmostLocation; + payload.site.domain = parseDomain(payload.site.page, {noLeadingWww: true}); payload.device.ua = navigator.userAgent; payload.device.language = navigator.language; @@ -268,16 +270,6 @@ function provideEids(request, payload) { } } -function getDomainFromURL(url) { - let anchor = document.createElement('a'); - anchor.href = url; - let hostname = anchor.hostname; - if (hostname.indexOf('www.') === 0) { - return hostname.substring(4); - } - return hostname; -} - function provideMediaType(zetaBid, bid) { if (zetaBid.ext && zetaBid.ext.bidtype) { if (zetaBid.ext.bidtype === VIDEO) { diff --git a/package-lock.json b/package-lock.json index cc4eb489851..ce56a7d2e84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "prebid.js", - "version": "6.26.0-pre", + "version": "6.27.0-pre", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 1dd7e1bc914..27c874c039a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "prebid.js", - "version": "6.26.0-pre", + "version": "6.27.0-pre", "description": "Header Bidding Management Library", "main": "src/prebid.js", "scripts": { diff --git a/src/config.js b/src/config.js index dc2187864b6..c2c3642b5ac 100644 --- a/src/config.js +++ b/src/config.js @@ -22,7 +22,6 @@ import CONSTANTS from './constants.json'; const DEFAULT_DEBUG = getParameterByName(CONSTANTS.DEBUG_MODE).toUpperCase() === 'TRUE'; const DEFAULT_BIDDER_TIMEOUT = 3000; -const DEFAULT_PUBLISHER_DOMAIN = window.location.origin; const DEFAULT_ENABLE_SEND_ALL_BIDS = true; const DEFAULT_DISABLE_AJAX_TIMEOUT = false; const DEFAULT_BID_CACHE = false; @@ -86,12 +85,12 @@ export function newConfig() { this._bidderTimeout = val; }, - // domain where prebid is running for cross domain iframe communication - _publisherDomain: DEFAULT_PUBLISHER_DOMAIN, + _publisherDomain: null, get publisherDomain() { return this._publisherDomain; }, set publisherDomain(val) { + logWarn('publisherDomain is deprecated and has no effect since v7 - use pageUrl instead') this._publisherDomain = val; }, diff --git a/test/spec/modules/fintezaAnalyticsAdapter_spec.js b/test/spec/modules/fintezaAnalyticsAdapter_spec.js index 407ceb305a2..76f77505105 100644 --- a/test/spec/modules/fintezaAnalyticsAdapter_spec.js +++ b/test/spec/modules/fintezaAnalyticsAdapter_spec.js @@ -51,7 +51,7 @@ describe('finteza analytics adapter', function () { describe('track', () => { describe('bid request', () => { - it('builds and sends data', function () { + it('builds and sends request data', function () { const bidderCode = 'Bidder789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; @@ -95,7 +95,7 @@ describe('finteza analytics adapter', function () { }); describe('bid response', () => { - it('builds and sends data', function () { + it('builds and sends response data', function () { const bidderCode = 'Bidder789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; @@ -154,7 +154,7 @@ describe('finteza analytics adapter', function () { }); describe('bid won', () => { - it('builds and sends data', function () { + it('builds and sends bid won data', function () { const bidderCode = 'Bidder789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; @@ -194,7 +194,7 @@ describe('finteza analytics adapter', function () { }); describe('bid timeout', () => { - it('builds and sends data', function () { + it('builds and sends timeout data', function () { const bidderCode = 'biDDer789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; diff --git a/test/spec/modules/mediafuseBidAdapter_spec.js b/test/spec/modules/mediafuseBidAdapter_spec.js index 8c424cd5fc5..bb9bbd34d1d 100644 --- a/test/spec/modules/mediafuseBidAdapter_spec.js +++ b/test/spec/modules/mediafuseBidAdapter_spec.js @@ -822,7 +822,7 @@ describe('MediaFuseAdapter', function () { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + topmostLocation: 'https://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ diff --git a/test/spec/modules/medianetRtdProvider_spec.js b/test/spec/modules/medianetRtdProvider_spec.js deleted file mode 100644 index 7d73ecd5d44..00000000000 --- a/test/spec/modules/medianetRtdProvider_spec.js +++ /dev/null @@ -1,146 +0,0 @@ -import * as medianetRTD from '../../../modules/medianetRtdProvider.js'; -import * as sinon from 'sinon'; -import { assert } from 'chai'; - -let sandbox; -let setDataSpy; -let getTargetingDataSpy; -let onPrebidRequestBidSpy; - -const conf = { - dataProviders: [{ - 'name': 'medianet', - 'params': { - 'cid': 'customer_id', - } - }] -}; - -describe('medianet realtime module', function () { - beforeEach(function () { - sandbox = sinon.sandbox.create(); - window.mnjs = window.mnjs || {}; - window.mnjs.que = window.mnjs.que || []; - window.mnjs.setData = setDataSpy = sandbox.spy(); - window.mnjs.getTargetingData = getTargetingDataSpy = sandbox.spy(); - window.mnjs.onPrebidRequestBid = onPrebidRequestBidSpy = sandbox.spy(); - }); - - afterEach(function () { - sandbox.restore(); - window.mnjs = {}; - }); - - it('init should return false when customer id is passed', function () { - assert.equal(medianetRTD.medianetRtdModule.init({}), false); - }); - - it('init should return true when customer id is passed', function () { - assert.equal(medianetRTD.medianetRtdModule.init(conf.dataProviders[0]), true); - }); - - it('init should pass config to js when loaded', function () { - medianetRTD.medianetRtdModule.init(conf.dataProviders[0]); - - const command = window.mnjs.que.pop(); - assert.isFunction(command); - command(); - - assert.equal(setDataSpy.called, true); - assert.equal(setDataSpy.args[0][0].name, 'initIRefresh'); - }); - - it('auctionInit should pass information to js when loaded', function () { - const auctionObject = {adUnits: []}; - medianetRTD.medianetRtdModule.onAuctionInitEvent(auctionObject); - - const command = window.mnjs.que.pop(); - assert.isFunction(command); - command(); - - assert.equal(setDataSpy.called, true); - assert.equal(setDataSpy.args[0][0].name, 'auctionInit'); - assert.deepEqual(setDataSpy.args[0][0].data, {auction: auctionObject}); - }); - - describe('getTargeting should work correctly', function () { - it('should return empty if not loaded', function () { - window.mnjs.loaded = false; - assert.deepEqual(medianetRTD.medianetRtdModule.getTargetingData([]), {}); - }); - - it('should return ad unit codes when ad units are present', function () { - const adUnitCodes = ['code1', 'code2']; - assert.deepEqual(medianetRTD.medianetRtdModule.getTargetingData(adUnitCodes), { - code1: {'mnadc': 'code1'}, - code2: {'mnadc': 'code2'}, - }); - }); - - it('should call mnjs.getTargetingData if loaded', function () { - window.mnjs.loaded = true; - medianetRTD.medianetRtdModule.getTargetingData([]); - assert.equal(getTargetingDataSpy.called, true); - }); - }); - - describe('getBidRequestData should work correctly', function () { - it('callback should be called when we are not interested in request', function () { - const requestBidsProps = { - adUnits: [{ - code: 'code1', bids: [], - }], - adUnitCodes: ['code1'], - }; - const callbackSpy = sandbox.spy(); - medianetRTD.medianetRtdModule.getBidRequestData(requestBidsProps, callbackSpy, conf.dataProviders[0], {}); - - const command = window.mnjs.que.pop(); - assert.isFunction(command); - command(); - - assert.equal(onPrebidRequestBidSpy.called, true, 'onPrebidRequest should always be called'); - assert.equal(callbackSpy.called, true, 'when onPrebidRequest returns nothing callback should be called immediately'); - }); - - it('we should wait for callback till onComplete', function () { - const requestBidsProps = { - adUnits: [{ - code: 'code1', bids: [], - }], - adUnitCodes: ['code1'], - }; - - const refreshInformation = { - mnrf: '1', - mnrfc: 2, - }; - - const callbackSpy = sandbox.spy(); - const onCompleteSpy = sandbox.spy(); - window.mnjs.onPrebidRequestBid = onPrebidRequestBidSpy = () => { - onPrebidRequestBidSpy.called = true; - return {onComplete: onCompleteSpy}; - }; - medianetRTD.medianetRtdModule.getBidRequestData(requestBidsProps, callbackSpy, conf.dataProviders[0], {}); - - const command = window.mnjs.que.pop(); - assert.isFunction(command); - command(); - - assert.equal(callbackSpy.called, false, 'callback should not be called, as we are returning a request from onPrebidRequestBid'); - assert.equal(onPrebidRequestBidSpy.called, true, 'onPrebidRequestBid should be called once'); - assert.equal(onCompleteSpy.called, true, 'onComplete should be passed callback'); - assert.isFunction(onCompleteSpy.args[0][0], 'onCompleteSpy first argument error callback should be a function'); - assert.isFunction(onCompleteSpy.args[0][1], 'onCompleteSpy second argument success callback should be a function'); - onCompleteSpy.args[0][0](); - assert.equal(callbackSpy.callCount, 1, 'callback should be called when error callback is triggered'); - onCompleteSpy.args[0][1]({}, { - 'code1': {ext: {refresh: refreshInformation}} - }); - assert.equal(callbackSpy.callCount, 2, 'callback should be called when success callback is triggered'); - assert.isObject(requestBidsProps.adUnits[0].ortb2Imp, 'ORTB object should be set'); - assert.deepEqual(requestBidsProps.adUnits[0].ortb2Imp.ext.refresh, refreshInformation, 'ORTB should have refresh information should be set'); - }); - }); -}); diff --git a/test/spec/modules/rubiconAnalyticsAdapter_spec.js b/test/spec/modules/rubiconAnalyticsAdapter_spec.js index 1f52e83dab9..bef3eda0afc 100644 --- a/test/spec/modules/rubiconAnalyticsAdapter_spec.js +++ b/test/spec/modules/rubiconAnalyticsAdapter_spec.js @@ -235,7 +235,7 @@ const MOCK = { ], 'timeout': 3000, 'refererInfo': { - 'referer': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] + 'page': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] } } ], @@ -319,7 +319,7 @@ const MOCK = { 'timeout': 5000, 'start': 1519149562216, 'refererInfo': { - 'referer': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] + 'page': 'http://www.test.com/page.html', 'reachedTop': true, 'numIframes': 0, 'stack': ['http://www.test.com/page.html'] } }, BID_RESPONSE: [ diff --git a/test/spec/modules/rubiconBidAdapter_spec.js b/test/spec/modules/rubiconBidAdapter_spec.js index 5cbc7ac0490..a4ca9d9a9d4 100644 --- a/test/spec/modules/rubiconBidAdapter_spec.js +++ b/test/spec/modules/rubiconBidAdapter_spec.js @@ -666,7 +666,7 @@ describe('the rubicon adapter', function () { it('should add referer info to request data', function () { let refererInfo = { - referer: 'https://www.prebid.org', + page: 'https://www.prebid.org', reachedTop: true, numIframes: 1, stack: [ @@ -683,29 +683,20 @@ describe('the rubicon adapter', function () { expect(parseQuery(request.data).rf).to.equal('https://www.prebid.org'); }); - it('page_url should use params.referrer, config.getConfig("pageUrl"), bidderRequest.refererInfo in that order', function () { + it('page_url should use params.referrer, bidderRequest.refererInfo in that order', function () { let [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); expect(parseQuery(request.data).rf).to.equal('localhost'); delete bidderRequest.bids[0].params.referrer; - let refererInfo = {referer: 'https://www.prebid.org'}; + let refererInfo = {page: 'https://www.prebid.org'}; bidderRequest = Object.assign({refererInfo}, bidderRequest); [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); expect(parseQuery(request.data).rf).to.equal('https://www.prebid.org'); - let origGetConfig = config.getConfig; - sandbox.stub(config, 'getConfig').callsFake(function (key) { - if (key === 'pageUrl') { - return 'https://www.rubiconproject.com'; - } - return origGetConfig.apply(config, arguments); - }); - [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); - expect(parseQuery(request.data).rf).to.equal('https://www.rubiconproject.com'); - + bidderRequest.refererInfo.page = 'http://www.prebid.org'; bidderRequest.bids[0].params.secure = true; [request] = spec.buildRequests(bidderRequest.bids, bidderRequest); - expect(parseQuery(request.data).rf).to.equal('https://www.rubiconproject.com'); + expect(parseQuery(request.data).rf).to.equal('https://www.prebid.org'); }); it('should use rubicon sizes if present (including non-mappable sizes)', function () { diff --git a/test/spec/modules/seedtagBidAdapter_spec.js b/test/spec/modules/seedtagBidAdapter_spec.js index 1e0dca68d00..fc659f4de69 100644 --- a/test/spec/modules/seedtagBidAdapter_spec.js +++ b/test/spec/modules/seedtagBidAdapter_spec.js @@ -196,7 +196,7 @@ describe('Seedtag Adapter', function () { describe('buildRequests method', function () { const bidderRequest = { - refererInfo: { referer: 'referer' }, + refererInfo: { page: 'referer' }, timeout: 1000, }; const mandatoryParams = { diff --git a/test/spec/modules/sharethroughBidAdapter_spec.js b/test/spec/modules/sharethroughBidAdapter_spec.js index ccdeaaf794d..4ef93c9b530 100644 --- a/test/spec/modules/sharethroughBidAdapter_spec.js +++ b/test/spec/modules/sharethroughBidAdapter_spec.js @@ -166,7 +166,7 @@ describe('sharethrough adapter spec', function () { bidderRequest = { refererInfo: { - referer: 'https://referer.com', + ref: 'https://referer.com', }, }; }); diff --git a/test/spec/modules/slimcutBidAdapter_spec.js b/test/spec/modules/slimcutBidAdapter_spec.js index 300791c9658..d821627c24b 100644 --- a/test/spec/modules/slimcutBidAdapter_spec.js +++ b/test/spec/modules/slimcutBidAdapter_spec.js @@ -106,7 +106,7 @@ describe('slimcutBidAdapter', function() { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + page: 'https://example.com/page.html', reachedTop: true, numIframes: 2 } diff --git a/test/spec/modules/smaatoBidAdapter_spec.js b/test/spec/modules/smaatoBidAdapter_spec.js index f9bff4d0d0d..99592765845 100644 --- a/test/spec/modules/smaatoBidAdapter_spec.js +++ b/test/spec/modules/smaatoBidAdapter_spec.js @@ -18,7 +18,7 @@ const defaultBidderRequest = { }, uspConsent: 'uspConsentString', refererInfo: { - referer: REFERRER, + ref: REFERRER, }, timeout: 1200, auctionId: AUCTION_ID @@ -123,7 +123,7 @@ describe('smaatoBidAdapterTest', () => { describe('common', () => { const MINIMAL_BIDDER_REQUEST = { refererInfo: { - referer: REFERRER, + ref: REFERRER, } }; diff --git a/test/spec/modules/smarthubBidAdapter_spec.js b/test/spec/modules/smarthubBidAdapter_spec.js index 05fb1424dca..e1787dfe880 100644 --- a/test/spec/modules/smarthubBidAdapter_spec.js +++ b/test/spec/modules/smarthubBidAdapter_spec.js @@ -90,7 +90,7 @@ describe('SmartHubBidAdapter', function () { uspConsent: '1---', gdprConsent: 'COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw', refererInfo: { - referer: 'https://test.com' + page: 'https://test.com' } }; diff --git a/test/spec/modules/smartxBidAdapter_spec.js b/test/spec/modules/smartxBidAdapter_spec.js index ddee2fa3347..b7235eee878 100644 --- a/test/spec/modules/smartxBidAdapter_spec.js +++ b/test/spec/modules/smartxBidAdapter_spec.js @@ -145,7 +145,7 @@ describe('The smartx adapter', function () { bid = getValidBidObject(); bidRequestObj = { refererInfo: { - referer: 'prebid.js' + page: 'prebid.js' } }; }); @@ -574,7 +574,7 @@ describe('The smartx adapter', function () { bid = getValidBidObject(); bidRequestObj = { refererInfo: { - referer: 'prebid.js' + page: 'prebid.js' } }; delete bid.params.bidfloor; diff --git a/test/spec/modules/smilewantedBidAdapter_spec.js b/test/spec/modules/smilewantedBidAdapter_spec.js index 0359e470f9b..b9a816cf3d5 100644 --- a/test/spec/modules/smilewantedBidAdapter_spec.js +++ b/test/spec/modules/smilewantedBidAdapter_spec.js @@ -163,7 +163,7 @@ describe('smilewantedBidAdapterTests', function () { it('SmileWanted - Verify build request with referrer', function () { const request = spec.buildRequests(DISPLAY_REQUEST, { refererInfo: { - referer: 'https://localhost/Prebid.js/integrationExamples/gpt/hello_world.html' + page: 'https://localhost/Prebid.js/integrationExamples/gpt/hello_world.html' } }); const requestContent = JSON.parse(request[0].data); diff --git a/test/spec/modules/sonobiBidAdapter_spec.js b/test/spec/modules/sonobiBidAdapter_spec.js index 62a6d32d8ae..a502cc3d17d 100644 --- a/test/spec/modules/sonobiBidAdapter_spec.js +++ b/test/spec/modules/sonobiBidAdapter_spec.js @@ -330,7 +330,7 @@ describe('SonobiBidAdapter', function () { 'refererInfo': { 'numIframes': 0, 'reachedTop': true, - 'referer': 'https://example.com', + 'page': 'https://example.com', 'stack': ['https://example.com'] }, uspConsent: 'someCCPAString' @@ -420,7 +420,7 @@ describe('SonobiBidAdapter', function () { 'refererInfo': { 'numIframes': 0, 'reachedTop': true, - 'referer': 'https://example.com', + 'page': 'https://example.com', 'stack': ['https://example.com'] } }; @@ -440,7 +440,7 @@ describe('SonobiBidAdapter', function () { 'refererInfo': { 'numIframes': 0, 'reachedTop': true, - 'referer': 'https://example.com', + 'page': 'https://example.com', 'stack': ['https://example.com'] } }; diff --git a/test/spec/modules/sortableBidAdapter_spec.js b/test/spec/modules/sortableBidAdapter_spec.js deleted file mode 100644 index 7357fa77952..00000000000 --- a/test/spec/modules/sortableBidAdapter_spec.js +++ /dev/null @@ -1,547 +0,0 @@ -import { expect } from 'chai'; -import { spec } from 'modules/sortableBidAdapter.js'; -import { newBidder } from 'src/adapters/bidderFactory.js'; -import * as utils from 'src/utils.js'; - -describe('sortableBidAdapter', function() { - const adapter = newBidder(spec); - - describe('isBidRequestValid', function () { - function makeBid() { - return { - 'bidder': 'sortable', - 'params': { - 'tagId': '403370', - 'siteId': 'example.com', - 'keywords': { - 'key1': 'val1', - 'key2': 'val2' - } - }, - 'adUnitCode': 'adunit-code', - 'sizes': [ - [300, 250] - ], - 'bidId': '30b31c1838de1e', - 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475', - }; - } - - it('should return true when required params found', function () { - expect(spec.isBidRequestValid(makeBid())).to.equal(true); - }); - - it('should return false when tagId not passed correctly', function () { - let bid = makeBid(); - delete bid.params.tagId; - expect(spec.isBidRequestValid(bid)).to.equal(false); - }); - - it('should return false when sizes not passed correctly', function () { - let bid = makeBid(); - delete bid.sizes; - expect(spec.isBidRequestValid(bid)).to.equal(false); - }); - - it('should return false when sizes are wrong length', function () { - let bid = makeBid(); - bid.sizes = [[300]]; - expect(spec.isBidRequestValid(bid)).to.equal(false); - }); - - it('should return false when sizes are empty', function () { - let bid = makeBid(); - bid.sizes = []; - expect(spec.isBidRequestValid(bid)).to.equal(false); - }); - - it('should return false when require params are not passed', function () { - let bid = makeBid(); - bid.params = {}; - expect(spec.isBidRequestValid(bid)).to.equal(false); - }); - - it('should return false when the keywords are invalid', function () { - let bid = makeBid(); - bid.params.keywords = { - 'badval': 1234 - }; - expect(spec.isBidRequestValid(bid)).to.equal(false); - bid.params.keywords = 'a'; - expect(spec.isBidRequestValid(bid)).to.equal(false); - }); - - it('should return true when the keywords are missing or empty', function () { - let bid = makeBid(); - bid.params.keywords = {}; - expect(spec.isBidRequestValid(bid)).to.equal(true); - delete bid.params.keywords; - expect(spec.isBidRequestValid(bid)).to.equal(true); - }); - - it('should return true with video media type', () => { - const videoBid = { - 'bidder': 'sortable', - 'params': { - 'tagId': '403370', - 'siteId': 'example.com', - }, - 'adUnitCode': 'adunit-code', - 'bidId': '30b31c1838de1e', - 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475', - 'mediaTypes': { - 'video': { - } - } - }; - expect(spec.isBidRequestValid(videoBid)).to.equal(true); - }); - }); - - describe('buildRequests', function () { - const bidRequests = [{ - 'bidder': 'sortable', - 'params': { - 'tagId': '403370', - 'siteId': 'example.com', - 'floor': 0.21, - 'keywords': { - 'key1': 'val1', - 'key2': 'val2' - } - }, - 'ortb2Imp': { - 'ext': { - 'data': { - 'pbadslot': 'abc/123' - } - } - }, - 'sizes': [ - [300, 250] - ], - 'bidId': '30b31c1838de1e', - 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475' - }, { - 'bidder': 'sortable', - 'params': { - 'tagId': '403371', - 'siteId': 'example.com', - 'floor': 0.21 - }, - 'sizes': [ - [300, 250] - ], - 'bidId': '30b31c1838de1e', - 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475', - 'mediaTypes': { - 'native': { - 'body': {'required': true, 'sendId': true}, - 'clickUrl': {'required': true, 'sendId': true}, - 'cta': {'required': true, 'sendId': true}, - 'icon': {'required': true, 'sendId': true}, - 'image': {'required': true, 'sendId': true}, - 'sponsoredBy': {'required': true, 'sendId': true}, - 'title': {'required': true, 'sendId': true, 'len': 100} - } - } - }]; - - const request = spec.buildRequests(bidRequests, {refererInfo: { referer: 'http://example.com/page?param=val' }}); - const requestBody = JSON.parse(request.data); - - it('sends bid request to our endpoint via POST', function () { - expect(request.method).to.equal('POST'); - }); - - it('attaches source and version to endpoint URL as query params', function () { - const ENDPOINT = `https://c.deployads.com/openrtb2/auction?src=$$REPO_AND_VERSION$$&host=example.com`; - expect(request.url).to.equal(ENDPOINT); - }); - - it('sends screen dimensions', function () { - expect(requestBody.site.device.w).to.equal(screen.width); - expect(requestBody.site.device.h).to.equal(screen.height); - }); - - it('includes the ad size in the bid request', function () { - expect(requestBody.imp[0].banner.format[0].w).to.equal(300); - expect(requestBody.imp[0].banner.format[0].h).to.equal(250); - }); - - it('includes the params in the bid request', function () { - expect(requestBody.imp[0].ext.keywords).to.deep.equal( - {'key1': 'val1', - 'key2': 'val2'} - ); - expect(requestBody.site.publisher.id).to.equal('example.com'); - expect(requestBody.imp[0].tagid).to.equal('403370'); - expect(requestBody.imp[0].floor).to.equal(0.21); - }); - - it('includes pbadslot in the bid request', function () { - expect(requestBody.imp[0].ext.gpid).to.equal('abc/123'); - }); - - it('sets domain and href correctly', function () { - expect(requestBody.site.domain).to.equal('example.com'); - expect(requestBody.site.page).to.equal('http://example.com/page?param=val'); - }); - - it('should have the version in native object set for native bid', function() { - expect(requestBody.imp[1].native.ver).to.equal('1'); - }); - - it('should have the assets set for native bid', function() { - const assets = JSON.parse(requestBody.imp[1].native.request).assets; - expect(assets[0]).to.deep.equal({'title': {'len': 100}, 'required': 1, 'id': 0}); - expect(assets[1]).to.deep.equal({'img': {'type': 3, 'wmin': 1, 'hmin': 1}, 'required': 1, 'id': 1}); - expect(assets[2]).to.deep.equal({'img': {'type': 1, 'wmin': 1, 'hmin': 1}, 'required': 1, 'id': 2}); - expect(assets[3]).to.deep.equal({'data': {'type': 2}, 'required': 1, 'id': 3}); - expect(assets[4]).to.deep.equal({'data': {'type': 12}, 'required': 1, 'id': 4}); - expect(assets[5]).to.deep.equal({'data': {'type': 1}, 'required': 1, 'id': 5}); - }); - - const videoBidRequests = [{ - 'bidder': 'sortable', - 'params': { - 'tagId': '403370', - 'siteId': 'example.com', - 'video': { - 'minduration': 5, - 'maxduration': 10, - 'startdelay': 0 - } - }, - 'bidId': '30b31c1838de1e', - 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475', - 'mediaTypes': { - 'video': { - 'context': 'instream', - 'mimes': ['video/x-ms-wmv'], - 'playerSize': [[400, 300]], - 'api': [0], - 'protocols': [2, 3], - 'playbackmethod': [1] - } - } - }]; - - const videoRequest = spec.buildRequests(videoBidRequests, {refererInfo: { referer: 'http://localhost:9876/' }}); - const videoRequestBody = JSON.parse(videoRequest.data); - - it('should include video params', () => { - const video = videoRequestBody.imp[0].video; - expect(video.mimes).to.deep.equal(['video/x-ms-wmv']); - expect(video.w).to.equal(400); - expect(video.h).to.equal(300); - expect(video.api).to.deep.equal([0]); - expect(video.protocols).to.deep.equal([2, 3]); - expect(video.playbackmethod).to.deep.equal([1]); - expect(video.minduration).to.equal(5); - expect(video.maxduration).to.equal(10); - expect(video.startdelay).to.equal(0); - }); - - it('sets domain and href correctly', function () { - expect(videoRequestBody.site.domain).to.equal('localhost'); - expect(videoRequestBody.site.page).to.equal('http://localhost:9876/'); - }); - - const gdprBidRequests = [{ - 'bidder': 'sortable', - 'params': { - 'tagId': '403370', - 'siteId': 'example.com', - 'floor': 0.21, - 'keywords': {} - }, - 'sizes': [ - [300, 250] - ], - 'bidId': '30b31c1838de1e', - 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475' - }]; - const consentString = 'BOJ/P2HOJ/P2HABABMAAAAAZ+A=='; - - function getGdprRequestBody(gdprApplies, consentString) { - const gdprRequest = spec.buildRequests(gdprBidRequests, {'gdprConsent': { - 'gdprApplies': gdprApplies, - 'consentString': consentString - }, - refererInfo: { - referer: 'http://localhost:9876/' - }}); - return JSON.parse(gdprRequest.data); - } - - it('should handle gdprApplies being present and true', function() { - const gdprRequestBody = getGdprRequestBody(true, consentString); - expect(gdprRequestBody.regs.ext.gdpr).to.equal(1); - expect(gdprRequestBody.user.ext.consent).to.equal(consentString); - }) - - it('should handle gdprApplies being present and false', function() { - const gdprRequestBody = getGdprRequestBody(false, consentString); - expect(gdprRequestBody.regs.ext.gdpr).to.equal(0); - expect(gdprRequestBody.user.ext.consent).to.equal(consentString); - }) - - it('should handle gdprApplies being undefined', function() { - const gdprRequestBody = getGdprRequestBody(undefined, consentString); - expect(gdprRequestBody.regs).to.deep.equal({ext: {}}); - expect(gdprRequestBody.user.ext.consent).to.equal(consentString); - }) - - it('should handle gdprConsent being undefined', function() { - const gdprRequest = spec.buildRequests(gdprBidRequests, {refererInfo: { referer: 'http://localhost:9876/' }}); - const gdprRequestBody = JSON.parse(gdprRequest.data); - expect(gdprRequestBody.regs).to.deep.equal({ext: {}}); - expect(gdprRequestBody.user.ext.consent).to.equal(undefined); - }) - - const eidsBidRequests = [{ - 'bidder': 'sortable', - 'params': { - 'tagId': '403370', - 'siteId': 'example.com', - 'floor': 0.21, - 'keywords': {} - }, - 'bidId': '30b31c1838de1e', - 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475' - }]; - - it('should not set user ids when none present', function() { - const eidsRequest = spec.buildRequests(eidsBidRequests, {refererInfo: { - referer: 'http://localhost:9876/' - }}); - const eidsRequestBody = JSON.parse(eidsRequest.data); - - expect(eidsRequestBody.user.ext.eids).to.equal(undefined); - }) - - it('should set user ids when present', function() { - eidsBidRequests[0].userId = { criteoId: 'sample-userid' }; - const eidsRequest = spec.buildRequests(eidsBidRequests, {refererInfo: { - referer: 'http://localhost:9876/' - }}); - const eidsRequestBody = JSON.parse(eidsRequest.data); - - expect(eidsRequestBody.user.ext.eids.length).to.equal(1); - }) - }); - - describe('interpretResponse', function () { - function makeResponse() { - return { - body: { - 'id': '5e5c23a5ba71e78', - 'seatbid': [ - { - 'bid': [ - { - 'id': '6vmb3isptf', - 'crid': 'sortablescreative', - 'impid': '322add653672f68', - 'price': 1.22, - 'adm': '', - 'attr': [5], - 'h': 90, - 'nurl': 'http://nurl', - 'w': 728 - } - ], - 'seat': 'MOCK' - } - ], - 'bidid': '5e5c23a5ba71e78' - } - }; - } - - function makeNativeResponse() { - return { - body: { - 'id': '5e5c23a5ba71e77', - 'seatbid': [ - { - 'bid': [ - { - 'id': '6vmb3isptf', - 'crid': 'sortablescreative', - 'impid': '322add653672f67', - 'price': 1.55, - 'adm': '{"native":{"link":{"clicktrackers":[],"url":"https://www.sortable.com/"},"assets":[{"title":{"text":"Ads With Sortable"},"id":1},{"img":{"w":790,"url":"https://path.to/image","h":294},"id":2},{"img":{"url":"https://path.to/icon"},"id":3},{"data":{"value":"Body here"},"id":4},{"data":{"value":"Learn More"},"id":5},{"data":{"value":"Sortable"},"id":6}],"imptrackers":[],"ver":1}}', - 'ext': {'ad_format': 'native'}, - 'h': 90, - 'nurl': 'http://nurl', - 'w': 728 - } - ], - 'seat': 'MOCK' - } - ], - 'bidid': '5e5c23a5ba71e77' - } - }; - } - - const expectedBid = { - 'requestId': '322add653672f68', - 'cpm': 1.22, - 'width': 728, - 'height': 90, - 'creativeId': 'sortablescreative', - 'dealId': null, - 'currency': 'USD', - 'netRevenue': true, - 'mediaType': 'banner', - 'meta': { 'advertiserDomains': [] }, - 'ttl': 60, - 'ad': '
' - }; - - const expectedNativeBid = { - 'requestId': '322add653672f67', - 'cpm': 1.55, - 'width': 728, - 'height': 90, - 'creativeId': 'sortablescreative', - 'dealId': null, - 'currency': 'USD', - 'netRevenue': true, - 'sortable': { 'ad_format': 'native' }, - 'mediaType': 'native', - 'meta': { 'advertiserDomains': [] }, - 'ttl': 60, - 'native': { - 'clickUrl': 'https://www.sortable.com/', - 'title': 'Ads With Sortable', - 'image': {'url': 'https://path.to/image', 'height': 294, 'width': 790}, - 'icon': 'https://path.to/icon', - 'body': 'Body here', - 'cta': 'Learn More', - 'sponsoredBy': 'Sortable' - } - }; - - it('should get the correct bid response', function () { - let result = spec.interpretResponse(makeResponse()); - expect(result.length).to.equal(1); - expect(result[0]).to.deep.equal(expectedBid); - }); - - it('should handle a missing crid', function () { - let noCridResponse = makeResponse(); - delete noCridResponse.body.seatbid[0].bid[0].crid; - const fallbackCrid = noCridResponse.body.seatbid[0].bid[0].id; - let noCridResult = Object.assign({}, expectedBid, {'creativeId': fallbackCrid}); - let result = spec.interpretResponse(noCridResponse); - expect(result.length).to.equal(1); - expect(result[0]).to.deep.equal(noCridResult); - }); - - it('should handle a missing nurl', function () { - let noNurlResponse = makeResponse(); - delete noNurlResponse.body.seatbid[0].bid[0].nurl; - let noNurlResult = Object.assign({}, expectedBid); - noNurlResult.ad = ''; - let result = spec.interpretResponse(noNurlResponse); - expect(result.length).to.equal(1); - expect(result[0]).to.deep.equal(noNurlResult); - }); - - it('should handle a missing adm', function () { - let noAdmResponse = makeResponse(); - delete noAdmResponse.body.seatbid[0].bid[0].adm; - let noAdmResult = Object.assign({}, expectedBid); - delete noAdmResult.ad; - noAdmResult.adUrl = 'http://nurl'; - let result = spec.interpretResponse(noAdmResponse); - expect(result.length).to.equal(1); - expect(result[0]).to.deep.equal(noAdmResult); - }); - - it('handles empty bid response', function () { - let response = { - body: { - 'id': '5e5c23a5ba71e78', - 'seatbid': [] - } - }; - let result = spec.interpretResponse(response); - expect(result.length).to.equal(0); - }); - - it('should get the correct native bid response', function () { - let result = spec.interpretResponse(makeNativeResponse()); - expect(result.length).to.equal(1); - expect(result[0]).to.deep.equal(expectedNativeBid); - }); - - it('fail to parse invalid native bid response', function () { - let response = makeNativeResponse(); - response.body.seatbid[0].bid[0].adm = ''; - let result = spec.interpretResponse(response); - expect(result.length).to.equal(0); - }); - - it('should keep custom properties', () => { - const customProperties = {test: 'a test message', param: {testParam: 1}}; - const expectedResult = Object.assign({}, expectedBid, {[spec.code]: customProperties}); - const response = makeResponse(); - response.body.seatbid[0].bid[0].ext = customProperties; - const result = spec.interpretResponse(response); - expect(result.length).to.equal(1); - expect(result[0]).to.deep.equal(expectedResult); - }); - - it('should handle instream response', () => { - const response = makeResponse(); - const bid = response.body.seatbid[0].bid[0]; - delete bid.nurl; - bid.ext = {ad_format: 'instream'}; - const result = spec.interpretResponse(response)[0]; - expect(result.mediaType).to.equal('video'); - expect(result.vastXml).to.equal(bid.adm); - }); - - it('should return iframe syncs', () => { - const syncResponse = { - ext: { - sync_dsps: [ - ['iframe', 'http://example-dsp/sync-iframe'], - ['image', 'http://example-dsp/sync-image'] - ] - } - }; - expect(spec.getUserSyncs({iframeEnabled: true}, [{body: syncResponse}])).to.deep.equal([{ - type: 'iframe', - url: 'http://example-dsp/sync-iframe' - }]); - }); - - it('should return image syncs', () => { - const syncResponse = { - ext: { - sync_dsps: [ - ['iframe', 'http://example-dsp/sync-iframe'], - ['image', 'http://example-dsp/sync-image'] - ] - } - }; - expect(spec.getUserSyncs({pixelEnabled: true}, [{body: syncResponse}])).to.deep.equal([{ - type: 'image', - url: 'http://example-dsp/sync-image' - }]); - }); - }); -}); diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index 388d10b1453..284df839cc1 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -21,7 +21,8 @@ const baseBidRequest = { } const baseBidderRequest = { refererInfo: { - referer: 'http://example.com/page.html', + page: 'http://example.com/page.html', + domain: 'example.com', } }; diff --git a/test/spec/modules/spotxBidAdapter_spec.js b/test/spec/modules/spotxBidAdapter_spec.js index d536976092b..9d961657ac2 100644 --- a/test/spec/modules/spotxBidAdapter_spec.js +++ b/test/spec/modules/spotxBidAdapter_spec.js @@ -96,7 +96,11 @@ describe('the spotx adapter', function () { beforeEach(function() { bid = getValidBidObject(); - bidRequestObj = {refererInfo: {referer: 'prebid.js'}}; + bidRequestObj = { + refererInfo: { + page: 'prebid.js' + } + }; }); it('should build a very basic request', function() { @@ -353,24 +357,7 @@ describe('the spotx adapter', function () { config.getConfig.restore(); }); - it('should use pageUrl from config if page param is not passed', function() { - var request; - - var origGetConfig = config.getConfig; - sinon.stub(config, 'getConfig').callsFake(function (key) { - if (key === 'pageUrl') { - return 'https://www.spotx.tv'; - } - return origGetConfig.apply(config, arguments); - }); - - request = spec.buildRequests([bid], bidRequestObj)[0]; - - expect(request.data.site.page).to.equal('https://www.spotx.tv'); - config.getConfig.restore(); - }); - - it('should use refererInfo.referer if no page or pageUrl are passed', function() { + it('should use refererInfo.referer if no page is passed', function() { var request; request = spec.buildRequests([bid], bidRequestObj)[0]; diff --git a/test/spec/modules/sspBCBidAdapter_spec.js b/test/spec/modules/sspBCBidAdapter_spec.js index 257d6815709..f286eb3a1ff 100644 --- a/test/spec/modules/sspBCBidAdapter_spec.js +++ b/test/spec/modules/sspBCBidAdapter_spec.js @@ -209,7 +209,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -221,7 +222,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -233,7 +235,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -245,7 +248,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -257,7 +261,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -269,7 +274,8 @@ describe('SSPBC adapter', function () { gdprConsent, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -280,7 +286,8 @@ describe('SSPBC adapter', function () { bids: bids_test, refererInfo: { reachedTop: true, - referer: 'https://test.site.pl/', + page: 'https://test.site.pl/', + domain: 'test.site.pl', stack: ['https://test.site.pl/'], } }; @@ -511,7 +518,7 @@ describe('SSPBC adapter', function () { }); it('should send page url from refererInfo', function () { - expect(payload.site.page).to.equal(bidRequest.refererInfo.referer); + expect(payload.site.page).to.equal(bidRequest.refererInfo.page); }); it('should send gdpr data', function () { diff --git a/test/spec/modules/tappxBidAdapter_spec.js b/test/spec/modules/tappxBidAdapter_spec.js index 8866670df77..65753320875 100644 --- a/test/spec/modules/tappxBidAdapter_spec.js +++ b/test/spec/modules/tappxBidAdapter_spec.js @@ -121,7 +121,7 @@ const c_SERVERRESPONSE_V = { const c_CONSENTSTRING = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A=='; const c_VALIDBIDREQUESTS = [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1}, 'userId': {'haloId': '0000x179MZAzMqUWsFonu7Drm3eDDBMYtj5SPoWQnl89Upk3WTlCvEnKI9SshX0p6eFJ7otPYix179MZAzMqUWsFonu7Drm3eDDBMYtj5SPoWQnl89Upk3WTlCvEnKI9SshX0p6e', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_rEXbz6UYtYEJelYrDaZOLkh8WcF9J0ZHmEHFKZEBlLXsgP6xqXU3BCj4Ay0Z6fw_jSOaHxMHwd-voRHqFA4Q9NwAxFcVLyPWnNGZ9VbcSAPos1wupq7Xu3MIm-Bw_0vxjhZdWNy4chM9x3i', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0000\u0000\u0000\u0000�\u0000\u0000���\u0000\u0000\u0000?�\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000A\u0000\u0000;', 'lotamePanoramaId': 'xTtLUY7GwqX2MMqSHo9RQ2YUOIBFhlASOR43I9KjvgtcrxIys3RxME96M02LTjWR', 'parrableId': {'eid': '02.YoqC9lWZh8.C8QTSiJTNgI6Pp0KCM5zZgEgwVMSsVP5W51X8cmiUHQESq9WRKB4nreqZJwsWIcNKlORhG4u25Wm6lmDOBmQ0B8hv0KP6uVQ97aouuH52zaz2ctVQTORUKkErPRPcaCJ7dKFcrNoF2i6WOR0S5Nk'}, 'pubcid': 'b1254-152f-12F5-5698-dI1eljK6C7WA', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}]; const c_VALIDBIDAPPREQUESTS = [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1, 'app': {'name': 'Tappx Test', 'bundle': 'com.test.tappx', 'domain': 'tappx.com', 'publisher': { 'name': 'Tappx', 'domain': 'tappx.com' }}}, 'userId': {'haloId': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0001\u0000\u0001\u0000�\u0000\u0000���\u0000\u0000\u0000!�\u0004\u0001\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0002D\u0001\u0000;', 'lotamePanoramaId': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'parrableId': {'eid': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0'}, 'pubcid': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}, {'source': 'intentiq.com', 'uids': [{'id': 'GIF89a\u0001\u0000\u0001\u0000�\u0000\u0000���\u0000\u0000\u0000!�\u0004\u0001\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0002D\u0001\u0000;', 'atype': 1}]}, {'source': 'crwdcntrl.net', 'uids': [{'id': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'atype': 1}]}, {'source': 'parrable.com', 'uids': [{'id': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0', 'atype': 1}]}, {'source': 'pubcid.org', 'uids': [{'id': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'atype': 1}]}, {'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}]; -const c_BIDDERREQUEST_B = {'bidderCode': 'tappx', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'bidderRequestId': '1c674c14a3889c', 'bids': [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1}, 'userId': {'haloId': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0000\u0000\u0000\u0000�\u0000\u0000���\u0000\u0000\u0000?�\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000A\u0000\u0000;', 'lotamePanoramaId': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'parrableId': {'eid': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0'}, 'pubcid': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}], 'auctionStart': 1617088922120, 'timeout': 700, 'refererInfo': {'referer': 'http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true', 'reachedTop': true, 'isAmp': false, 'numIframes': 0, 'stack': ['http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true'], 'canonicalUrl': null}, 'gdprConsent': {'consentString': c_CONSENTSTRING, 'vendorData': {'metadata': 'BO-JeiTPABAOkAAABAENABA', 'gdprApplies': true, 'hasGlobalScope': false, 'cookieVersion': 1, 'created': '2020-12-09T09:22:09.900Z', 'lastUpdated': '2021-01-14T15:44:03.600Z', 'cmpId': 0, 'cmpVersion': 1, 'consentScreen': 0, 'consentLanguage': 'EN', 'vendorListVersion': 1, 'maxVendorId': 0, 'purposeConsents': {}, 'vendorConsents': {}}, 'gdprApplies': true, 'apiVersion': 1}, 'uspConsent': '1YCC', 'start': 1611308859099}; +const c_BIDDERREQUEST_B = {'bidderCode': 'tappx', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'bidderRequestId': '1c674c14a3889c', 'bids': [{'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com\/rtb\/v2\/', 'tappxkey': 'pub-1234-android-1234', 'endpoint': 'ZZ1234PBJS', 'bidfloor': 0.005, 'test': 1}, 'userId': {'haloId': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'id5id': {'uid': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'ext': {'linkType': 0}}, 'intentIqId': 'GIF89a\u0000\u0000\u0000\u0000�\u0000\u0000���\u0000\u0000\u0000?�\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000A\u0000\u0000;', 'lotamePanoramaId': '8003916b61a95b185690ec103bdf4945a70213e01818a5e5d8690b542730755a', 'parrableId': {'eid': '01.1617088921.7faa68d9570a50ea8e4f359e9b99ca4b7509e948a6175b3e5b0b8cbaf5b62424104ccfb0191ca79366de8368ed267b89a68e236df5f41f96f238e4301659e9023fec05e46399fb1ad0a0'}, 'pubcid': 'b7143795-852f-42f0-8864-5ecbea1ade4e', 'pubProvidedId': [{'source': 'domain.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 1, 'ext': {'stype': 'ppuid'}}]}, {'source': '3rdpartyprovided.com', 'uids': [{'id': 'value read from cookie or local storage', 'atype': 3, 'ext': {'stype': 'sha256email'}}]}]}, 'userIdAsEids': [{'source': 'audigent.com', 'uids': [{'id': '0000fgclxw05ycn0608xiyi90bwpa0c0evvlif0hv1x0i0ku88il0ntek0o0qskvir0trr70u0wqxiix0zq3u1012pa5j315ogh1618nmsj91bmt41c1elzfjf1hl5r1i1kkc2jl', 'atype': 1}]}, {'source': 'id5-sync.com', 'uids': [{'id': 'ID5@iu-PJX_OQ0d6FJjKS8kYfUpHriD_qpoXJUngedfpNva812If1fHEqHHkamLC89txVxk1i9WGqeQrTX97HFCgv9QDa1M_bkHUBsAWFm-D5r1rYrsfMFFiyqwCAEzqNbvsUZXOYCAQSjPcLxR4of22w-U9_JDRThCGRDV3Fmvc38E', 'atype': 1, 'ext': {'linkType': 0}}]}], 'ortb2Imp': {'ext': {'data': {'adserver': {'name': 'gam', 'adslot': '/19968336/header-bid-tag-0'}, 'pbadslot': '/19968336/header-bid-tag-0'}}}, 'mediaTypes': {'banner': {'sizes': [[320, 480], [320, 50]]}}, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'transactionId': '71c0d86b-4b47-4aff-a6da-1af0b1712439', 'sizes': [[320, 480], [320, 50]], 'bidId': '264d7969b125a5', 'bidderRequestId': '1c674c14a3889c', 'auctionId': '13a8a3a9-ed3a-4101-9435-4699ee77bb62', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}], 'auctionStart': 1617088922120, 'timeout': 700, 'refererInfo': {'page': 'http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true', 'reachedTop': true, 'isAmp': false, 'numIframes': 0, 'stack': ['http://localhost:9999/integrationExamples/gpt/gdpr_hello_world.html?pbjs_debug=true'], 'canonicalUrl': null}, 'gdprConsent': {'consentString': c_CONSENTSTRING, 'vendorData': {'metadata': 'BO-JeiTPABAOkAAABAENABA', 'gdprApplies': true, 'hasGlobalScope': false, 'cookieVersion': 1, 'created': '2020-12-09T09:22:09.900Z', 'lastUpdated': '2021-01-14T15:44:03.600Z', 'cmpId': 0, 'cmpVersion': 1, 'consentScreen': 0, 'consentLanguage': 'EN', 'vendorListVersion': 1, 'maxVendorId': 0, 'purposeConsents': {}, 'vendorConsents': {}}, 'gdprApplies': true, 'apiVersion': 1}, 'uspConsent': '1YCC', 'start': 1611308859099}; const c_BIDDERREQUEST_V = {'method': 'POST', 'url': 'https://testing.ssp.tappx.com/rtb/v2//VZ12TESTCTV?type_cnn=prebidjs&v=0.1.10329', 'data': '{"site":{"name":"localhost","bundle":"localhost","domain":"localhost"},"user":{"ext":{}},"id":"0fecfa84-c541-49f8-8c45-76b90fddc30e","test":1,"at":1,"tmax":1000,"bidder":"tappx","imp":[{"video":{"mimes":["video/mp4","application/javascript"],"minduration":3,"maxduration":30,"startdelay":5,"playbackmethod":[1,3],"api":[1,2],"protocols":[2,3],"battr":[13,14],"linearity":1,"placement":2,"minbitrate":10,"maxbitrate":10,"w":320,"h":250},"id":"2398241a5a860b","tagid":"localhost_typeAdBanVid_windows","secure":1,"bidfloor":0.005,"ext":{"bidder":{"tappxkey":"pub-1234-desktop-1234","endpoint":"vz34906po","host":"https://vz34906po.pub.tappx.com/rtb/","bidfloor":0.005}}}],"device":{"os":"windows","ip":"peer","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36","h":864,"w":1536,"dnt":0,"language":"en","make":"Google Inc."},"params":{"host":"tappx.com","bidfloor":0.005},"regs":{"gdpr":0,"ext":{}}}', 'bids': {'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com/rtb/v2/', 'tappxkey': 'pub-1234-desktop-1234', 'endpoint': 'VZ12TESTCTV', 'bidfloor': 0.005, 'test': true}, 'crumbs': {'pubcid': 'dccfe922-3823-4676-b7b2-e5ed8743154e'}, 'ortb2Imp': {'ext': {'data': {'pbadslot': 'video-ad-div'}}}, 'renderer': {'options': {'text': 'Tappx Outstream Video'}}, 'mediaTypes': {'video': {'mimes': ['video/mp4', 'application/javascript'], 'minduration': 3, 'maxduration': 30, 'startdelay': 5, 'playbackmethod': [1, 3], 'api': [1, 2], 'protocols': [2, 3], 'battr': [13, 14], 'linearity': 1, 'placement': 2, 'minbitrate': 10, 'maxbitrate': 10, 'w': 320, 'h': 250}}, 'adUnitCode': 'video-ad-div', 'transactionId': 'ed41c805-d14c-49c3-954d-26b98b2aa2c2', 'sizes': [[320, 250]], 'bidId': '28f49c71b13f2f', 'bidderRequestId': '1401710496dc7', 'auctionId': 'e807363f-3095-43a8-a4a6-f44196cb7318', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}} const c_BIDDERREQUEST_VOutstream = {'method': 'POST', 'url': 'https://testing.ssp.tappx.com/rtb/v2//VZ12TESTCTV?type_cnn=prebidjs&v=0.1.10329', 'data': '{"site":{"name":"localhost","bundle":"localhost","domain":"localhost"},"user":{"ext":{}},"id":"0fecfa84-c541-49f8-8c45-76b90fddc30e","test":1,"at":1,"tmax":1000,"bidder":"tappx","imp":[{"video":{"context": "outstream","playerSize":[640, 480],"mimes":["video/mp4","application/javascript"],"minduration":3,"maxduration":30,"startdelay":5,"playbackmethod":[1,3],"api":[1,2],"protocols":[2,3],"battr":[13,14],"linearity":1,"placement":2,"minbitrate":10,"maxbitrate":10,"w":320,"h":250},"id":"2398241a5a860b","tagid":"localhost_typeAdBanVid_windows","secure":1,"bidfloor":0.005,"ext":{"bidder":{"tappxkey":"pub-1234-desktop-1234","endpoint":"vz34906po","host":"https://vz34906po.pub.tappx.com/rtb/","bidfloor":0.005}}}],"device":{"os":"windows","ip":"peer","ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36","h":864,"w":1536,"dnt":0,"language":"en","make":"Google Inc."},"params":{"host":"tappx.com","bidfloor":0.005},"regs":{"gdpr":0,"ext":{}}}', 'bids': {'bidder': 'tappx', 'params': {'host': 'testing.ssp.tappx.com/rtb/v2/', 'tappxkey': 'pub-1234-desktop-1234', 'endpoint': 'VZ12TESTCTV', 'bidfloor': 0.005, 'test': true}, 'crumbs': {'pubcid': 'dccfe922-3823-4676-b7b2-e5ed8743154e'}, 'ortb2Imp': {'ext': {'data': {'pbadslot': 'video-ad-div'}}}, 'renderer': {'options': {'text': 'Tappx Outstream Video'}}, 'mediaTypes': {'video': {'mimes': ['video/mp4', 'application/javascript'], 'minduration': 3, 'maxduration': 30, 'startdelay': 5, 'playbackmethod': [1, 3], 'api': [1, 2], 'protocols': [2, 3], 'battr': [13, 14], 'linearity': 1, 'placement': 2, 'minbitrate': 10, 'maxbitrate': 10, 'w': 320, 'h': 250}}, 'adUnitCode': 'video-ad-div', 'transactionId': 'ed41c805-d14c-49c3-954d-26b98b2aa2c2', 'sizes': [[320, 250]], 'bidId': '28f49c71b13f2f', 'bidderRequestId': '1401710496dc7', 'auctionId': 'e807363f-3095-43a8-a4a6-f44196cb7318', 'src': 'client', 'bidRequestsCount': 1, 'bidderRequestsCount': 1, 'bidderWinsCount': 0}} diff --git a/test/spec/modules/teadsBidAdapter_spec.js b/test/spec/modules/teadsBidAdapter_spec.js index 8ebe7b907f5..a8315050970 100644 --- a/test/spec/modules/teadsBidAdapter_spec.js +++ b/test/spec/modules/teadsBidAdapter_spec.js @@ -166,7 +166,7 @@ describe('teadsBidAdapter', () => { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + page: 'https://example.com/page.html', reachedTop: true, numIframes: 2 } diff --git a/test/spec/modules/tpmnBidAdapter_spec.js b/test/spec/modules/tpmnBidAdapter_spec.js index 468769c2573..e2b14b18f61 100644 --- a/test/spec/modules/tpmnBidAdapter_spec.js +++ b/test/spec/modules/tpmnBidAdapter_spec.js @@ -98,7 +98,7 @@ describe('tpmnAdapterTests', function () { const tempBidRequests = [bid]; const tempBidderRequest = { refererInfo: { - referer: 'http://localhost/test', + page: 'http://localhost/test', site: { domain: 'localhost', page: 'http://localhost/test' diff --git a/test/spec/modules/tripleliftBidAdapter_spec.js b/test/spec/modules/tripleliftBidAdapter_spec.js index f4a07f536e1..733265b0bae 100644 --- a/test/spec/modules/tripleliftBidAdapter_spec.js +++ b/test/spec/modules/tripleliftBidAdapter_spec.js @@ -370,7 +370,7 @@ describe('triplelift adapter', function () { } ], refererInfo: { - referer: 'https://examplereferer.com' + page: 'https://examplereferer.com' }, gdprConsent: { consentString: GDPR_CONSENT_STR, diff --git a/test/spec/modules/ttdBidAdapter_spec.js b/test/spec/modules/ttdBidAdapter_spec.js index b99bb03f270..b933a5dd0c9 100644 --- a/test/spec/modules/ttdBidAdapter_spec.js +++ b/test/spec/modules/ttdBidAdapter_spec.js @@ -212,7 +212,7 @@ describe('ttdBidAdapter', function () { 'auctionStart': 1540945362095, 'timeout': 3000, 'refererInfo': { - 'referer': 'https://www.example.com/test', + 'page': 'https://www.example.com/test', 'reachedTop': true, 'numIframes': 0, 'stack': [ diff --git a/test/spec/modules/undertoneBidAdapter_spec.js b/test/spec/modules/undertoneBidAdapter_spec.js index c24f63c0b99..8766307b3bd 100644 --- a/test/spec/modules/undertoneBidAdapter_spec.js +++ b/test/spec/modules/undertoneBidAdapter_spec.js @@ -152,13 +152,13 @@ const bidReqUserIds = [{ const bidderReq = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' } }; const bidderReqGdpr = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' }, gdprConsent: { gdprApplies: true, @@ -168,14 +168,14 @@ const bidderReqGdpr = { const bidderReqCcpa = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' }, uspConsent: 'NY12' }; const bidderReqCcpaAndGdpr = { refererInfo: { - referer: 'http://prebid.org/dev-docs/bidder-adaptor.html' + topmostLocation: 'http://prebid.org/dev-docs/bidder-adaptor.html' }, gdprConsent: { gdprApplies: true, @@ -343,18 +343,18 @@ describe('Undertone Adapter', () => { }); it('should send request to correct url via POST not in GDPR or CCPA', function () { const request = spec.buildRequests(bidReq, bidderReq); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}`; expect(request.url).to.equal(REQ_URL); expect(request.method).to.equal('POST'); }); it('should send request to correct url via POST when in GDPR', function () { const request = spec.buildRequests(bidReq, bidderReqGdpr); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); let gdpr = bidderReqGdpr.gdprConsent.gdprApplies ? 1 : 0; const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}&gdpr=${gdpr}&gdprstr=${bidderReqGdpr.gdprConsent.consentString}`; expect(request.url).to.equal(REQ_URL); @@ -362,9 +362,9 @@ describe('Undertone Adapter', () => { }); it('should send request to correct url via POST when in CCPA', function () { const request = spec.buildRequests(bidReq, bidderReqCcpa); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); let ccpa = bidderReqCcpa.uspConsent; const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}&ccpa=${ccpa}`; expect(request.url).to.equal(REQ_URL); @@ -372,9 +372,9 @@ describe('Undertone Adapter', () => { }); it('should send request to correct url via POST when in GDPR and CCPA', function () { const request = spec.buildRequests(bidReq, bidderReqCcpaAndGdpr); - const domainStart = bidderReq.refererInfo.referer.indexOf('//'); - const domainEnd = bidderReq.refererInfo.referer.indexOf('/', domainStart + 2); - const domain = bidderReq.refererInfo.referer.substring(domainStart + 2, domainEnd); + const domainStart = bidderReq.refererInfo.topmostLocation.indexOf('//'); + const domainEnd = bidderReq.refererInfo.topmostLocation.indexOf('/', domainStart + 2); + const domain = bidderReq.refererInfo.topmostLocation.substring(domainStart + 2, domainEnd); let ccpa = bidderReqCcpaAndGdpr.uspConsent; let gdpr = bidderReqCcpaAndGdpr.gdprConsent.gdprApplies ? 1 : 0; const REQ_URL = `${URL}?pid=${bidReq[0].params.publisherId}&domain=${domain}&gdpr=${gdpr}&gdprstr=${bidderReqGdpr.gdprConsent.consentString}&ccpa=${ccpa}`; diff --git a/test/spec/modules/unicornBidAdapter_spec.js b/test/spec/modules/unicornBidAdapter_spec.js index d10324a8c86..0abb09bfb78 100644 --- a/test/spec/modules/unicornBidAdapter_spec.js +++ b/test/spec/modules/unicornBidAdapter_spec.js @@ -270,7 +270,7 @@ const bidderRequest = { auctionStart: 1581064124172, timeout: 1000, refererInfo: { - referer: 'https://uni-corn.net/', + ref: 'https://uni-corn.net/', reachedTop: true, numIframes: 0, stack: ['https://uni-corn.net/'] diff --git a/test/spec/modules/ventesBidAdapter_spec.js b/test/spec/modules/ventesBidAdapter_spec.js index 219c24deced..ffe4ef79cfb 100644 --- a/test/spec/modules/ventesBidAdapter_spec.js +++ b/test/spec/modules/ventesBidAdapter_spec.js @@ -28,7 +28,8 @@ describe('Ventes Adapter', function () { adUnitContext: { refererInfo: { - referer: 'https://ventesavenues.in', + page: 'https://ventesavenues.in', + domain: 'ventesavenues.in', } }, @@ -373,7 +374,7 @@ describe('Ventes Adapter', function () { expect(serverRequests[0].data).to.exist.and.to.be.an('object'); expect(serverRequests[0].data.id).to.exist.and.to.be.an('string').and.to.equal(adUnits[0].bidderRequestId); expect(serverRequests[0].data.site).to.exist.and.to.be.an('object'); - expect(serverRequests[0].data.site.page).to.exist.and.to.be.an('string').and.to.equal(adUnitContext.refererInfo.referer); + expect(serverRequests[0].data.site.page).to.exist.and.to.be.an('string').and.to.equal(adUnitContext.refererInfo.page); expect(serverRequests[0].data.site.domain).to.exist.and.to.be.an('string').and.to.equal('ventesavenues.in'); expect(serverRequests[0].data.site.name).to.exist.and.to.be.an('string').and.to.equal('ventesavenues.in'); }); diff --git a/test/spec/modules/vidazooBidAdapter_spec.js b/test/spec/modules/vidazooBidAdapter_spec.js index 8963815826d..87107db4dc3 100644 --- a/test/spec/modules/vidazooBidAdapter_spec.js +++ b/test/spec/modules/vidazooBidAdapter_spec.js @@ -48,7 +48,7 @@ const BIDDER_REQUEST = { }, 'uspConsent': 'consent_string', 'refererInfo': { - 'referer': 'https://www.greatsite.com' + 'page': 'https://www.greatsite.com' } }; @@ -147,7 +147,7 @@ describe('VidazooBidAdapter', function () { }); it('should build request for each size', function () { - const hashUrl = hashCode(BIDDER_REQUEST.refererInfo.referer); + const hashUrl = hashCode(BIDDER_REQUEST.refererInfo.page); const requests = adapter.buildRequests([BID], BIDDER_REQUEST); expect(requests).to.have.length(1); expect(requests[0]).to.deep.equal({ diff --git a/test/spec/modules/vidoomyBidAdapter_spec.js b/test/spec/modules/vidoomyBidAdapter_spec.js index 8aa127faef2..61b7f2fad7d 100644 --- a/test/spec/modules/vidoomyBidAdapter_spec.js +++ b/test/spec/modules/vidoomyBidAdapter_spec.js @@ -95,7 +95,8 @@ describe('vidoomyBidAdapter', function() { refererInfo: { numIframes: 0, reachedTop: true, - referer: 'http://example.com', + domain: 'example.com', + page: 'http://example.com', stack: ['http://example.com'] } }; diff --git a/test/spec/modules/visxBidAdapter_spec.js b/test/spec/modules/visxBidAdapter_spec.js index 4aaaf996f58..b8a66e7c3b9 100755 --- a/test/spec/modules/visxBidAdapter_spec.js +++ b/test/spec/modules/visxBidAdapter_spec.js @@ -85,10 +85,10 @@ describe('VisxAdapter', function () { const bidderRequest = { timeout: 3000, refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; - const referrer = bidderRequest.refererInfo.referer; + const referrer = bidderRequest.refererInfo.page; const schainObject = { ver: '1.0', nodes: [ @@ -425,10 +425,10 @@ describe('VisxAdapter', function () { const bidderRequest = { timeout: 3000, refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; - const referrer = bidderRequest.refererInfo.referer; + const referrer = bidderRequest.refererInfo.page; const bidRequests = [ { 'bidder': 'visx', @@ -489,10 +489,10 @@ describe('VisxAdapter', function () { const bidderRequest = { timeout: 3000, refererInfo: { - referer: 'https://example.com' + page: 'https://example.com' } }; - const referrer = bidderRequest.refererInfo.referer; + const referrer = bidderRequest.refererInfo.page; const bidRequests = [ { 'bidder': 'visx', diff --git a/test/spec/modules/voxBidAdapter_spec.js b/test/spec/modules/voxBidAdapter_spec.js index 6906c7dbba4..923b0465e6c 100644 --- a/test/spec/modules/voxBidAdapter_spec.js +++ b/test/spec/modules/voxBidAdapter_spec.js @@ -15,7 +15,7 @@ function getSlotConfigs(mediaTypes, params) { describe('VOX Adapter', function() { const PLACE_ID = '5af45ad34d506ee7acad0c26'; const bidderRequest = { - refererInfo: { referer: 'referer' } + refererInfo: { page: 'referer' } } const bannerMandatoryParams = { placementId: PLACE_ID, diff --git a/test/spec/modules/winrBidAdapter_spec.js b/test/spec/modules/winrBidAdapter_spec.js index 445ccc9d19f..174f600fa06 100644 --- a/test/spec/modules/winrBidAdapter_spec.js +++ b/test/spec/modules/winrBidAdapter_spec.js @@ -434,7 +434,7 @@ describe('WinrAdapter', function () { const bidRequest = Object.assign({}, bidRequests[0]) const bidderRequest = { refererInfo: { - referer: 'https://example.com/page.html', + topmostLocation: 'https://example.com/page.html', reachedTop: true, numIframes: 2, stack: [ diff --git a/test/spec/modules/yahoosspBidAdapter_spec.js b/test/spec/modules/yahoosspBidAdapter_spec.js index 4b157865c06..3c958f2cdc8 100644 --- a/test/spec/modules/yahoosspBidAdapter_spec.js +++ b/test/spec/modules/yahoosspBidAdapter_spec.js @@ -81,7 +81,7 @@ let generateBidderRequest = (bidRequestArray, adUnitCode, ortb2 = {}) => { bidderRequestId: '112f1c7c5d399a', bids: bidRequestArray, refererInfo: { - referer: 'https://publisher-test.com', + page: 'https://publisher-test.com', reachedTop: true, isAmp: false, numIframes: 0, @@ -827,7 +827,7 @@ describe('YahooSSP Bid Adapter:', () => { const data = spec.buildRequests(validBidRequests, bidderRequest).data; expect(data.site).to.deep.equal({ id: bidderRequest.bids[0].params.dcn, - page: bidderRequest.refererInfo.referer + page: bidderRequest.refererInfo.page }); expect(data.device).to.deep.equal({ diff --git a/test/spec/modules/yandexBidAdapter_spec.js b/test/spec/modules/yandexBidAdapter_spec.js index 833f883fb7c..f4b15d6dbc4 100644 --- a/test/spec/modules/yandexBidAdapter_spec.js +++ b/test/spec/modules/yandexBidAdapter_spec.js @@ -56,8 +56,6 @@ describe('Yandex adapter', function () { }); describe('buildRequests', function () { - const refererUrl = 'https://yandex.ru/secure-ads'; - const gdprConsent = { gdprApplies: 1, consentString: 'concent-string', @@ -66,7 +64,7 @@ describe('Yandex adapter', function () { const bidderRequest = { refererInfo: { - referer: refererUrl + domain: 'yandex.ru' }, gdprConsent }; diff --git a/test/spec/modules/yieldlabBidAdapter_spec.js b/test/spec/modules/yieldlabBidAdapter_spec.js index 2811d6b1370..6ec1e995bfc 100644 --- a/test/spec/modules/yieldlabBidAdapter_spec.js +++ b/test/spec/modules/yieldlabBidAdapter_spec.js @@ -238,7 +238,7 @@ describe('yieldlabBidAdapter', function () { canonicalUrl: undefined, numIframes: 0, reachedTop: true, - referer: 'https://www.yieldlab.de/test?with=querystring', + page: 'https://www.yieldlab.de/test?with=querystring', stack: ['https://www.yieldlab.de/test?with=querystring'] } }) diff --git a/test/spec/modules/yieldoneAnalyticsAdapter_spec.js b/test/spec/modules/yieldoneAnalyticsAdapter_spec.js index 81a6365bba2..f77bc7bc7ba 100644 --- a/test/spec/modules/yieldoneAnalyticsAdapter_spec.js +++ b/test/spec/modules/yieldoneAnalyticsAdapter_spec.js @@ -46,7 +46,7 @@ describe('Yieldone Prebid Analytic', function () { { bidderCode: 'biddertest_1', auctionId: auctionId, - refererInfo: {referer: testReferrer}, + refererInfo: {page: testReferrer}, bids: [ { adUnitCode: '0000', @@ -71,7 +71,7 @@ describe('Yieldone Prebid Analytic', function () { { bidderCode: 'biddertest_2', auctionId: auctionId, - refererInfo: {referer: testReferrer}, + refererInfo: {page: testReferrer}, bids: [ { adUnitCode: '0000', @@ -87,7 +87,7 @@ describe('Yieldone Prebid Analytic', function () { { bidderCode: 'biddertest_3', auctionId: auctionId, - refererInfo: {referer: testReferrer}, + refererInfo: {page: testReferrer}, bids: [ { adUnitCode: '0000', diff --git a/test/spec/modules/zetaBidAdapter_spec.js b/test/spec/modules/zetaBidAdapter_spec.js index 25350725dee..529fb8e8d31 100644 --- a/test/spec/modules/zetaBidAdapter_spec.js +++ b/test/spec/modules/zetaBidAdapter_spec.js @@ -10,7 +10,7 @@ describe('Zeta Bid Adapter', function() { } }, refererInfo: { - referer: 'testprebid.com' + page: 'testprebid.com' }, params: { placement: 12345, diff --git a/test/spec/modules/zeta_global_sspBidAdapter_spec.js b/test/spec/modules/zeta_global_sspBidAdapter_spec.js index 20113a63994..708470e7d97 100644 --- a/test/spec/modules/zeta_global_sspBidAdapter_spec.js +++ b/test/spec/modules/zeta_global_sspBidAdapter_spec.js @@ -25,6 +25,25 @@ describe('Zeta Ssp Bid Adapter', function () { } ]; + const params = { + user: { + uid: 222, + buyeruid: 333 + }, + tags: { + someTag: 444, + }, + sid: 'publisherId', + shortname: 'test_shortname', + site: { + page: 'testPage' + }, + app: { + bundle: 'testBundle' + }, + test: 1 + }; + const bannerRequest = [{ bidId: 12345, auctionId: 67890, @@ -34,25 +53,15 @@ describe('Zeta Ssp Bid Adapter', function () { } }, refererInfo: { - referer: 'http://www.zetaglobal.com/page?param=value' + page: 'http://www.zetaglobal.com/page?param=value', + domain: 'www.zetaglobal.com', }, gdprConsent: { gdprApplies: 1, consentString: 'consentString' }, uspConsent: 'someCCPAString', - params: { - placement: 111, - user: { - uid: 222, - buyeruid: 333 - }, - tags: { - someTag: 444, - sid: 'publisherId' - }, - test: 1 - }, + params: params, userIdAsEids: eids }]; @@ -72,18 +81,7 @@ describe('Zeta Ssp Bid Adapter', function () { refererInfo: { referer: 'http://www.zetaglobal.com/page?param=video' }, - params: { - placement: 111, - user: { - uid: 222, - buyeruid: 333 - }, - tags: { - someTag: 444, - sid: 'publisherId' - }, - test: 1 - }, + params: params }]; it('Test the bid validation function', function () { @@ -111,7 +109,7 @@ describe('Zeta Ssp Bid Adapter', function () { const request = spec.buildRequests(bannerRequest, bannerRequest[0]); const payload = JSON.parse(request.data); expect(payload.site.page).to.eql('http://www.zetaglobal.com/page?param=value'); - expect(payload.site.domain).to.eql(window.location.origin); // config.js -> DEFAULT_PUBLISHER_DOMAIN + expect(payload.site.domain).to.eql('zetaglobal.com'); }); it('Test the request processing function', function () { @@ -269,4 +267,20 @@ describe('Zeta Ssp Bid Adapter', function () { expect(payload.imp[0].banner).to.be.undefined; }); + + it('Test required params in banner request', function () { + const request = spec.buildRequests(bannerRequest, bannerRequest[0]); + const payload = JSON.parse(request.data); + expect(payload.ext.sid).to.eql('publisherId'); + expect(payload.ext.tags.someTag).to.eql(444); + expect(payload.ext.tags.shortname).to.eql('test_shortname'); + }); + + it('Test required params in video request', function () { + const request = spec.buildRequests(videoRequest, videoRequest[0]); + const payload = JSON.parse(request.data); + expect(payload.ext.sid).to.eql('publisherId'); + expect(payload.ext.tags.someTag).to.eql(444); + expect(payload.ext.tags.shortname).to.eql('test_shortname'); + }); });